Как предоставить ограниченный доступ к sysprocesses в SQL Server 2005?

голоса
0

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

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

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. Запуск прока от задания SQL и поместить результаты где-то на веб-сервер, чтобы поднять, но это грязное и сложные.

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

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

Задан 09/12/2008 в 20:59
источник пользователем
На других языках...                            


1 ответов

голоса
0

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

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

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

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

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

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

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

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

Ответил 09/12/2008 в 21:21
источник пользователем

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