SQL Server 2005中存在一个存储过程,用户声明执行权限已被删除,因为它们无法再执行存储过程。
我试图在跟踪文件中找到它,但我找不到此存储过程的条目
我的问题是,还有其他方法可以找出更改此存储过程的权限/授权的人和时间吗?
答案 0 :(得分:1)
还原备份?
答案 1 :(得分:1)
不幸的是没有。您必须审核(例如通过DDL触发器)实际的REVOKE或DENY语句。
但是,如果删除了proc并重新创建了审核没有权限更改。您可以查询sys.objects
以获取create_date
和modify_date
,以了解是否发生这种情况。
还有其他选项,例如登录删除,因此即使权限未更改,用户也不再有资格执行代码。或者,如果使用Windows身份验证,NT组也会更改。显式的REVOKE / DENY或DROP / CREATE可能不是明显的答案。
根据评论编辑:
您的问题说“..用户声明执行权限已被删除......”。除了显式存储的proc permisson更改外,环境可能已更改。也就是说,如果:
是否已更改存储过程权限,或者用户如何更改存储过程?
答案 2 :(得分:1)
select P.permission_name,
P.state_desc,
U.name GranteeName,
U2.name GrantorName,
T.*
from sys.database_permissions P
JOIN sys.objects T ON P.major_id = T.object_id
JOIN sysusers U ON U.uid = P.grantee_principal_id
JOIN sysusers U2 ON U2.uid = P.grantor_principal_id
ORDER by T.modify_date desc
Unfortunately, the 'who' is typically 'dbo'...
答案 3 :(得分:0)
Select memb.Name As UserName,
prin.Name As RoleName,
perm.permission_name As PermissionType,
schm.name As SchemaName,
objt.Name As ObjectName,
perm.state_desc As PermissionState,
memb.Create_Date ,
memb.Modify_Date
from sys.database_principals memb
Left Join sys.database_role_members rolm
on rolm.Member_principal_id = memb.Principal_id
Left Join sys.database_principals prin
on rolm.Role_principal_id = prin.Principal_id
Left Join sys.database_permissions perm
on memb.Principal_id = perm.grantee_principal_id
Left Join sys.all_objects objt
on perm.Major_Id = objt.Object_Id
Left Join sys.Schemas schm
on objt.schema_id = schm.schema_id
Order By memb.Name,
prin.Name, perm.permission_name,
objt.Name, perm.state_desc;