代码之家  ›  专栏  ›  技术社区  ›  joedotnot

SQL Server 2000-以独占方式查看具有对特定角色执行grant的存储过程列表?

  •  0
  • joedotnot  · 技术社区  · 16 年前

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

    在[dbo]上授予执行权限。[存储过程名称]
    致[角色1]、[角色2]、[角色3]、[角色4]等…

    如何查看已授予特定角色的存储过程的名称,并且只查看该特定角色。

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

    2 回复  |  直到 16 年前
        1
  •  1
  •   gbn    16 年前

    这是针对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)
    
        2
  •  1
  •   joedotnot    16 年前

    基于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
    
    推荐文章