Zezwól na wybór z tabel systemowych


14

Mam bazę danych Microsoft SQL Server 2008 R2. Zdefiniowano użytkownika Marie, który ma dostęp do tabel w głównej bazie danych; to działa dobrze. Teraz chciałbym, żeby Marie mogła wykonać to zapytanie:

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

Zaangażowane tabele to tabele główne; Jak mogę wyrazić zgodę na to, żeby Marie odczytywała z nich? Próbowałem już wykonać następujące czynności jako dbo:

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

Mimo to, gdy Marie próbuje wykonać powyższe zapytanie, błąd jest następujący:

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

Co ja robię źle?


Powinieneś także używać sys.dm_exec_requests, sys.dm_exec_sessionsitp., sysprocessesJest to widok kompatybilności wstecznej i zostanie w pewnym momencie usunięty z produktu.
Aaron Bertrand

Odpowiedzi:


25

Widoki systemowe wymagają lekko podniesionego stanu, ponieważ są szerokie dla instancji. Będziesz chciał GRANT VIEW SERVER STATEza to:

GRANT VIEW SERVER STATE TO marie;


@ a_horse_with_no_name Dzięki, szukałem tego. :) Dodano link do odpowiedzi.
Mike Fal

To nie jest obsługiwane w bazie danych Azure SQL - w jaki sposób mogę uzyskać równowartość tutaj?
tommed

1
Spróbować GRANT VIEW DATABASE STATE.
Mike Fal

Niektóre tabele poniżej sysmożna rzeczywiście wybrać z tylko uprawnieniami do wyboru jednej bazy danych, takimi jak sys.indexes.
John
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.