У меня есть база данных 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.
Что я делаю неправильно?
sql-server
carlo.borreo
источник
источник
sys.dm_exec_requests
,sys.dm_exec_sessions
и т. Д.sysprocesses
Это представление обратной совместимости и будет удалено из продукта в какой-то момент.Ответы:
Системные представления требуют слегка приподнятого состояния для просмотра, так как они являются широкими. Вы хотите
GRANT VIEW SERVER STATE
для этого:источник
GRANT VIEW DATABASE STATE
.sys
самом деле могут быть выбраны из только с правами выбора одной базы данных, напримерsys.indexes
.