我正在尝试从我正在SQL Server中调用的当前数据库中获取磁盘总大小,但是在其下进行调用的用户没有执行此功能的正确权限。
我正在使用此脚本
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
有部分结果,但是它只给我可用的可用空间,我仍然需要使用的空间。
是否有任何方法可以编写适当的权限以允许我的用户使用sys.dm_os_volume_stats
?
从该DMO的the documentation,登录需要VIEW SERVER STATE
权限。注意:该权限除了可以读取该DMO的功能外,还提供了许多其他功能,因此请对其进行评估并评估它是否适合您的环境。
我通过添加“ WITH EXECUTE AS OWNER”来解决我的问题,解决了该问题
创建过程[dbo]。[GetPerformanceStatus]拥有所有者如开始...结束