如何在不直接在数据库上使用fn_dblog或fn_dump_dblog的情况下创建sql事务审核软件

时间:2018-07-18 19:33:14

标签: sql sql-server database

我正在开发一个SQL事务审核软件

最初,我在数据库上使用fn_dblog读取sql事务,并按固定的时间间隔将其写入文件中,但是随后我发现在生产数据库上使用fn_dblog会有风险

所以请向我建议其他任何从生产数据库中获取数据的方法

注意-我已经尝试通过从备份文件(.bak)中读取事务来获取sql事务历史记录(使用系统上的fn_dblog而非数据库),但是        这对我没有帮助(因为它不包含所有交易记录)

1 个答案:

答案 0 :(得分:1)

fn_dblog()是一个未记录的SQL Server函数,因此,明智地使用它是明智的。

您关于如何审核交易的问题确实取决于您要审核的什么。真的是每笔交易都发生了吗?或者,它是特定类型的事务(如DDL和DML操作)吗?根据答案,特定于您的业务案例等,有几种选择。

  • Change Data Capture是2008年推出的,捕获插入,更新和删除活动。在很多情况下,这就是人们想要编辑的。哪些用户(通常是从应用程序中)在数据库中编辑了数据。
  • DDLDML可以创建触发器以在发生特定事件时触发。对于DML,此操作包括INSERT,UPDATE,DELETE等操作。您可以创建触发器以记录在之后作为审核功能发生的操作。这些类型的触发器可能会导致性能问题,因此请务必仔细阅读。我将从Aaron Bertrand's blog on them.开始,DDL触发器取决于某些DDL events,例如创建和删除数据库,创建加密,更改索引,创建用户等。
  • SQL Server Audit是一种内置机制,可以创建服务器审核,其中可以包含服务器级事件的服务器审核规范以及数据库级事件的数据库审核规范。审核后的事件可以写入事件日志或审核文件中。请注意,与Change Data Capture的一个很大区别是它没有像CDC那样以干净的关系格式存储。
  • 更改您的应用程序。这将是应用程序和数据库设计的更改,但是通常会实现此方法。基本上,每次对数据行进行更改时,都无需编辑它,而是插入带有时间戳的新行以及进行更改的用户。该记录成为“当前真相”记录,并且该记录的所有其他记录区域历史记录。 SQL Server具有使用ROWVERSIONTEMPORAL TABLES
  • 进行集成的方法
  • 使用Redgate,Solarwinds等付费选项