【问题标题】:Simple sql data audit log tables简单的sql数据审计日志表
【发布时间】:2026-02-04 17:15:01
【问题描述】:

我需要在表中记录所有更改。我在 SO 中浏览了许多关于数据审计日志的文章。对我来说,一切似乎都很复杂。

我计划保留一份包含所有更新和删除数据之前的表的副本。这是个好主意吗?

【问题讨论】:

  • 除了您或您的用户/客户之外,没有人能说出什么是“好主意”。这里的业务需求是什么?如果您在法律控制的环境中工作,您需要对每次更改进行完整的审计跟踪,那么也许您确实需要为每个表设置它,即使它需要更多的工作。但也许要求只是跟踪一两个特定的表,您可以做一些更简单的事情。如果您可以使您的问题更精确和技术性更强,您可能会得到更好的答复。

标签: sql-server audit-tables


【解决方案1】:

如果我们只讨论一张桌子,那么是的。如果有几张桌子,那么也许。如果有很多表需要审核,则不需要。

原因是您必须维护的重复表越多,它就会变得越复杂。此外,从许多表格中生成报告可能会成为一项艰巨的任务。

这里有几个其他的想法:

用于存储的双表设计:想法是在一张表中保留有关事务的详细信息(用户、主机、事务时间、表名、数据库名等)和第二张表中的数据更改(旧值、键等)

第三方工具:有多种工具可以提供不同级别的审核。 ApexSQL Audit 是基于触发器的审计工具,ApexSQL Log 更高级,可以审计权限和架构更改,Idera 的Compliance manager 是*的,甚至可以捕获 select 语句。

更改数据捕获:这是内置在 SQL Server 2008+ 中的,但仅在企业版中。

【讨论】:

  • 是的。它不是一张桌子。我计划使用触发器将更改和删除的数据(整行)存储到每个表的审计表中。所有审计表都在同一个数据库中。如果我使用 CDC,显示一行数据的两个版本之间的更改报告有多容易?在我的方法中,很容易显示一行数据的两个版本之间的差异,因为整行都是可用的......
  • 这很容易,因为有显示此信息的内置系统函数,您还可以使用 CDC 模式查询审计表。有关详细信息,请参阅this
  • SQL Table Audit by Renhold Software 是另一个价格相对合理的第三方替代方案。它通过生成触发器来工作。
【解决方案2】:

为了了解数据库中存在的每个表中所做的更改,我相信您应该选择 LepideAuditor for SQL Server。通过此工具,您可以跟踪有关数据库和 SQL Server 对象的创建、更改、删​​除活动的更改。 它详细说明了对这些对象执行的所有操作的人员、内容、时间和地点。

【讨论】:

    【解决方案3】:

    如果您打算保留表的副本,我建议您查看数据库快照。它将帮助您创建数据库的只读副本,并且您可以轻松地恢复表并将其与快照进行比较。

    关于 SQL 审计,一开始创建有点困难,但是一旦你有一个工作,第二个审计将需要几分钟才能实现。

    SQL 审计对于少数表来说是一个不错的选择。如果您有多个,请使用变更数据捕获或第三方工具,例如 Lepide 或 apexsql 触发器。

    【讨论】: