Dar permiso para seleccionar de las tablas del sistema

14

Tengo una base de datos Microsoft SQL Server 2008 r2. Se define un usuario llamado marie, que puede acceder a las tablas en la base de datos principal; Esto funciona bien. Ahora, me gustaría que Marie pueda realizar esta consulta:

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

Las tablas involucradas son tablas maestras; ¿Cómo le doy permiso a Marie para leer de ellos? Ya intenté ejecutar lo siguiente como dbo:

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

Aún así, cuando Marie intenta realizar la consulta anterior, el error es:

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

¿Qué estoy haciendo mal?

carlo.borreo
fuente
También debería utilizar sys.dm_exec_requests, sys.dm_exec_sessionsetc. sysprocesseses una vista compatibilidad con versiones anteriores y se separó del producto en algún momento.
Aaron Bertrand

Respuestas:

25

Las vistas del sistema requieren un estado ligeramente elevado para ver, ya que son de ancho de instancia. Querrás hacer GRANT VIEW SERVER STATEesto:

GRANT VIEW SERVER STATE TO marie;
Mike Fal
fuente
Aquí está el enlace al manual: msdn.microsoft.com/en-us/library/ms188754%28v=sql.105%29.aspx
a_horse_with_no_name
@a_horse_with_no_name Gracias, estaba buscando eso. :) Enlace agregado a la respuesta.
Mike Fal
Esto no es compatible con Azure SQL db: ¿cómo consigo el equivalente aquí?
Tommed
1
Tratar GRANT VIEW DATABASE STATE.
Mike Fal
De hecho, algunas tablas debajo sysse pueden seleccionar con solo permisos seleccionados de una única base de datos, como sys.indexes.
John