Надати дозвіл на вибір із системних таблиць


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 - як мені тут досягти еквівалента?
примерковано

1
Спробуйте GRANT VIEW DATABASE STATE.
Майк Фаль

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