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