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?


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;


@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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.