Дайте разрешение на выбор из системных таблиц

14

У меня есть база данных Microsoft SQL Server 2008 r2. Определен пользователь с именем marie, который может обращаться к таблицам в основной базе данных; это работает хорошо. Теперь я хотел бы, чтобы Мари могла выполнить этот запрос:

SELECT resource_type,spid,login_time,status,hostname,program_name,nt_domain,nt_username,loginame
  FROM sys.dm_tran_locks dl
  JOIN sys.sysprocesses sp on dl.request_session_id = sp.spid

Используемые таблицы являются основными таблицами; как я могу дать разрешение Мари читать их? Я уже пытался выполнить следующее как dbo:

GRANT ALL on sys.dm_tran_locks TO marie
GRANT ALL on sys.sysprocesses TO marie

Тем не менее, когда Мари пытается выполнить запрос выше, ошибка:

Msg 297, Level 16, State 1, Line 1
The user does not have permission to perform this action.

Что я делаю неправильно?

carlo.borreo
источник
Также вы должны использовать sys.dm_exec_requests, sys.dm_exec_sessionsи т. Д. sysprocessesЭто представление обратной совместимости и будет удалено из продукта в какой-то момент.
Аарон Бертран

Ответы:

25

Системные представления требуют слегка приподнятого состояния для просмотра, так как они являются широкими. Вы хотите GRANT VIEW SERVER STATEдля этого:

GRANT VIEW SERVER STATE TO marie;
Майк Фал
источник
Вот ссылка на руководство: msdn.microsoft.com/en-us/library/ms188754%28v=sql.105%29.aspx
a_horse_with_no_name
@a_horse_with_no_name Спасибо, искал это. :) Ссылка добавлена ​​в ответ.
Майк Фал
Это не поддерживается в Azure SQL db - как мне получить эквивалент здесь?
tommed
1
Попробуй GRANT VIEW DATABASE STATE.
Майк Фал,
Некоторые таблицы в sysсамом деле могут быть выбраны из только с правами выбора одной базы данных, например sys.indexes.
Джон