mysql - 一个审计如何在数据库中更改?
问题描述
如何正确跟踪典型 MySQL 数据库中的状态?
即回答诸如表中特定行的历史之类的问题。
- 什么时候改的
- 改变了什么
- 谁随着时间的推移而改变它。
一位同事暗示我使用“密钥交换”来解决这个问题,但我有点困惑如何实现这种做法。
解决方案
有很多方法可以进行审计。虽然我不熟悉与数据库审计有关的密钥交换,但这些是我熟悉的方法:
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
table 有一张sale_order_history
桌子。
审计表
单个审计表,其中包含 Action(即插入、更新、删除)、存档(日期/时间)、存档器(导致此记录被存档)、表名和 clob/blob 等列,用于将原始数据存储为 JSON 或二进制数据。这将是一个表,其中来自多个表的存档数据将涌入。根据更改量,该表可能会变得非常大。
将数据流式传输到另一个数据库
我见过但我自己没有做过的另一个模型是将旧数据推送到消息队列中(例如 RabbitMQ)。队列的订阅者将数据写入与原始数据库分开保存的存档表。这种方法使原始数据库实例保持精简,但必须将创造性查询写入差异数据。应用层编写了审计,这并没有让 DBA 满意。
推荐阅读
- sql-server - 如何使用 SSMS 2019 执行大型 sql 文件(800MB)?我的sql文件是数据库备份
- unix - 如何在shell中字符串匹配的第3行之后添加一些文本
- xpath - 如何使用xpath排除某个类中某个位置的标签?
- jquery - 拖放形状后如何在剑道图中获取形状的文本?
- packaging - 为 Ubuntu16 构建 Netdata deb 包
- c# - WCF:服务器没有提供有意义的回复;
- css - 如何使用css更改Bootstrap tablist中活动元素的li标签的背景颜色
- jfreechart - 不遵守 JFreeChart 背景颜色设置
- react-native - 更新 componentWillMount 中的状态
- android - 当我尝试膨胀我的图形片段时出现“膨胀类 com.androidplot.xy.XYPlot 时出错”