0

Я реализую некоторый рудиментарный мониторинг SQL Server, чтобы следить за чрезмерной блокировкой.Как предоставить ограниченный доступ к sysprocesses в SQL Server 2005?

У меня есть хранимая процедура, которая выглядит следующим образом:

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 

Когда я выполнить это в контексте администратора, я получаю правильный ответ. Когда я выполняю это в контексте пользователя с ограниченными правами (т. Е. Веб-сервера), я получаю нуль независимо от истинного ответа.

Я могу придумать несколько решений, но я не доволен ни один из них:

  1. Я могу предоставить привилегии ГОСУДАРСТВЕННЫХ VIEW SERVER для пользователя, но это намного больше разрешения, чем этот пользователь должен иметь:

    GRANT VIEW SERVER STATE TO [Webserver] 
    
  2. Запустите proc из задания SQL и поместите результаты где-то на веб-сервер, чтобы поднять, но это грязно и сложно.

  3. Не пытайтесь называть это с веб-сервера!

Я уверен, что есть лучшее решение. Какие-либо предложения?

ответ

0

Я рад, что я не знаю ответы из первых уст :) , но я играл с EXECUTE AS и REVERT для переключения между пользователями

Но здесь есть 2 хорошие ссылки, чтобы начать с

Switching Хранимые Процедура Контекст выполнения в SQL Server с помощью предложения REVERT

резюме: вы предоставляете пользователю IMPERSONATE, как говорят, DBA, а затем вернуться обратно после

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

Предоставление разрешений через хранимые процедуры

резюме: я слишком ленив, чтобы читать все это

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

Смежные вопросы