当用户使用 Management Studio 时,跟踪更改或记录特定用户对表所做的查询的最佳方法是什么?
我正在使用 2008 R2 Express Edition,并且想要专门跟踪通过 Management Studio 登录并运行查询以手动进行更改的单个用户。我想查看运行了什么查询,从而确定更改了什么以及如何更改。我对恢复信息不感兴趣。我考虑过更改跟踪,但了解到它也不是审计的理想选择,我不确定如何读取数据,然后我考虑了数据库上的批量日志记录选项,但是我必须考虑处理日志文件,因为数据库不断被 Web 应用程序使用,所以日志文件可能会变得非常大。我想知道是否有更简洁的方法来做我想做的事情?
答案1
更改跟踪不会跟踪实际更改的数据。
变更数据捕获确实会跟踪已更改的数据,但是这是企业版的功能。
您可以创建自己的审计表并为相应的DML和数据指定BEFORE触发器,以记录您想要的任何信息。
比较变更数据捕获和变更跟踪
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
创建触发器 (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms189799%28v=sql.105%29.aspx
答案2
从 SQL Server 2008 开始,有 3 种本机审计解决方案 - 更改跟踪、更改数据捕获和 SQL Server 审计,但只有一种跟踪进行更改的用户
更改跟踪无法回答“谁”、“何时”和“如何”的问题。此外,如果某一行有多个更改,则只显示最后一个更改。该功能仅指示该行是否已更改。它显示更改的行的 ID 以及更改的特定列。此功能不提供有关更改的详细信息。您可以将更改信息与数据库快照和实时数据库进行匹配,以了解有关更改的更多信息,但这需要额外的编码,并且仍然无法提供审计可能需要的所有信息。它也不会跟踪执行的查询。至于读取数据,没有内置报告,您必须使用变更跟踪功能
将数据库设置为批量记录恢复模型不提供针对数据库执行的查询的信息。但它将提供有关谁做了什么的信息。为了防止在线数据库事务日志文件变得巨大,请定期创建事务日志备份
更改数据跟踪也无法跟踪谁进行了更改以及执行了哪些代码。与 SQL Server 更改跟踪功能一样,SQL Server 更改数据捕获中的更改信息可通过表值函数
更改跟踪仅显示更改的内容以及更改是插入、更新还是删除,而更改数据捕获则显示已修改行的插入、删除或更新的值。对于更新,它显示已更新行的旧值和新值
SQL Server审计是唯一可以捕获进行更改的用户名的功能。它还可以捕获 SELECT 和 EXECUTE 语句的执行情况。审计信息可以存储在 3 种类型的文件中 - *.sqladuit 文件、应用程序和安全日志,您可以使用 fn_get_audit_file 函数、SQL Server Management Studio 中的日志文件查看器实用程序和 Windows 事件查看器来读取它们
此外,还有一些第三方审计工具也提供内置报告,例如ApexSQL 合规
免责声明:我是 ApexSQL 的支持工程师