为MS SQL提供审计方法,以跟踪特定用户对特定表所做的更改?

当用户使用Management Studio时,跟踪更改或logging特定用户对表执行的查询的最佳方法是什么?

我正在使用2008 R2 Express Edition,并且想要专门跟踪通过Management Studiologin的单个用户,并运行查询手动进行更改。 我想看看是什么查询运行,从而确定什么变化,以及如何。 我对恢复信息不感兴趣。 我认为更改跟踪,但读了它不理想的审计,以及我不确定如何读取数据,然后我考虑在数据库上的批量日志logging选项,但是,然后我不得不考虑处理日志文件,可能会变得巨大该数据库由Web应用程序不断使用。 我想知道是否有一个更简洁的方法来做我想要的?

更改跟踪不会跟踪更改的实际数据。

更改数据捕获可以跟踪已更改的数据,但是是企业版function。

您可以创build自己的审计表并为相应的DML和数据指定BEFORE触发器,以logging任何您想要的信息。

比较变更数据捕获和变更追踪
http://msdn.microsoft.com/en-us/library/cc280519%28v=sql.105%29.aspx

更改数据捕获
http://msdn.microsoft.com/en-us/library/bb522489%28v=sql.105%29.aspx

CREATE TRIGGER(Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms189799%28v=sql.105%29.aspx

从SQL Server 2008开始,有3个本地审计解决scheme – 更改跟踪,更改数据捕获和SQL Server审计,但只有一个跟踪进行更改的用户

更改跟踪不回答“谁”,“何时”和“如何”问题。 另外,如果在特定行上有多个更改,则只显示最后一个。 该function只是表明该行是否已被更改。 它显示已更改的行的ID,以及已更改的特定列。 此function没有提供的是有关更改的详细信息。 您可以将更改信息与数据库快照和实时数据库进行匹配,以了解有关更改的更多信息,但是这需要额外的编码,仍然不能提供审计所需的所有信息。 它不跟踪执行的查询。 至于读取数据,没有内置的报告,您必须使用更改跟踪function

将数据库设置为Bulk-Logging恢复模式不提供有关针对数据库执行的查询的信息。 它会提供有关谁做了什么的信息。 为了防止联机数据库事务日志文件变大,请定期创build事务日志备份

更改数据跟踪也不会跟踪谁进行了更改以及执行了哪些代码。 与SQL Server更改跟踪function一样,SQL Server更改数据捕获中的更改信息可通过表值函数获取

“更改跟踪”只显示更改的内容以及更改是插入,更新还是删除,“更改数据捕获”显示插入,删除或更新修改行的值。 对于更新,它显示更新行的旧值和新值

SQL Server审计是捕获进行更改的用户名的唯一function。 它还捕获SELECT和EXECUTE语句的执行。 审计信息可以存储在三种types的文件中:* .sqladuit文件,应用程序和安全日志,您可以使用fn_get_audit_file函数,SQL Server Management Studio中的日志文件查看器实用程序和Windows事件查看器来读取它们

此外,还有第三方审计工具也提供了内置的报告,如ApexSQL Comply

免责声明:我作为支持工程师在ApexSQL工作