为用户添加正确的权限以使用 sys.dm_os_volume_stats table 功能
Add the right permissions to a user to use sys.dm_os_volume_stats table function
我正在尝试从我在 SQL 服务器中调用的当前数据库中获取总磁盘大小,但是进行调用的用户没有正确的权限执行这个函数。
我正在使用这个脚本
SELECT distinct(volume_mount_point),
total_bytes/1048576/1024 as Size_in_GB,
available_bytes/1048576/1024 as Free_in_GB,
(select ((available_bytes/1048576* 1.0)/(total_bytes/1048576* 1.0) *100)) as FreePercentage
FROM sys.master_files AS f CROSS APPLY
sys.dm_os_volume_stats(f.database_id, f.file_id)
group by volume_mount_point, total_bytes/1048576,
available_bytes/1048576 order by 1
我也尝试过使用 xp_cmdshell
,但此应用程序 运行 所在的一些服务器,出于某些 IT 方面的考虑,不允许我们使用它。
我使用 EXEC master.dbo.xp_fixeddrives
得到了部分结果,但它只给我免费的 Space 可用,我仍然需要使用过的 space.
有什么方法可以编写出正确的权限以允许我的用户使用 sys.dm_os_volume_stats
?
从 the documentation 开始,对于该 DMO,登录需要 VIEW SERVER STATE
权限。注意 - 除了从该 DMO 中读取的能力之外,该权限还提供了很多其他功能,因此请对其进行评估并评估它是否适合您的环境。
我通过添加 "WITH EXECUTE AS OWNER" 解决了我的问题
创建过程 [dbo].[GetPerformanceStatus]
作为所有者执行
作为
开始
...
结束
我正在尝试从我在 SQL 服务器中调用的当前数据库中获取总磁盘大小,但是进行调用的用户没有正确的权限执行这个函数。
我正在使用这个脚本
SELECT distinct(volume_mount_point),
total_bytes/1048576/1024 as Size_in_GB,
available_bytes/1048576/1024 as Free_in_GB,
(select ((available_bytes/1048576* 1.0)/(total_bytes/1048576* 1.0) *100)) as FreePercentage
FROM sys.master_files AS f CROSS APPLY
sys.dm_os_volume_stats(f.database_id, f.file_id)
group by volume_mount_point, total_bytes/1048576,
available_bytes/1048576 order by 1
我也尝试过使用 xp_cmdshell
,但此应用程序 运行 所在的一些服务器,出于某些 IT 方面的考虑,不允许我们使用它。
我使用 EXEC master.dbo.xp_fixeddrives
得到了部分结果,但它只给我免费的 Space 可用,我仍然需要使用过的 space.
有什么方法可以编写出正确的权限以允许我的用户使用 sys.dm_os_volume_stats
?
从 the documentation 开始,对于该 DMO,登录需要 VIEW SERVER STATE
权限。注意 - 除了从该 DMO 中读取的能力之外,该权限还提供了很多其他功能,因此请对其进行评估并评估它是否适合您的环境。
我通过添加 "WITH EXECUTE AS OWNER" 解决了我的问题
创建过程 [dbo].[GetPerformanceStatus] 作为所有者执行 作为 开始 ... 结束