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?


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;


@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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.