Finding stored procedures having execute permission

后端 未结 5 1421
长发绾君心
长发绾君心 2021-01-02 02:31

I am using SQL Server 2008 R2. I need to list out all the stored procedures that a database user (MYUSER) has execute permission.

Also, I need to list out which ar

5条回答
  •  一个人的身影
    2021-01-02 03:01

    The answer from knb doesn't work for me because of missing rights. (a solution for a different user than the current one)

    Cannot execute as the database principal because the principal "my user" does not exist, this type of principal cannot be impersonated, or you do not have permission.

    This answer shows how to get the list of stored procedures on which a specific database user ('my user') has EXECUTE permission explicitly granted:

    SELECT [name]
    FROM sys.objects obj
    INNER JOIN sys.database_permissions dp ON dp.major_id = obj.object_id
    WHERE obj.[type] = 'P' -- stored procedure
    AND dp.permission_name = 'EXECUTE'
    AND dp.state IN ('G', 'W') -- GRANT or GRANT WITH GRANT
    AND dp.grantee_principal_id = 
        (SELECT principal_id
        FROM sys.database_principals 
        WHERE [name] = 'my user')
    

    I modified it as follows to get the list I need:

    SELECT [name]
    FROM sys.procedures
    WHERE [name] NOT IN
        (SELECT [name]
        FROM sys.objects obj
        INNER JOIN sys.database_permissions dp ON dp.major_id = obj.object_id
        WHERE obj.[type] = 'P' -- stored procedure
        AND dp.permission_name = 'EXECUTE'
        AND dp.state IN ('G', 'W') -- GRANT or GRANT WITH GRANT
        AND dp.grantee_principal_id = 
            (SELECT principal_id
            FROM sys.database_principals 
            WHERE [name] = 'my user'))
    

    Tested on Microsoft SQL Server 2008 R2

提交回复
热议问题