我应该如何审计 MySQL 表中的更改(使用 MySQL 4)?

Posted

技术标签:

【中文标题】我应该如何审计 MySQL 表中的更改(使用 MySQL 4)?【英文标题】:How should I audit changes in a MySQL table (using MySQL 4)? 【发布时间】:2010-09-18 03:18:10 【问题描述】:

我被要求审核 mysql 表中的任何/所有更改。有谁知道那里有任何工具可以帮助我做到这一点,还是我需要编写自己的解决方案?

如果我编写自己的审计,我最初的想法是制作一个单独的表并在 php 代码中构建一串更改。类似于“fieldname1 -> oldvalue | fieldname2 -> oldvalue, ...”。如果您发现此方法存在重大问题,请告诉我。

【问题讨论】:

【参考方案1】:

捕获对数据库表的所有更改的唯一可靠方法是在服务器上使用触发器。修改您自己的代码以审核更改的风险是无法捕获来自其他应用程序/用户等的更改。

话虽如此,我不确定 MySQL 4 是否支持触发器。

【讨论】:

我想我将不得不实施我的反击解决方案。也许我可以获得更新到 MySQL 5 的许可。 在 MySQL 5.0 中添加了触发器。在这一点上,确实没有理由不从 4 升级到 5。5.1 处于候选发布阶段,6.0 处于 Alpha 开发阶段。 触发器可以跟踪哪个用户在进行更改吗?【参考方案2】:

使用trigger 检测更改并将之前/之后的值写入日志表。

【讨论】:

遗憾的是,我被困在使用 MySQL 4 中。我将编辑我的问题以进行澄清。不过建议很好。【参考方案3】:

如果由于缺乏触发器支持而最终手动滚动解决方案,我强烈建议您不要只将更改转储到字符串 blob 中。有一天,您将被要求查询该数据,最终您将不得不进行一堆字符串解析才能将数据取回。 (我根据这里的经验说话。)

最简单的方法是创建一个影子审计表,其中包含与原始表相同的所有列,以及一个更改日期列和一个顺序 ID。然后,您可以将整个历史记录以您需要的任何格式重建,并且您可以随意查询它。

【讨论】:

【参考方案4】:

SoftTree DB Audit 支持 MySQL,可能会满足您的需求:

http://www.softtreetech.com/idbaudit.htm

【讨论】:

以上是关于我应该如何审计 MySQL 表中的更改(使用 MySQL 4)?的主要内容,如果未能解决你的问题,请参考以下文章

将 MERGE 语句的更新列审计为不同表中的行

在 Mysql 中添加新列时如何轻松维护审计触发器

从审计表中查找更改

MySQL - 如何更改表中的行顺序

外键的审计触发器

MySQL的触发器