2013-09-30 45 views
1

在Sql Server中是否有默认报告将输出给定用户或登录的权限/安全历史记录?如果没有,是否有人知道如何制作这样的查询?最近我们遇到了一个事件,那就是用户神秘地丢失了对表的插入权限,我们想知道究竟是什么原因造成的。SQL Server - 用户权限/安全更改报告

+0

我不认为历史是保留在任何表格。您必须使用日志审查员,如Apex或Red Gate提供。你想检查日志的系统表将是'sys.database_permissions' –

回答

1

解决此问题的唯一方法是读取存储每个事务的详细信息的事务日志。如果你的数据库处于完全恢复模式,那么信息就在那里。

不幸的是,你不能使用标准工具来做这件事,因为MS不支持这一点。

你可以让自己成为一个商业日志阅读器或尝试使用未记录的命令(如fn_dblog)来破解它。

检查这些了更多细节

Read the log file (*.LDF) in sql server 2008

SQL Server Transaction Log Explorer/Analyzer

How to view transaction logs in sql server 2008

+0

谢谢,我知道它会在那里。 – matt

0

这是查询数据库权限的查询。我们一直在使用此查询的变体将权限从一个表复制到另一个表。

select * 
    FROM sys.database_permissions AS dp 
    INNER JOIN sys.objects AS o ON dp.major_id=o.object_id 
    INNER JOIN sys.schemas AS s ON o.schema_id = s.schema_id 
    INNER JOIN sys.database_principals AS dpr ON dp.grantee_principal_id=dpr.principal_id 
+0

谢谢,但我实际上更期待审计查询 - 我想知道什么进程/人员完全改变了这个用户的权限。 – matt

+0

如果这些信息存储在SQL中,我还没有看到它/不知道在哪里可以找到它。接下来我想到的是写触发器。但我不知道如何与模式信息一起工作。 – orgtigger