如何找出存储过程中的权限/授权何时以及何时更改

时间:2009-04-23 15:42:58

标签: sql sql-server-2005

SQL Server 2005中存在一个存储过程,用户声明执行权限已被删除,因为它们无法再执行存储过程。

我试图在跟踪文件中找到它,但我找不到此存储过程的条目

我的问题是,还有其他方法可以找出更改此存储过程的权限/授权的人和时间吗?

4 个答案:

答案 0 :(得分:1)

还原备份?

答案 1 :(得分:1)

不幸的是没有。您必须审核(例如通过DDL触发器)实际的REVOKE或DENY语句。

但是,如果删除了proc并重新创建了审核没有权限更改。您可以查询sys.objects以获取create_datemodify_date,以了解是否发生这种情况。

还有其他选项,例如登录删除,因此即使权限未更改,用户也不再有资格执行代码。或者,如果使用Windows身份验证,NT组也会更改。显式的REVOKE / DENY或DROP / CREATE可能不是明显的答案。

根据评论编辑:

您的问题说“..用户声明执行权限已被删除......”。除了显式存储的proc permisson更改外,环境可能已更改。也就是说,如果:

  • 用户已从群组中删除
  • 登录被删除并在数据库中没有用户映射的情况下重新创建
  • 组策略已更改,因此NT组无法再访问SQL Server(他们需要“允许从网络登录”-ish)

是否已更改存储过程权限,或者用户如何更改存储过程?

答案 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;