为用户添加正确的权限以使用 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] 作为所有者执行 作为 开始 ... 结束