14.9.3 审计日志与合规性设置
审计日志与合规性设置的目标是“可追溯、可审计、可留存、可取证”。本节从采集、存储、检索、留存与销毁、权限隔离五个维度落地,并给出可执行示例、排错与练习。
原理草图(审计数据流)
审计范围与分级策略#
- 必审:登录/认证、用户与权限变更、路由规则变更、管理端口访问、连接异常/拒绝访问。
- 可选:查询执行记录(按用户/库表/IP/操作类型过滤)。
- 分级:核心业务库全量审计;非核心库按规则抽样,降低性能影响。
采集与配置示例(ProxySQL 管理端)#
1) 连接管理端并确认运行/持久化表#
# 连接 ProxySQL 管理端
mysql -h 127.0.0.1 -P6032 -u admin -padmin -e "select version()"
# 查看运行时与磁盘配置表
mysql -h 127.0.0.1 -P6032 -u admin -padmin -e "
show tables from main;
show tables from disk;"
2) 记录管理端口操作(配置变更审计)#
将所有管理端操作记录入 stats/日志,确保变更可追溯:
-- 进入管理端
mysql -h 127.0.0.1 -P6032 -u admin -padmin
-- 启用详细日志(示例:提高审计可见性)
SET admin_variables='admin-log=true';
LOAD ADMIN VARIABLES TO RUNTIME;
SAVE ADMIN VARIABLES TO DISK;
-- 查询管理端访问日志/统计表(不同版本表名可能不同)
SELECT * FROM stats_mysql_admin_connections ORDER BY time_start DESC LIMIT 5;
说明
- LOAD ... TO RUNTIME:立即生效
- SAVE ... TO DISK:持久化,避免重启丢失
查询审计与过滤示例#
以最小化性能影响为目标,基于用户与库名进行过滤:
-- 设置审计开关(示例为逻辑,具体变量以版本为准)
SET mysql-auditlog_enabled=1;
SET mysql-auditlog_filter_user='app_user';
SET mysql-auditlog_filter_db='core_db';
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
预期效果
仅记录 app_user 对 core_db 的查询审计日志,避免全量日志。
日志存储与安全(本地落盘 + 集中转发)#
1) 本地日志目录与权限#
# 创建专用目录与最小权限
mkdir -p /var/log/proxysql/audit
chown proxysql:proxysql /var/log/proxysql/audit
chmod 750 /var/log/proxysql/audit
2) rsyslog 转发到集中平台(示例)#
# /etc/rsyslog.d/50-proxysql-audit.conf
if $programname == 'proxysql' then /var/log/proxysql/audit/proxysql-audit.log
& stop
# 转发到日志平台
*.* @@logserver.example.com:514
# 重启 rsyslog
systemctl restart rsyslog
合规性与留存策略(示例)#
- 留存周期:90/180/365 天(按等保/行业监管要求)。
- 归档与销毁:过期日志加密归档,销毁需审批记录。
# 归档与加密(示例)
tar czf /backup/proxysql-audit-$(date +%F).tgz /var/log/proxysql/audit
gpg --batch --yes -c /backup/proxysql-audit-$(date +%F).tgz
排错指南#
1) 审计日志无输出#
# 检查变量是否生效(运行时)
mysql -h 127.0.0.1 -P6032 -u admin -padmin -e "select * from global_variables where variable_name like '%audit%';"
# 检查文件权限与目录是否存在
ls -ld /var/log/proxysql/audit
可能原因:
- 未执行 LOAD ... TO RUNTIME
- 日志路径权限不足
- 过滤条件过严导致无命中
2) 审计日志量过大#
- 收紧过滤:按用户、库、IP、操作类型筛选。
- 调整抽样:非核心库按规则采样。
练习#
- 创建审计目录
/var/log/proxysql/audit,并配置 rsyslog 将 proxysql 日志转发到本地文件。验证日志可写入。 - 配置审计过滤,仅记录
app_user对core_db的UPDATE/DELETE操作,执行测试 SQL 并验证日志命中。 - 模拟一次管理端变更(修改路由规则),检查
stats_mysql_admin_connections是否记录。 - 编写一个
audit-archive.sh脚本,对 7 天前的日志进行压缩和加密归档。