¿Cómo otorgo acceso limitado a sysprocesses en SQL Server 2005?

votos
0

Estoy implementando una supervisión rudimentaria de SQL Server para vigilar el bloqueo excesivo.

Tengo un procedimiento almacenado que se ve así:

CREATE PROCEDURE [dbo].[bsp_GetBlockedProcessCount]
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @count INT

    SELECT @count = COUNT(*)
    FROM master.dbo.sysprocesses WITH (NOLOCK)
    WHERE blocked > 0

    RETURN @count
END

Cuando ejecuto esto en un contexto de administrador, obtengo la respuesta correcta. Cuando ejecuto esto en el contexto de un usuario con privilegios limitados (es decir, el servidor web), obtengo cero independientemente de la respuesta verdadera.

Puedo pensar en algunas soluciones, pero no estoy contento con ninguna de ellas:

  1. Puedo otorgar privilegios de VIEW SERVER STATE al usuario, pero eso es mucho más que lo que este usuario debería tener:

    GRANT VIEW SERVER STATE TO [Webserver]
    
  2. Ejecute el proceso desde un trabajo SQL y coloque los resultados en algún lugar para que el servidor web los recoja, pero eso es desordenado y complicado.

  3. ¡No intentes llamar esto desde el servidor web!

Estoy seguro de que hay una mejor solución. ¿Alguna sugerencia?

Publicado el 09/12/2008 a las 20:59
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Estoy contento de no saber las respuestas de primera mano :) pero he jugado con EXECUTE AS y REVERT para cambiar de usuario

Pero aquí hay 2 buenos enlaces para comenzar

Cambio del contexto de ejecución de procedimientos almacenados en SQL Server utilizando la cláusula REVERT

resumen: le concede al usuario IMPERSONATE como dice DBA, luego regresa después

http://www.mssqltips.com/tip.asp?tip=1579

Dar permisos a través de procedimientos almacenados

resumen: soy demasiado vago para leer todo

http://www.sommarskog.se/grantperm.html

Respondida el 09/12/2008 a las 21:21
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more