首页 > 解决方案 > 一个审计如何在数据库中更改?

问题描述

如何正确跟踪典型 MySQL 数据库中的状态?

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

  1. 什么时候改的
  2. 改变了什么
  3. 谁随着时间的推移而改变它。

一位同事暗示我使用“密钥交换”来解决这个问题,但我有点困惑如何实现这种做法。

标签: mysqldatabase

解决方案


有很多方法可以进行审计。虽然我不熟悉与数据库审计有关的密钥交换,但这些是我熟悉的方法:

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_ordertable 有一张sale_order_history桌子。

审计表

单个审计表,其中包含 Action(即插入、更新、删除)、存档(日期/时间)、存档器(导致此记录被存档)、表名和 clob/blob 等列,用于将原始数据存储为 JSON 或二进制数据。这将是一个表,其中来自多个表的存档数据将涌入。根据更改量,该表可能会变得非常大。

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

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


推荐阅读