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


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.

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


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

Ответы:


25

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

GRANT VIEW SERVER STATE TO marie;


@a_horse_with_no_name Спасибо, искал это. :) Ссылка добавлена ​​в ответ.
Майк Фал

Это не поддерживается в Azure SQL db - как мне получить эквивалент здесь?
tommed

1
Попробуй GRANT VIEW DATABASE STATE.
Майк Фал,

Некоторые таблицы в sysсамом деле могут быть выбраны из только с правами выбора одной базы данных, например sys.indexes.
Джон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.