Skip to content

TiDB 审计日志

TiDB 审计日志功能用于记录数据库的重要操作,包括用户登录、数据访问、权限变更等,帮助管理员监控和审计数据库活动,满足合规要求。

审计日志配置

1. 启用审计日志

在 TiDB 配置文件中添加以下配置启用审计日志:

toml
# tidb.toml
[audit]
enable = true
file = "/tidb-deploy/tidb-4000/log/audit.log"
format = "json"

2. 配置审计规则

审计规则用于指定需要记录的操作类型,支持以下规则:

toml
# 审计规则配置
[audit]
# 记录所有 DDL 操作
ddl = true
# 记录所有 DML 操作
dml = true
# 记录所有 DCL 操作
dcl = true
# 记录所有登录操作
login = true
# 记录所有查询操作
query = false
# 记录所有事务操作
txn = false

3. 配置审计日志格式

审计日志支持两种格式:

  • json:JSON 格式,便于机器解析
  • text:文本格式,便于人工阅读
toml
# 配置审计日志格式
[audit]
format = "json"

4. 配置审计日志滚动

toml
# 配置审计日志滚动
[audit]
max-size = 100  # 单个日志文件最大大小,单位:MB
max-days = 7    # 日志文件保留天数
max-backups = 10 # 保留的日志文件数量

审计日志内容

1. 登录事件

json
{
  "time": "2023-01-01T12:00:00+08:00",
  "type": "login",
  "client": "192.168.0.1:12345",
  "user": "root",
  "host": "127.0.0.1",
  "db": "",
  "status": "success",
  "message": ""
}

2. DDL 事件

json
{
  "time": "2023-01-01T12:01:00+08:00",
  "type": "ddl",
  "client": "192.168.0.1:12345",
  "user": "root",
  "host": "127.0.0.1",
  "db": "test",
  "table": "t1",
  "statement": "CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(20))",
  "status": "success",
  "message": ""
}

3. DML 事件

json
{
  "time": "2023-01-01T12:02:00+08:00",
  "type": "dml",
  "client": "192.168.0.1:12345",
  "user": "root",
  "host": "127.0.0.1",
  "db": "test",
  "table": "t1",
  "statement": "INSERT INTO t1 VALUES (1, 'test')",
  "status": "success",
  "message": "",
  "affected_rows": 1
}

4. DCL 事件

json
{
  "time": "2023-01-01T12:03:00+08:00",
  "type": "dcl",
  "client": "192.168.0.1:12345",
  "user": "root",
  "host": "127.0.0.1",
  "db": "",
  "statement": "GRANT SELECT ON test.* TO 'user1'@'%'",
  "status": "success",
  "message": ""
}

审计日志查询

1. 使用工具查询

可以使用以下工具查询审计日志:

  • grep:用于简单的文本搜索
  • jq:用于解析和查询 JSON 格式的审计日志
  • ELK Stack:用于集中管理和查询审计日志

2. 示例查询

查询所有失败的登录事件

bash
grep -i "failed" /tidb-deploy/tidb-4000/log/audit.log | grep -i "login"

使用 jq 查询特定用户的操作

bash
jq -r '. | select(.user == "root")' /tidb-deploy/tidb-4000/log/audit.log

查询特定时间段的审计日志

bash
grep -i "2023-01-01T12:0[0-5]:" /tidb-deploy/tidb-4000/log/audit.log

审计日志最佳实践

1. 根据需求配置审计规则

根据实际需求配置审计规则,避免记录过多不必要的操作,影响性能:

  • 仅记录关键操作,如登录、DDL、DCL 等
  • 对于高并发环境,建议关闭 query 类型的审计
  • 定期审查审计规则,根据业务变化调整

2. 合理配置审计日志存储

  • 使用独立的磁盘存储审计日志,避免影响数据库性能
  • 配置合理的日志滚动策略,避免磁盘空间耗尽
  • 考虑使用集中式日志管理系统,如 ELK Stack

3. 定期审查审计日志

  • 定期审查审计日志,及时发现异常操作
  • 建立审计日志审查流程,明确审查责任
  • 保存审计日志足够长的时间,满足合规要求

4. 保护审计日志完整性

  • 限制审计日志文件的访问权限
  • 考虑使用日志签名或加密技术,防止审计日志被篡改
  • 定期备份审计日志

审计日志性能影响

启用审计日志会对 TiDB 性能产生一定影响,主要取决于:

  • 审计规则的复杂程度
  • 记录的操作类型和数量
  • 日志格式和存储方式

建议在测试环境中评估审计日志对性能的影响,根据实际情况调整配置。

审计日志与合规

1. GDPR 合规

审计日志可以帮助组织满足 GDPR 合规要求,包括:

  • 记录数据访问和处理活动
  • 提供数据主体访问请求的响应依据
  • 支持数据泄露通知

2. SOX 合规

审计日志可以帮助组织满足 SOX 合规要求,包括:

  • 记录关键财务数据的访问和修改
  • 提供内部控制的审计证据
  • 支持财务报告的准确性验证

3. PCI DSS 合规

审计日志可以帮助组织满足 PCI DSS 合规要求,包括:

  • 记录所有访问持卡人数据的操作
  • 监控和记录异常活动
  • 支持安全事件的调查和响应

常见问题(FAQ)

Q1: 如何查看审计日志是否启用?

A1: 使用 SHOW VARIABLES LIKE 'tidb_audit_enable'; 命令查看审计日志是否启用。

Q2: 审计日志可以记录哪些操作?

A2: 审计日志可以记录登录、DDL、DML、DCL、查询和事务等操作,具体取决于配置的审计规则。

Q3: 如何优化审计日志的性能?

A3: 可以通过以下方式优化审计日志的性能:

  • 仅记录必要的操作类型
  • 使用高效的日志格式(如 JSON)
  • 配置合理的日志滚动策略
  • 使用独立的磁盘存储审计日志

Q4: 审计日志可以记录查询的具体内容吗?

A4: 可以,通过设置 query = true 配置记录查询操作,但会对性能产生较大影响,建议谨慎使用。

Q5: 如何集中管理多个 TiDB 集群的审计日志?

A5: 可以使用 ELK Stack、Fluentd 或其他日志管理工具,将多个 TiDB 集群的审计日志集中收集、存储和查询。

Q6: 审计日志需要保存多长时间?

A6: 审计日志的保存时间取决于合规要求和业务需求,一般建议保存 6 个月到 1 年。对于关键业务,建议保存更长时间。