2009-12-13 109 views
0

我的SQLSERVER 2000數據庫中大約有500個sprocs;每個sproc都有一個典型的Grant Execute語句,類似於以下內容。SQL Server 2000 - 專門爲特定角色查看包含GRANT EXECUTE的sprocs列表?

GRANT EXECUTE ON [DBO]。[sproc_name]
TO [role1上],[基於role2],[role3],[role4],等等

如何查看存儲過程的名稱,其只授予特定的角色,而僅授予特定的角色。

例如,我不希望角色1與角色2或角色3組合,我只想查看那些只有角色1本身具有執行權限的角色。

+0

屬於對superuser.com ... – 2009-12-13 06:38:13

+0

@米奇:ServerFault如果任何地方,但它也編程 – gbn 2009-12-13 07:54:03

+0

我對這個問題的興趣純粹是規劃的相關曾根方式有關。 GUI程序調用存儲的特效,用戶屬於角色。我的程序員必須對存儲的特效進行編程,並計算出授予的權限! – joedotnot 2009-12-14 02:38:04

回答

1

這是SQL Server 2000:基於由GBN答案

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) 
+0

基本上我在找什麼!非常感謝。 (順便說一下'MyProc'不應該在where子句中,因爲我們需要一個sprocs列表)。我修改了下面的答案,但基本上你得到了信用。 – joedotnot 2009-12-14 02:23:20

1

。這樣更合適,但他提供了答案。

-- 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