如何在SQL Server 2005中授予对sysprocesses的有限访问权限?

时间:2008-12-09 19:59:12

标签: sql-server security tsql stored-procedures database-permissions

我正在实施一些基本的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作业运行proc并将结果放在某个地方供Web服务器使用,但这很复杂。

  3. 请勿尝试从网络服务器调用此内容!
  4. 我确信有更好的解决方案。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我很高兴我不知道答案第一手:) 但我玩EXECUTE AS和REVERT来切换用户

但这里有两个很好的链接,以

开头

使用REVERT子句在SQL Server中切换存储过程执行上下文

摘要:您将用户授予IMPERSONATE,如DBA,然后在

之后恢复

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

通过存储过程授予权限

总结:我懒得读完整件事

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