0

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

GRANT EXECUTE ON [dbo].[sproc_name]
TO [role1], [role2], [role3], [role4], etc...

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

例如,我不想将role1 与role2 或role3 结合使用,我只想查看只有role1 本身具有执行权限的那些。

4

2 回答 2

1

基于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
于 2009-12-14T02:26:56.003 回答
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)
于 2009-12-13T07:51:00.913 回答