【问题标题】:SQL Server 2000 - View list of sprocs with GRANT EXECUTE for a particular role exclusively?SQL Server 2000 - 查看具有 GRANT EXECUTE 的存储过程列表,专门用于特定角色?
【发布时间】:2010-12-26 03:05:53
【问题描述】:

我的 SQLSERVER 2000 数据库中有大约 500 个存储过程;每个 sproc 都有一个典型的 Grant Execute 语句,类似于以下内容。

在 [dbo].[sproc_name] 上授予执行权限
TO [role1]、[role2]、[role3]、[role4] 等...

如何查看授予特定角色且仅针对该特定角色的存储过程的名称。

例如,我不希望role1与role2或role3组合,我只想查看只有role1本身具有执行权限的那些。

【问题讨论】:

  • @Mitch: ServerFault 如果在任何地方,但它也以某种方式与编程相关
  • 我对这个问题的兴趣纯粹是与编程相关的。 GUI程序调用存储过程,用户属于角色。我程序员必须对存储的过程进行编程,并计算出要授予的权限!

标签: sql-server execute role grant stored-procedures


【解决方案1】:

这是针对 SQL Server 2000 的:

SELECT
    OBJECT_NAME(p1.id)
FROM
    syspermissions p1
WHERE
    USER_NAME(p1.grantee) = 'MyRole'
    AND
    OBJECT_NAME(p1.id) = 'MyProc'
    AND
    NOT EXISTS (SELECT *
        FROM
            syspermissions p2
        WHERE
            p1.grantee <> p2.grantee
            AND
            p1.id = p2.id)

【讨论】:

  • 基本上是我想要的!非常感谢。 (顺便说一下,'MyProc' 不应该在 where 子句中,因为我们想要一个存储过程列表)。我在下面修改了答案,但基本上你得到了功劳。
【解决方案2】:

根据 gbn 的回答。这更合适,但基本上他提供了答案。

-- show all stored procs where permission is granted to 'MyRole' and only 'MyRole'
SELECT OBJECT_NAME(p1.id) AS sproc_name
  FROM    syspermissions p1
  inner join sysobjects o ON p1.id = o.id
    AND o.xtype = 'p'
    AND o.[name] not like 'dt_%'
WHERE USER_NAME(p1.grantee) = 'MyRole'
AND NOT EXISTS (
        SELECT *        
            FROM  syspermissions p2        
        WHERE p1.grantee <> p2.grantee            
        AND p1.id = p2.id
    )
ORDER BY 1

【讨论】:

    猜你喜欢
    • 2012-03-08
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多