一次审核如何在数据库中进行更改?

时间:2018-12-06 01:17:13

标签: mysql database

在典型的MySQL数据库中,如何正确地 track 状态?

即回答诸如表中特定行的历史之类的问题。

  1. 更改时
  2. 发生了什么变化
  3. 谁随时间改变了它。

我的一位同事暗示我使用“密钥交换”来解决此问题,但是我对如何实现这种做法感到有些困惑。

1 个答案:

答案 0 :(得分:1)

有许多方法可以执行审计。尽管我不熟悉与数据库审计有关的密钥交换,但是这些是我熟悉的方法:

MySQL企业审核

https://www.mysql.com/products/enterprise/audit.html有官方文档。有一个博客描述了企业审计,并提供了一些可能对您有所帮助的示例。 https://scriptingmysql.wordpress.com/2014/03/14/installing-and-testing-the-mysql-enterprise-audit-plugin/

历史记录表

我审核表的方法之一是通过创建结构与基表相似的历史表,并放置触发器以将旧数据写入该表,然后再将新数据写入基表。额外的日期/时间列可用于存储记录归档时的日期,从而进一步帮助查询。

例如,sale_order表有一个sale_order_history表。

审核表

单个审计表,其中包含诸如“操作”(即“插入”,“更新”,“删除”),“已归档”(日期/时间),“归档器”(导致将此记录归档的原因),“表名”和“ clob / blob”列,以将原始数据存储为JSON或二进制数据。这将是一个表,多个表中的归档数据将涌入其中。根据更改的数量,该表可能会变得很大。

将数据流传输到另一个数据库

我见过的另一个模型,但我自己还没有做,就是将旧数据推送到消息队列中(例如RabbitMQ)。队列的订阅者将数据写入与原始数据库分开保存的存档表中。该方法使原始数据库实例保持精简,但是必须将创造性的查询写入差异数据。应用程序层编写了审计,这并没有使DBA满意。