Как предоставить ограниченный доступ к системным процессам в SQL Server 2005? - PullRequest
0 голосов
/ 09 декабря 2008

Я реализую некоторый элементарный мониторинг 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 STATE, но это гораздо больше прав, чем у этого пользователя:

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

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

Я уверен, что есть лучшее решение. Есть предложения?

1 Ответ

0 голосов
/ 09 декабря 2008

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

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...