如何在不使用fn_dblog或fn_dump_dblog直接在数据库上创建sql事务审计软件

rig*_*ful 6 sql database sql-server

我正在研究一个sql事务审计软件

初始我在数据库上使用fn_dblog来读取sql事务并在常规时间间隔内将它们写入文件但是后来我发现在生产数据库上使用fn_dblog是有风险的

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

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

scs*_*mon 1

fn_dblog()是一个未记录的 SQL Server 函数,因此您最好小心使用它。

您关于如何审计交易的问题实际上取决于您想要审计的内容。真的是每笔交易都发生吗?或者,它是 DDL 和 DML 操作等特定类型的事务吗?根据这个问题的答案、具体的业务案例等,有几个选项。

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