我是否应该为每个表维护一个历史表或单独的表以供审计?

时间:2015-02-13 04:03:59

标签: mysql database

我有一个有80张桌子的产品。我的DB是MYSQL。所以我将为DB实现审计功能。为此,我必须为表中的每个记录更改维护一个日志。我必须为每个记录和用户等记录旧值和新值....

所以我现在有两种方法可以考虑。

1)维护每个表的日志表。意味着80个日志表

2)维护一个表以记录历史

然后,一旦我完成方法,我就可以使用触发器将记录插入表中。所以我的表格不一样。有些有20列,有些有5列。 因此,将它们带到一个历史表中是我无法想象的事情。

那怎么办呢?

有没有更好的方法来做到这一点而不是在DB中保存记录?

商业解决方案中使用的方法有哪些?

2 个答案:

答案 0 :(得分:1)

最佳商业解决方案是: 使用触发器。

对于那些想要维护 LOG

的人,必须在所有桌面上使用触发器

并且您可以使用不同类型的触发器,例如插入,更新,删除时间戳和用户ID,以便可以跟踪谁在何时以及执行了哪个操作?

如果你觉得有用,

接受这个答案。

答案 1 :(得分:0)

我们创建一个"审计表"每张桌子。但我们只审核了一些表,而不是所有表。我们在表上使用触发器将行插入审计表。

审计表包含与审计表相同的所有列,以及一些其他列... auto_increment idaction(INSERT,DELETE,UPDATE OLD,UPDATE NEW),日期和时间,等。插入审计表的每一行基本上都是整行的副本。

我们使用该模式,因为它实现相当简单,并在审计表上分发活动。

对于" logging",我们使用单个表。但是我们不会将每个表的每一列都存储在日志表中;这更像是录制消息。 "审计"表格用于详细跟踪每行所做的每一项更改。

注意:对于带有CASCADE的外键,受级联影响的行会触发触发器。我们在触发器中考虑到这一点,以确保我们在引用受影响的表中记录行的图像。