外观
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 = false3. 配置审计日志格式
审计日志支持两种格式:
- 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 年。对于关键业务,建议保存更长时间。
