【问题标题】:How do I grant limited access to sysprocesses in SQL Server 2005?如何在 SQL Server 2005 中授予对 sysprocesses 的有限访问权限?
【发布时间】:2010-09-26 02:58:35
【问题描述】:

我正在实施一些基本的 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 并将结果放在某处以供网络服务器获取,但这很混乱且复杂。

  3. 不要尝试从网络服务器调用它!

我确信有更好的解决方案。有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

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

    但这里有 2 个很好的链接可以开始

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

    总结:您将用户授予 IMPERSONATE 作为 DBA,然后在之后恢复

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

    通过存储过程授予权限

    总结:我懒得看全文

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 2013-09-25
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多