Autorizzare la selezione dalle tabelle di sistema


14

Ho un database Microsoft SQL Server 2008 r2. Viene definito un utente chiamato Marie, che può accedere alle tabelle nel database principale; questo funziona bene. Ora, vorrei che Marie potesse eseguire questa query:

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

Le tabelle coinvolte sono tabelle principali; come posso dare il permesso a Marie di leggere da loro? Ho già provato a eseguire quanto segue come dbo:

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

Tuttavia, quando Marie tenta di eseguire la query sopra, l'errore è:

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

Che cosa sto facendo di sbagliato?


Inoltre dovresti usare sys.dm_exec_requests, sys.dm_exec_sessionsecc. sysprocessesÈ una vista di compatibilità con le versioni precedenti e verrà rimossa dal prodotto a un certo punto.
— Aaron Bertrand

Risposte:


25

Le viste di sistema richiedono uno stato leggermente elevato per essere visualizzate, poiché sono ampie a livello di istanza. Ti consigliamo di GRANT VIEW SERVER STATEquesto:

GRANT VIEW SERVER STATE TO marie;


@a_horse_with_no_name Grazie, lo stavo cercando. :) Link aggiunto per rispondere.
— Mike Fal,

Questo non è supportato nel database SQL di Azure: come posso ottenere l'equivalente qui?
— tommed

1
Prova GRANT VIEW DATABASE STATE.
— Mike Fal,

Alcune tabelle sottostanti syspossono infatti essere selezionate solo con autorizzazioni di selezione di un singolo database, ad esempio sys.indexes.
— Giovanni
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.