Autoriser la sélection à partir des tables système

14

J'ai une base de données Microsoft SQL Server 2008 r2. Un utilisateur appelé marie est défini, qui peut accéder aux tables de la base de données principale; cela fonctionne bien. Maintenant, j'aimerais que Marie puisse effectuer cette requête:

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

Les tables concernées sont des tables principales; comment est-ce que je donne la permission à marie de lire d'eux? J'ai déjà essayé d'exécuter ce qui suit en tant que dbo:

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

Pourtant, lorsque Marie essaie d'exécuter la requête ci-dessus, l'erreur est:

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

Qu'est-ce que je fais mal?

carlo.borreo
la source
Aussi , vous devez utiliser sys.dm_exec_requests, sys.dm_exec_sessionsetc. sysprocessesest une vue de la compatibilité ascendante et sera retirée du produit à un moment donné.
Aaron Bertrand

Réponses:

25

Les vues système nécessitent un état légèrement élevé, car elles sont à l'échelle de l'instance. Vous voudrez GRANT VIEW SERVER STATEpour cela:

GRANT VIEW SERVER STATE TO marie;
Mike Fal
la source
Voici le lien vers le manuel: msdn.microsoft.com/en-us/library/ms188754%28v=sql.105%29.aspx
a_horse_with_no_name
@a_horse_with_no_name Merci, je cherchais ça. :) Lien ajouté pour répondre.
Mike Fal
Cela n'est pas pris en charge dans Azure SQL db - comment puis-je obtenir l'équivalent ici?
Tom
1
Essayez GRANT VIEW DATABASE STATE.
Mike Fal
Certaines tables sous syspeuvent en effet être sélectionnées avec uniquement les autorisations de sélection d'une seule base de données, telles que sys.indexes.
John