Я реализую некоторый рудиментарный мониторинг 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
Когда я выполнить это в контексте администратора, я получаю правильный ответ. Когда я выполняю это в контексте пользователя с ограниченными правами (т. Е. Веб-сервера), я получаю нуль независимо от истинного ответа.
Я могу придумать несколько решений, но я не доволен ни один из них:
Я могу предоставить привилегии ГОСУДАРСТВЕННЫХ VIEW SERVER для пользователя, но это намного больше разрешения, чем этот пользователь должен иметь:
GRANT VIEW SERVER STATE TO [Webserver]
Запустите proc из задания SQL и поместите результаты где-то на веб-сервер, чтобы поднять, но это грязно и сложно.
- Не пытайтесь называть это с веб-сервера!
Я уверен, что есть лучшее решение. Какие-либо предложения?