0

SQLSERVER2000データベースには約500のsprocがあります。各sprocには、次のような一般的なGrantExecuteステートメントがあります。

GRANT EXECUTEON[dbo]。[sproc_name]
TO[role1]、[role2]、[role3]、[role4]など...

特定のロールとその特定のロールのみに付与されているsprocの名前を表示する方法。

たとえば、role1をrole2またはrole3と組み合わせて使用​​したくない場合は、role1自体のみが実行権限を持っているものを表示したいだけです。

4

2 に答える 2

1

これはSQLServer2000用です。

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 に答える
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 に答える