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

标签 sql sql-server database

我在做一个sql事务审计软件

最初我在数据库上使用 fn_dblog 来读取 sql 事务并将它们定期写入文件,但后来我发现在生产数据库上使用 fn_dblog 是有风险的

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

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

最佳答案

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 具有使用 ROWVERSION 进行集成的方法和 TEMPORAL TABLES
  • 使用付费选项,如 Redgate、Solarwinds 等...

关于sql - 如何在不直接在数据库上使用 fn_dblog 或 fn_dump_dblog 的情况下创建 sql 事务审计软件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51409749/

相关文章:

PHP session 性能 : array vs key into a database table?

database - 使用 Amazon SimpleDB 有什么意义?

mysql - 获取有多少用户响应了调查

java - JOOQ在executeInsert()之后,需要知道自动生成的ID

c# - 无法找到请求的 .Net Framework 数据提供程序。 (SQL客户端)

sql-server - SQL Server 中的条件连接

mysql - sql在按其他列分组后选择并显示一列的所有值

SQL 选择到字段

SQL 条件字符串在Where 子句中进行比较

MySQL CLAUSE可以变成一个值吗?