外观
OceanBase 审计日志配置
核心概念
审计日志是指记录OceanBase数据库中所有重要操作的日志,包括用户登录、权限变更、数据访问、系统配置变更等。审计日志是数据库安全体系的重要组成部分,通过审计日志可以实现对数据库操作的追溯和监控,及时发现和防范安全威胁,满足合规要求。
审计日志配置
1. 审计日志基础配置
1.1 启用审计日志
功能:开启或关闭审计日志功能 参数名:audit_log_enabled默认值:false取值范围:true/false
sql
-- 启用审计日志
SET GLOBAL audit_log_enabled = true;
-- 查看当前配置
SHOW VARIABLES LIKE 'audit_log_enabled';1.2 审计日志策略
功能:配置需要审计的操作类型 参数名:audit_log_policy默认值:ALL取值范围:ALL/NONE/LOGIN/DML/DDL/DCL/ADMIN
ALL:审计所有操作NONE:不审计任何操作LOGIN:仅审计登录和登出操作DML:审计数据操纵语言操作DDL:审计数据定义语言操作DCL:审计数据控制语言操作ADMIN:审计管理操作
sql
-- 配置审计所有操作
SET GLOBAL audit_log_policy = 'ALL';
-- 仅审计登录和DDL操作
SET GLOBAL audit_log_policy = 'LOGIN,DDL';1.3 审计日志格式
功能:配置审计日志的输出格式 参数名:audit_log_format默认值:JSON取值范围:JSON/TEXT
sql
-- 设置审计日志格式为JSON
SET GLOBAL audit_log_format = 'JSON';2. 审计日志存储配置
2.1 审计日志存储位置
功能:配置审计日志的存储路径 参数名:audit_log_dir默认值:$OB_HOME/log/audit
sql
-- 设置审计日志存储路径
SET GLOBAL audit_log_dir = '/data/ob/audit_log';2.2 审计日志文件大小
功能:配置单个审计日志文件的最大大小 参数名:audit_log_rotate_size默认值:1073741824(1GB) 取值范围:1048576(1MB)- 10737418240(10GB)
sql
-- 设置审计日志文件大小为2GB
SET GLOBAL audit_log_rotate_size = 2147483648;2.3 审计日志保留天数
功能:配置审计日志的保留天数 参数名:audit_log_expire_days默认值:7(7天) 取值范围:1 - 3650(10年)
sql
-- 设置审计日志保留30天
SET GLOBAL audit_log_expire_days = 30;2.4 审计日志归档模式
功能:配置审计日志的归档模式 参数名:audit_log_archive_mode默认值:NONE取值范围:NONE/LOCAL/REMOTE
sql
-- 启用本地归档模式
SET GLOBAL audit_log_archive_mode = 'LOCAL';3. 审计日志过滤配置
3.1 审计日志过滤规则
功能:配置审计日志的过滤规则,只记录符合规则的操作 参数名:audit_log_filter默认值:''(不过滤)
sql
-- 只审计特定用户的操作
SET GLOBAL audit_log_filter = 'user("root","admin")';
-- 只审计特定IP的操作
SET GLOBAL audit_log_filter = 'client_ip("192.168.1.100","192.168.1.101")';
-- 组合过滤规则
SET GLOBAL audit_log_filter = 'user("root") AND client_ip("192.168.1.%")';3.2 审计日志忽略规则
功能:配置审计日志的忽略规则,不记录符合规则的操作 参数名:audit_log_ignore默认值:''(不忽略)
sql
-- 忽略系统用户的操作
SET GLOBAL audit_log_ignore = 'user("__system__")';
-- 忽略特定数据库的操作
SET GLOBAL audit_log_ignore = 'database("test")';4. 审计日志高级配置
4.1 审计日志采样率
功能:配置审计日志的采样率,用于降低审计日志的数量 参数名:audit_log_sample_rate默认值:100(100%) 取值范围:1 - 100
sql
-- 设置审计日志采样率为50%
SET GLOBAL audit_log_sample_rate = 50;4.2 审计日志缓冲区大小
功能:配置审计日志的缓冲区大小 参数名:audit_log_buffer_size默认值:16777216(16MB) 取值范围:1048576(1MB)- 1073741824(1GB)
sql
-- 设置审计日志缓冲区大小为32MB
SET GLOBAL audit_log_buffer_size = 33554432;4.3 审计日志刷新间隔
功能:配置审计日志的刷新间隔 参数名:audit_log_flush_interval默认值:1000(1秒) 取值范围:100(0.1秒)- 3600000(1小时)
sql
-- 设置审计日志刷新间隔为5秒
SET GLOBAL audit_log_flush_interval = 5000;审计日志管理
1. 审计日志查看
1.1 使用SQL查看审计日志
功能:通过SQL查询审计日志 视图名:oceanbase.GV$OB_AUDIT_LOG
sql
-- 查看所有审计日志
SELECT * FROM oceanbase.GV$OB_AUDIT_LOG;
-- 查看特定用户的审计日志
SELECT * FROM oceanbase.GV$OB_AUDIT_LOG WHERE user_name = 'root';
-- 查看特定时间范围的审计日志
SELECT * FROM oceanbase.GV$OB_AUDIT_LOG
WHERE event_time BETWEEN '2024-01-01 00:00:00' AND '2024-01-02 00:00:00';
-- 查看登录失败的审计日志
SELECT * FROM oceanbase.GV$OB_AUDIT_LOG WHERE action = 'login' AND result = 'FAILED';1.2 直接查看审计日志文件
功能:直接查看审计日志文件内容 审计日志文件位置:由audit_log_dir参数指定
bash
# 查看审计日志文件列表
ls -la /data/ob/audit_log/
# 查看最新的审计日志文件
tail -f /data/ob/audit_log/audit.log
# 查看特定审计日志文件
cat /data/ob/audit_log/audit.log.202401011200002. 审计日志归档
2.1 手动归档审计日志
功能:手动将审计日志归档到指定位置 语法:
sql
ADMIN_CMD('archive audit log to "archive_path"');示例:
sql
ADMIN_CMD('archive audit log to "/data/ob/audit_archive/20240101"');2.2 自动归档配置
功能:配置审计日志的自动归档策略 参数名:audit_log_archive_interval默认值:0(不自动归档) 取值范围:0 - 86400(秒)
sql
-- 设置每天自动归档一次
SET GLOBAL audit_log_archive_interval = 86400;3. 审计日志清理
3.1 自动清理
功能:根据audit_log_expire_days参数自动清理过期的审计日志 配置方法:
sql
-- 设置审计日志保留30天,30天后自动清理
SET GLOBAL audit_log_expire_days = 30;3.2 手动清理
功能:手动清理指定时间之前的审计日志 语法:
sql
ADMIN_CMD('purge audit log before "expire_time"');示例:
sql
-- 清理2024年1月1日之前的审计日志
ADMIN_CMD('purge audit log before "2024-01-01 00:00:00"');4. 审计日志完整性检查
功能:检查审计日志的完整性,防止日志被篡改 语法:
sql
ADMIN_CMD('check audit log integrity');审计日志分析
1. 审计日志字段说明
审计日志包含以下重要字段:
| 字段名 | 说明 |
|---|---|
tenant_id | 租户ID |
user_name | 操作用户名 |
client_ip | 客户端IP地址 |
client_port | 客户端端口 |
action | 操作类型(login, logout, select, insert, update, delete, create, drop等) |
object_type | 操作对象类型(table, view, index等) |
object_name | 操作对象名称 |
event_time | 操作时间 |
result | 操作结果(SUCCESS, FAILED) |
return_code | 返回码 |
sql_text | 执行的SQL语句 |
affected_rows | 影响的行数 |
session_id | 会话ID |
trace_id | 跟踪ID,用于关联相关操作 |
2. 审计日志分析场景
2.1 安全事件分析
功能:分析可疑的安全事件,如暴力破解、权限滥用等
sql
-- 查找登录失败次数较多的IP
SELECT client_ip, COUNT(*) as fail_count
FROM oceanbase.GV$OB_AUDIT_LOG
WHERE action = 'login' AND result = 'FAILED'
GROUP BY client_ip
ORDER BY fail_count DESC;
-- 查找权限变更操作
SELECT * FROM oceanbase.GV$OB_AUDIT_LOG
WHERE action IN ('grant', 'revoke', 'create user', 'alter user')
ORDER BY event_time DESC;2.2 性能问题分析
功能:通过审计日志分析性能问题,如慢SQL、频繁访问的表等
sql
-- 查找执行时间较长的SQL
SELECT sql_text, COUNT(*) as exec_count, AVG(execute_time) as avg_time
FROM oceanbase.GV$OB_AUDIT_LOG
WHERE action IN ('select', 'insert', 'update', 'delete')
GROUP BY sql_text
ORDER BY avg_time DESC
LIMIT 10;
-- 查找访问频率较高的表
SELECT object_name, COUNT(*) as access_count
FROM oceanbase.GV$OB_AUDIT_LOG
WHERE object_type = 'table'
GROUP BY object_name
ORDER BY access_count DESC
LIMIT 10;2.3 合规性检查
功能:检查数据库操作是否符合合规要求,如敏感数据访问、操作权限等
sql
-- 查找访问敏感表的操作
SELECT * FROM oceanbase.GV$OB_AUDIT_LOG
WHERE object_name IN ('user_info', 'order_info')
AND action IN ('select', 'update', 'delete')
ORDER BY event_time DESC;
-- 查找非工作时间的操作
SELECT * FROM oceanbase.GV$OB_AUDIT_LOG
WHERE HOUR(event_time) NOT BETWEEN 9 AND 18
AND action NOT IN ('login', 'logout')
ORDER BY event_time DESC;3. 审计日志分析工具
3.1 OCP审计日志分析
OceanBase Cloud Platform (OCP) 提供了可视化的审计日志分析功能,可以通过OCP控制台查看和分析审计日志。
主要功能:
- 审计日志可视化查询
- 安全事件告警
- 审计报表生成
- 合规性检查
3.2 第三方日志分析工具
审计日志可以导出到第三方日志分析工具中进行深入分析,如:
- ELK Stack:Elasticsearch + Logstash + Kibana
- Splunk:企业级日志分析平台
- Graylog:开源日志管理平台
- Prometheus + Grafana:监控和可视化平台
审计日志最佳实践
1. 配置最佳实践
1.1 合理选择审计策略
- 根据业务需求和合规要求选择合适的审计策略
- 生产环境建议使用
ALL或LOGIN,DDL,DCL策略 - 测试环境可以使用更宽松的审计策略
1.2 优化审计日志性能
- 合理设置审计日志采样率,降低系统负担
- 调整审计日志缓冲区大小,减少I/O操作
- 定期清理过期的审计日志,避免存储空间不足
- 考虑使用分布式存储存储审计日志
1.3 确保审计日志安全
- 限制审计日志文件的访问权限,只允许管理员访问
- 配置审计日志完整性检查,防止日志被篡改
- 定期备份审计日志到安全的位置
- 考虑对审计日志进行加密存储
2. 管理最佳实践
2.1 建立审计日志管理流程
- 制定审计日志的采集、存储、分析和归档流程
- 明确审计日志的保留期限和清理策略
- 建立审计日志分析的定期检查机制
- 制定安全事件的响应流程
2.2 结合监控系统
- 将审计日志与监控系统集成,实现实时告警
- 配置关键操作的告警规则,如权限变更、登录失败等
- 定期分析审计日志,发现潜在的安全威胁
2.3 定期审计和评估
- 定期进行安全审计,评估数据库的安全状况
- 检查审计日志配置是否符合合规要求
- 根据业务变化和安全威胁,及时调整审计策略
3. 分析最佳实践
3.1 建立审计日志分析模型
- 根据业务特点和安全需求,建立审计日志分析模型
- 关注重点操作和敏感数据访问
- 结合用户行为分析,发现异常操作
3.2 自动化分析
- 使用脚本或工具自动化审计日志分析
- 实现安全事件的自动检测和告警
- 定期生成审计报告,便于管理层查看
常见问题(FAQ)
Q1: 审计日志会影响数据库性能吗?
A1: 审计日志会对数据库性能产生一定影响,主要取决于审计策略和日志量:
- 审计策略越复杂,性能影响越大
- 日志量越大,存储空间和I/O开销越大
- 可以通过调整采样率、缓冲区大小等参数降低性能影响
Q2: 如何备份审计日志?
A2: 备份审计日志的方法:
- 使用OceanBase内置的归档功能,将审计日志归档到安全位置
- 使用第三方备份工具,定期备份审计日志文件
- 将审计日志导出到分布式存储或云存储服务
Q3: 审计日志可以删除吗?
A3: 审计日志可以删除,但需要注意:
- 遵循公司的审计日志保留政策
- 确保删除的审计日志已经备份
- 生产环境建议保留至少30天的审计日志
Q4: 如何查看审计日志的详细信息?
A4: 查看审计日志详细信息的方法:
- 通过SQL查询
oceanbase.GV$OB_AUDIT_LOG视图 - 直接查看审计日志文件
- 使用OCP或第三方日志分析工具
Q5: 审计日志可以记录哪些操作?
A5: 审计日志可以记录以下类型的操作:
- 用户登录和登出
- 数据访问操作(SELECT, INSERT, UPDATE, DELETE)
- 数据定义操作(CREATE, ALTER, DROP)
- 权限管理操作(GRANT, REVOKE)
- 用户管理操作(CREATE USER, ALTER USER, DROP USER)
- 系统配置变更操作
- 备份和恢复操作
Q6: 如何配置审计日志的告警?
A6: 配置审计日志告警的方法:
- 使用OCP配置审计日志告警规则
- 将审计日志导出到监控系统,如Prometheus + Grafana
- 使用第三方日志分析工具,如ELK Stack,配置告警规则
Q7: 审计日志的默认存储位置在哪里?
A7: 审计日志的默认存储位置由audit_log_dir参数指定,默认值为$OB_HOME/log/audit,其中$OB_HOME是OceanBase的安装目录。
Q8: 如何提高审计日志的查询性能?
A8: 提高审计日志查询性能的方法:
- 定期归档和清理过期的审计日志
- 使用分区表存储审计日志
- 为审计日志表创建合适的索引
- 限制查询的时间范围和返回结果数量
