2009-04-23 66 views
1

SQL Server 2005中存在一个存储过程,用户声明执行权限已被删除,因为它们不能再执行存储过程。如何找出谁更改了存储过程中的权限/授权

我试图找到它的踪迹文件,但我无法找到此存储过程中的条目

我的问题是有没有找出别的办法谁以及何时允许/此存储过程的授权是改变了吗?

回答

1

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

但是,如果proc被删除并重新创建没有权限更改审核。你可以查询sys.objects得到create_datemodify_date找出是否发生这种情况。

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

编辑,基于注释:

你的问题说: “..users要求执行权限已移除...”。除了显式的存储过程更改外,环境可能已经更改。也就是说,如果什么:

  • 用户从该组下降
  • 登录在数据库中
  • 组策略的改变,因此NT组不能再访问SQL删除和重建,而无需用户映射服务器(他们需要“允许从网络登录”-ish)

已存储proc权限更改,或者有用户如何访问存储proc更改?

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'...