等保三级对 TiDB 审计日志的核心要求
等保三级安全合规要求对数据库审计日志的覆盖范围、存储时长、防篡改能力有明确规范。具体到 TiDB,需确保所有数据定义语言(DDL)、数据操纵语言(DML)及登录登出行为被记录,且日志保存时间不少于 180 天。可通过查阅《信息安全技术 网络安全等级保护基本要求》中关于“安全审计”条款,确认审计记录中须包含事件日期、时间、类型、主体身份、客体名称、成功或失败标识等要素。这段话基本划定了我们配置的底线:不只是开启日志,还要确保记录内容的完整性。我通常的做法是先拿合规文档列一个 checklist,比如审计字段是否覆盖了“谁、什么时候、做了什么、结果如何”。如果发现缺少客户端 IP 或 SQL 原文,就需要调整 TiDB 的审计参数。
在 TiDB 集群中,通过设置系统变量 `tidb_enable_audit` 为 `ON` 开启审计日志功能。同时,需在配置文件中指定审计日志输出路径与文件名前缀,例如 `audit-log-path = "/data/tidb-audit"` 和 `audit-log-filename = "audit"`。建议将日志存储于独立的高可用磁盘,避免日志写满导致数据库异常。若需记录所有 SQL,可设置 `audit-log-mode = 2`,但务必评估写入性能损耗。
开启审计日志并配置基础参数
在 TiDB 集群中,通过设置系统变量tidb_enable_audit为ON开启审计日志功能。同时,需在配置文件中指定审计日志输出路径与文件名前缀,例如audit-log-path = "/data/tidb-audit"和audit-log-filename = "audit"。建议将日志存储于独立的高可用磁盘,避免日志写满导致数据库异常。若需记录所有 SQL,可设置audit-log-mode = 2,但务必评估写入性能损耗。这里有一个容易忽略的点:audit-log-mode默认只记录 DDL 和登录登出,如果等保要求记录全部 DML(包括 SELECT),就需要改成 mode 2。不过 mode 2 对写入 QPS 高的业务会有明显影响,建议先在测试环境压测一下,或者用audit-log-mode = 1(只记录 DDL + 登录登出 + DML 中的 INSERT/UPDATE/DELETE)来折中。另外,审计日志文件最好存放在与数据盘不同的挂载点,避免日志写满导致 TiDB 节点磁盘 100% 而异常。
验证审计日志是否按预期工作
为了验证审计日志是否按要求生效,可执行一条 INSERT 或 DELETE 语句,然后到审计日志目录下查看最新生成的日志文件。使用grep命令过滤该语句的特征字符串,确认日志中完整记录了执行时间、用户、客户端 IP、数据库名、表名及 SQL 原文。同时检查日志文件中是否包含操作结果(如影响行数)或错误码,以确保满足等保三级对“审计记录完整性”的要求。我有一次发现日志里只有 SQL 文本但没有客户端 IP,后来检查发现是 TiDB 的skip-grant-table参数影响了连接信息的收集。所以验证时不仅要看有无记录,还要逐项核对合规清单里的字段。如果某个字段缺失,可能需要升级 TiDB 版本(有些旧版不记录客户端 IP)或调整log-query相关设置。
存储空间管理与防篡改保护
审计日志的存储需特别注意空间与安全风险。若日志文件增长过快未及时轮转,可能占满磁盘导致 TiDB 服务不可用。建议开启日志轮转,设置audit-log-max-size和audit-log-max-backups参数,并配置独立的日志分区。在安全方面,必须对审计日志文件设置严格的权限控制,只允许管理员读取,并启用数字签名或加密存储(如 LUKS)以防止日志被非法篡改。轮转参数需要根据业务量和磁盘容量计算:比如每天产生 5GB 日志,保留 180 天就需要 900GB 空间,加上备份数量,最好预留 1TB 以上。我习惯用audit-log-max-size = 512(单位 MB),audit-log-max-backups = 30,再配合外部工具将旧日志归档到对象存储,同时保证本地有 180 天的在线日志可供随时查询。
常见配置遗漏与纠正
一个常见误区是只开启审计但未保留原始 SQL 绑定变量值。等保三级要求审计记录能还原操作上下文,因此需设置audit-log-record-plan = true以捕获执行计划,同时确保general-log未意外关闭。另外,若使用 TiDB 的自动清理功能(如tidb_audit_log_max_days),务必与合规要求的 180 天核对,避免因过早清理导致审计记录缺失。实际操作中,我还遇到过因为tidb_enable_audit是动态变量,但audit-log-path必须在配置文件中设置,重启后才生效,导致业务侧误以为已开启但实际日志没写。建议先在测试环境配好所有静态参数,重启集群后再用 SET GLOBAL 打开开关,然后立即用一条语句验证。
关于审计日志的下一步判断
配置完成后,建议定期(例如每周)抽检一部分日志,用脚本检查是否包含连续 180 天的记录。如果发现某天日志缺失,优先检查磁盘空间和轮转策略。如果使用 TiDB 的tidb_audit_log_max_days自动清理,注意该参数的单位是天,设置tidb_audit_log_max_days = 180即可。另外,等保三级还要求审计记录不能随意删除或修改,所以除了文件权限,还可以考虑将日志实时同步到日志服务器或写入只读的文件系统。最后提醒一点:如果审计日志中包含敏感数据(如身份证号),可能需要脱敏或加密存储,这属于数据生命周期管理范畴,需要结合具体业务场景和合规要求来确定。