Добавьте правильные разрешения пользователю на использование табличной функции sys.dm_os_volume_stats - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь получить общий размер диска из текущей базы данных, которую я вызываю на 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, но некоторые серверы, на которых будет работать это приложение, из-за некоторых проблем с ИТ не позволяют нам используйте его.

У меня есть частичные результаты при использовании EXEC master.dbo.xp_fixeddrives, но это только дает мне доступное свободное место, мне все еще нужно используемое пространство.

Есть ли какой-нибудь способ написать правильный разрешения, позволяющие моему пользователю использовать sys.dm_os_volume_stats?

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Я решил проблему, добавив «С ВЫПОЛНИТЬ КАК ВЛАДЕЛЕЦ», чтобы решить мою проблему

СОЗДАТЬ ПРОЦЕДУРУ [dbo]. [GetPerformanceStatus] С ВЫПОЛНИТЬ КАК ВЛАДЕЛЕЦ, КАК НАЧАТЬ ... КОНЕЦ

0 голосов
/ 17 января 2020

С документация для этого DMO, для входа требуется разрешение VIEW SERVER STATE. NB - это разрешение дает много других вещей помимо способности читать из этого DMO, поэтому оцените это и оцените, подходит ли это в вашей среде.

...