SQL - 找出用户没有执行权限的Stored Procs。

时间:2018-05-15 13:11:39

标签: sql sql-server permissions

下午好,

所以我的任务是尝试在413个存储过程中检查特定用户的用户权限。主要是它也无法访问的那些。

我目前有: -

select name, 
HAS_PERMS_BY_NAME(name, 'OBJECT', 'EXECUTE') as has_execute
from sys.procedures
where HAS_PERMS_BY_NAME(name, 'OBJECT', 'EXECUTE') = 0;

但由于某种原因,这不起作用,表格什么也没有显示。但我知道它对某些表没有执行权限,我可以看到它!

现在,我只是一个卑微的学徒,并且没有特别长时间地做SQL,所以任何指导都会非常感激。

由于

1 个答案:

答案 0 :(得分:2)

作为您正在采用的方法的替代方法,下面的脚本将返回指定用户具有执行权限的给定数据库的所有过程。可以轻松地针对其他类型(例如,视图或表)以及其他指定的权限级别进行调整。

USE [Database]
GO

DECLARE @UserToCheck varchar(200) = 'UserToCheck'

SELECT DISTINCT  
    O.Name as ProcedureName,
    IIF(P.Name IS NULL, 0, 1) AS HasExplicitExecutePermission,
    P.Name as SysUser , 
    P.permission_name As Permission
FROM sys.objects O
LEFT JOIN (
    SELECT A.major_id, B.Name, A.permission_name
    FROM sys.database_permissions A
    JOIN sys.database_principals B ON  A.grantee_principal_id = B.principal_id
    WHERE 
        B.Name = @UserToCheck AND 
        A.permission_name = 'EXECUTE' AND
        A.state IN ('G', 'W')
) P ON P.major_id = O.object_id
WHERE 
    o.type = 'P'  --Stored Proc
Order By HasExplicitExecutePermission Asc, ProcedureName