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?
sql-server
carlo.borreo
la source
la source
sys.dm_exec_requests
,sys.dm_exec_sessions
etc.sysprocesses
est une vue de la compatibilité ascendante et sera retirée du produit à un moment donné.Réponses:
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 STATE
pour cela:la source
GRANT VIEW DATABASE STATE
.sys
peuvent en effet être sélectionnées avec uniquement les autorisations de sélection d'une seule base de données, telles quesys.indexes
.