数据库审计要解决什么
数据库审计关注两件事:谁在什么时候访问了敏感表,以及是否执行了高危语句。MySQL 与 MariaDB 本身没有开箱即用的完整审计能力:可直接启用 general_log,但它是为排错设计的,写入量大、性能影响明显;生产环境通常改用 MariaDB Audit Plugin、数据库厂商的企业版审计插件,或旁路部署数据库审计设备。
基本信息
| 适用平台 | MySQL 8.0、MariaDB 10.x(Linux 服务器) |
|---|---|
| 常用方案 | MariaDB Audit Plugin、厂商企业版审计插件、旁路审计设备 |
| 不推荐 | general_log 长期开启,I/O 与磁盘压力大 |
| 日志内容 | 含完整 SQL 文本,可能包含个人信息 |
| 合规依据 | 网络安全法第二十一条的日志留存要求、等保审计要求 |
典型使用场景
- 等保整改:补齐数据库层的审计与留存能力
- 内部风险排查:追踪批量导出与全表扫描行为
- 账号变更审计:记录授权与账号重建操作
- 数据泄露溯源:用 SQL 文本还原访问路径
- 外包运维管控:第三方 DBA 操作留痕
MariaDB Audit Plugin 示例
MariaDB Audit Plugin 示例
INSTALL SONAME 'server_audit'; -- 加载审计插件
-- 旧版语法等价:INSTALL PLUGIN server_audit SONAME 'server_audit.so';
SET GLOBAL server_audit_logging = ON; -- 开启审计
SET GLOBAL server_audit_events = 'CONNECT,QUERY_DDL,QUERY_DML';
SET GLOBAL server_audit_file_rotations = 30; -- 保留 30 份轮转文件
SET GLOBAL server_audit_file_rotate_size = 1073741824; -- 单个文件 1 GiB
-- 关注:批量导出、全表扫描、权限与账号变更
-- 日志含 SQL 文本,注意脱敏与访问控制审计对象与关注点
| 审计对象 | 关注行为 |
|---|---|
| 连接事件 | 非常规来源 IP、非工作时间登录、失败重试 |
| DDL 语句 | 建删表、加索引、权限相关变更 |
| DML 语句 | 大批量导出、无条件的全表更新或删除 |
| 账号与授权 | 新建账号、提权、授权收回 |
方案取舍
- MariaDB Audit Plugin:随 MariaDB 分发,可按事件类型筛选,部署成本低
- 厂商企业版审计插件:细粒度与筛选能力更强,但需要商业授权
- 旁路审计设备:不占用数据库自身资源,适合集中管控多套实例
- 云数据库审计:由云厂商托管,需先确认字段口径与导出留存能力
- 触发器或代理层自建记录:侵入业务链路,维护成本高,一般只在很小范围使用
审计日志本身可能包含敏感数据(手机号、身份证号)。应对日志文件加密与访问审批,避免审计数据成为新的泄露面。
审计插件与慢查询日志不是一回事:慢查询日志用于性能排查,不记录来源账号与语句上下文,不能替代审计日志用于责任界定。