【问题标题】:How do I determine using TSQL what roles are granted execute permissions on a specific stored procedure?如何使用 TSQL 确定授予哪些角色对特定存储过程的执行权限?
【发布时间】:2010-09-09 04:42:32
【问题描述】:

如何使用 TSQL 确定哪些角色被授予对特定存储过程的执行权限?我可以使用系统存储过程或系统视图吗?

【问题讨论】:

    标签: sql-server tsql stored-procedures


    【解决方案1】:

    在 7.0 或 2000 中,您可以修改和使用以下代码:

    SELECT convert(varchar(100),
            'GRANT ' +
            CASE         WHEN actadd & 32 = 32 THEN 'EXECUTE'
                    ELSE
                            CASE WHEN actadd & 1 = 1   THEN 'SELECT' + CASE WHEN actadd & (8|2|16) > 0  THEN ', ' ELSE '' END ELSE '' END +
                            CASE WHEN actadd & 8 = 8   THEN 'INSERT' + CASE WHEN actadd & (2|16) > 0  THEN ', ' ELSE '' END ELSE '' END +
                            CASE WHEN actadd & 2 = 2   THEN 'UPDATE' + CASE WHEN actadd & (16) > 0  THEN ', ' ELSE '' END ELSE '' END +
                            CASE WHEN actadd & 16 = 16 THEN 'DELETE' ELSE '' END
            END + ' ON [' + o.name + '] TO [' + u.name + ']') AS '--Permissions--'
    FROM syspermissions p
    INNER JOIN sysusers u ON u.uid = p.grantee
    INNER JOIN sysobjects o ON p.id = o.id
    WHERE o.type <> 'S'
    AND o.name NOT LIKE 'dt%'
    --AND o.name = '<specific procedure/table>'
    --AND u.name = '<specific user>'
    ORDER BY u.name, o.name 
    

    【讨论】:

      【解决方案2】:

      你可以试试这样的。注意,我相信 3 是 EXECUTE。

      SELECT
      grantee_principal.name AS [Grantee],
      CASE grantee_principal.type WHEN 'R' THEN 3 WHEN 'A' THEN 4 ELSE 2 END - CASE 'database' WHEN  'database' THEN 0 ELSE 2 END AS [GranteeType]
      FROM
      sys.all_objects AS sp
      INNER JOIN sys.database_permissions AS prmssn ON prmssn.major_id=sp.object_id AND prmssn.minor_id=0 AND prmssn.class=1
      INNER JOIN sys.database_principals AS grantee_principal ON grantee_principal.principal_id = prmssn.grantee_principal_id
      WHERE
      (sp.type = N'P' OR sp.type = N'RF' OR sp.type='PC')and(sp.name=N'myProcedure' and SCHEMA_N
      

      我通过简单地使用 SQL Profiler 查看过程的权限得到了该示例。我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2014-08-21
        • 1970-01-01
        • 1970-01-01
        • 2019-07-15
        • 2014-11-12
        • 2012-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多