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.