Skip to content

KingBaseES 审计日志配置与分析

审计日志概述

KingBaseES 审计日志(Audit Log)记录了数据库的安全相关活动,包括用户登录、权限变更、数据操作等。审计日志对于安全审计、合规检查和故障排查具有重要价值。

审计日志的作用

  1. 安全审计:记录用户的安全相关活动,用于安全审计和合规检查
  2. 权限管理:监控权限变更,防止未授权的权限操作
  3. 数据保护:记录敏感数据的访问和修改,保护数据安全
  4. 故障排查:追踪操作历史,帮助排查安全事件和故障
  5. 合规检查:满足法律法规和行业规范的审计要求

审计日志的特点

  1. 全面性:记录数据库的各种安全相关活动
  2. 不可篡改性:审计日志一旦生成,无法修改或删除
  3. 详细性:记录操作的详细信息,包括操作者、时间、对象等
  4. 可配置性:支持灵活的审计策略配置
  5. 高性能:审计日志的生成对数据库性能影响较小

审计日志配置

配置文件位置

KingBaseES 审计日志的配置文件为 kingbase.conf,主要配置参数在该文件中。

主要配置参数

  1. audit_enabled:是否启用审计日志,默认为 off

    audit_enabled = on
  2. audit_directory:审计日志存储目录,默认为 audit

    audit_directory = 'audit'
  3. audit_filename:审计日志文件名前缀,默认为 kingbase_audit

    audit_filename = 'kingbase_audit'
  4. audit_rotation_age:审计日志轮换时间,默认为 1d

    audit_rotation_age = 1d
  5. audit_rotation_size:审计日志轮换大小,默认为 100MB

    audit_rotation_size = 100MB
  6. audit_level:审计级别,可选值:0-5

    audit_level = 3
    • 0:关闭审计
    • 1:只审计登录/登出
    • 2:审计登录/登出和 DDL 操作
    • 3:审计登录/登出、DDL 和 DML 操作
    • 4:审计登录/登出、DDL、DML 和 DCL 操作
    • 5:审计所有操作
  7. audit_log_format:审计日志格式,可选值:text, csv

    audit_log_format = 'text'
  8. audit_include:需要审计的对象列表

    audit_include = '{table1, table2}'
  9. audit_exclude:不需要审计的对象列表

    audit_exclude = '{table3, table4}'
  10. audit_client_ip:是否记录客户端 IP,默认为 on

    audit_client_ip = on
  11. audit_superuser:是否审计超级用户,默认为 on

    audit_superuser = on

配置示例

# 审计日志配置
audit_enabled = on
audit_directory = 'audit'
audit_filename = 'kingbase_audit'
audit_rotation_age = 1d
audit_rotation_size = 100MB
audit_level = 3
audit_log_format = 'text'
audit_client_ip = on
audit_superuser = on
audit_include = '{public.*}'
audit_exclude = '{public.temp_table}'

审计日志格式与内容

文本格式日志

文本格式的审计日志包含以下字段:

  • 时间戳
  • 审计级别
  • 操作类型
  • 数据库名
  • 用户名
  • 客户端 IP
  • 客户端端口
  • 对象类型
  • 对象名称
  • 操作语句
  • 结果状态

典型日志内容

  1. 登录日志

    2023-10-01 10:00:00.123 CST [1234]: AUDIT: SESSION,100,LOGIN,SUCCESS,system,192.168.1.100,54321,,login succeeded,0
  2. DDL 操作日志

    2023-10-01 10:01:00.456 CST [1234]: AUDIT: OBJECT,200,CREATE TABLE,SUCCESS,system,192.168.1.100,54321,public,table1,CREATE TABLE table1 (id int primary key, name varchar(50)),0
  3. DML 操作日志

    2023-10-01 10:02:00.789 CST [1234]: AUDIT: ACCESS,300,INSERT,SUCCESS,system,192.168.1.100,54321,public,table1,INSERT INTO table1 VALUES (1, 'test'),1
  4. DCL 操作日志

    2023-10-01 10:03:00.987 CST [1234]: AUDIT: PRIVILEGE,400,GRANT,SUCCESS,system,192.168.1.100,54321,public,table1,GRANT SELECT ON table1 TO user1,0
  5. 登录失败日志

    2023-10-01 10:04:00.654 CST [5678]: AUDIT: SESSION,100,LOGIN,FAILURE,invalid,192.168.1.200,54322,,login failed: password authentication failed for user "invalid",0

审计日志分析

日志分析工具

  1. 文本编辑器:使用 Vim、Emacs 等文本编辑器直接查看日志
  2. grep/awk/sed:使用 Linux 命令行工具分析日志
  3. KingBaseES Manager:通过 KEM 查看和分析审计日志
  4. ELK Stack:使用 Elasticsearch、Logstash、Kibana 进行日志收集、分析和可视化
  5. Graylog:使用 Graylog 进行日志管理和分析
  6. 专用审计工具:使用专用的审计分析工具,如 IBM Guardium、McAfee Database Security 等

常见分析场景

  1. 登录失败分析

    bash
    # 统计登录失败次数
    grep -c "LOGIN,FAILURE" kingbase_audit-2023-10-01*.log
    
    # 查看登录失败原因
    grep "LOGIN,FAILURE" kingbase_audit-2023-10-01*.log | sort | uniq -c | sort -nr
    
    # 查看特定 IP 的登录失败情况
    grep "192.168.1.200" kingbase_audit-2023-10-01*.log | grep "LOGIN,FAILURE"
  2. 权限变更分析

    bash
    # 统计权限变更次数
    grep -c "PRIVILEGE" kingbase_audit-2023-10-01*.log
    
    # 查看权限变更类型
    grep "PRIVILEGE" kingbase_audit-2023-10-01*.log | awk -F, '{print $3}' | sort | uniq -c
    
    # 查看特定用户的权限变更
    grep "user1" kingbase_audit-2023-10-01*.log | grep "PRIVILEGE"
  3. 敏感数据访问分析

    bash
    # 查看对敏感表的访问
    grep "sensitive_table" kingbase_audit-2023-10-01*.log | grep "ACCESS"
    
    # 统计敏感表的访问次数
    grep -c "sensitive_table" kingbase_audit-2023-10-01*.log | grep "ACCESS"
    
    # 查看对敏感表的修改操作
    grep "sensitive_table" kingbase_audit-2023-10-01*.log | grep -E "INSERT|UPDATE|DELETE"
  4. DDL 操作分析

    bash
    # 统计 DDL 操作次数
    grep -c "OBJECT" kingbase_audit-2023-10-01*.log
    
    # 查看 DDL 操作类型
    grep "OBJECT" kingbase_audit-2023-10-01*.log | awk -F, '{print $3}' | sort | uniq -c
    
    # 查看特定表的 DDL 操作
    grep "table1" kingbase_audit-2023-10-01*.log | grep "OBJECT"

审计日志管理

日志轮换

KingBaseES 支持自动审计日志轮换,通过以下参数配置:

  1. audit_rotation_age:按时间轮换日志

    audit_rotation_age = 1d  # 每天轮换一次
  2. audit_rotation_size:按大小轮换日志

    audit_rotation_size = 100MB  # 日志文件超过 100MB 时轮换

日志清理

  1. 手动清理:使用 rm 命令手动删除旧日志

    bash
    # 删除 90 天前的审计日志
    find /path/to/audit -name "kingbase_audit-*.log" -mtime +90 -delete
  2. 自动清理:使用 crontab 定时清理旧日志

    bash
    # 添加到 crontab
    0 0 * * * find /path/to/audit -name "kingbase_audit-*.log" -mtime +90 -delete
  3. 日志压缩:对旧日志进行压缩,减少存储空间

    bash
    # 压缩 30 天前的审计日志
    find /path/to/audit -name "kingbase_audit-*.log" -mtime +30 -exec gzip {} \;

日志备份

  1. 本地备份:将日志备份到本地其他目录

    bash
    # 备份当天审计日志到本地备份目录
    cp /path/to/audit/kingbase_audit-$(date +%Y-%m-%d)*.log /path/to/backup/
  2. 远程备份:将日志备份到远程服务器

    bash
    # 使用 rsync 备份审计日志到远程服务器
    rsync -avz /path/to/audit/kingbase_audit-$(date +%Y-%m-%d)*.log remote_user@remote_server:/path/to/backup/
  3. 云存储备份:将日志备份到云存储服务

    bash
    # 使用 AWS CLI 备份审计日志到 S3
    aws s3 cp /path/to/audit/kingbase_audit-$(date +%Y-%m-%d)*.log s3://kingbase-audit-logs/

版本差异(V8 R6 vs V8 R7)

审计功能增强

  1. V8 R7 新增审计功能

    • 支持细粒度的审计策略配置
    • 新增审计规则管理功能
    • 支持审计日志的加密存储
    • 新增审计日志的数字签名
    • 支持实时审计告警
  2. 配置参数变化

    • V8 R7 新增了多个审计配置参数
    • 优化了部分参数的默认值
    • 支持更灵活的审计策略配置
  3. 审计日志格式增强

    • V8 R7 支持更丰富的审计日志格式
    • 新增了 JSON 格式的审计日志
    • 增强了审计日志的可读性和可分析性
  4. 审计性能优化

    • V8 R7 优化了审计日志的生成性能
    • 减少了审计对数据库性能的影响
    • 支持异步审计日志写入

最佳实践

审计日志配置最佳实践

  1. 合理设置审计级别:根据需求设置合适的审计级别,避免审计日志过多或过少

    • 生产环境:建议使用级别 3 或 4
    • 敏感数据环境:建议使用级别 5
    • 开发环境:可以使用级别 2
  2. 配置审计策略:根据业务需求,配置合理的审计策略

    • 重点审计敏感数据和关键业务表
    • 审计所有的权限变更操作
    • 审计所有的登录失败事件
  3. 优化审计日志格式:根据分析需求,选择合适的审计日志格式

    • 文本格式:便于直接查看和简单分析
    • CSV 格式:便于使用 Excel 等工具分析
    • JSON 格式:便于使用 ELK Stack 等工具分析
  4. 配置日志轮换:合理配置审计日志轮换参数,避免日志文件过大

    audit_rotation_age = 1d
    audit_rotation_size = 100MB

审计日志管理最佳实践

  1. 定期清理审计日志:建立审计日志清理机制,避免日志占用过多存储空间

    • 建议保留 90-180 天的审计日志
    • 对旧日志进行压缩或归档
  2. 备份重要审计日志:备份重要的审计日志文件,便于日后分析和合规检查

    • 备份到本地其他目录或远程服务器
    • 考虑使用云存储备份
    • 备份文件应加密存储
  3. 监控审计日志增长:监控审计日志文件的增长情况,及时调整审计策略

    • 配置审计日志增长告警
    • 定期检查审计日志大小和数量
  4. 加强审计日志安全:保护审计日志的安全,防止日志被篡改或删除

    • 设置合理的文件权限,限制访问权限
    • 对审计日志进行加密存储
    • 配置审计日志的数字签名
    • 定期验证审计日志的完整性

审计日志分析最佳实践

  1. 建立审计分析流程:建立定期分析审计日志的流程

    • 每日:查看当日的登录失败和异常操作
    • 每周:分析权限变更和敏感数据访问
    • 每月:进行全面的安全审计和合规检查
  2. 自动化审计分析:使用脚本或工具自动化审计日志分析

    • 编写脚本提取关键审计指标
    • 使用 ELK Stack 或 Graylog 进行集中审计日志管理和分析
    • 配置实时审计告警,及时发现异常操作
  3. 异常检测:配置异常检测规则,及时发现安全事件

    • 登录失败次数异常增加
    • 敏感数据的异常访问
    • 权限的异常变更
    • 异常的操作时间和频率
  4. 合规检查:定期进行合规检查,确保符合法律法规和行业规范

    • 根据 GDPR、SOX、PCI-DSS 等合规要求进行审计
    • 生成合规报告,记录审计结果
    • 保存审计证据,便于日后审计

常见问题(FAQ)

Q1:审计日志不生成怎么办?

A:可能的原因和解决方法:

  1. audit_enabled 参数设置为 off:修改为 on
  2. audit_level 参数设置过低:调整为合适的审计级别
  3. 日志目录权限问题:检查审计日志目录的权限,确保 KingBaseES 用户有写入权限
  4. 审计配置错误:检查审计配置参数,确保配置正确
  5. 数据库未重启:修改审计配置后,需要重启数据库才能生效

Q2:审计日志过多怎么办?

A:可以通过以下方式解决:

  1. 调整审计级别,减少审计事件数量
  2. 配置合理的审计策略,只审计必要的操作和对象
  3. 增加审计日志轮换频率,及时清理旧日志
  4. 启用审计日志压缩,减少存储空间
  5. 考虑使用集中式审计日志管理系统,如 ELK Stack

Q3:如何审计特定用户的操作?

A:可以通过以下方式审计特定用户的操作:

  1. 使用 audit_include 参数,指定需要审计的用户

    audit_include = '{user1, user2}'
  2. 使用审计规则,针对特定用户配置审计策略

    sql
    -- 创建审计规则
    CREATE AUDIT RULE user_audit_rule
    AUDIT ALL
    ON ALL
    FOR user1;
  3. 使用 grep 命令过滤特定用户的审计日志

    bash
    grep "user1" kingbase_audit-2023-10-01*.log

Q4:如何保护审计日志的安全?

A:可以通过以下方式保护审计日志的安全:

  1. 设置合理的文件权限,限制访问权限

    bash
    chmod 600 /path/to/audit/kingbase_audit-*.log
    chown kingbase:kingbase /path/to/audit/kingbase_audit-*.log
  2. 对审计日志进行加密存储

    bash
    # 使用 gpg 加密审计日志
    gpg -c kingbase_audit-2023-10-01*.log
  3. 配置审计日志的数字签名

    audit_signature = on
  4. 定期验证审计日志的完整性

    bash
    # 使用 sha256sum 验证日志完整性
    sha256sum kingbase_audit-2023-10-01*.log > audit_checksum.txt
    # 验证时
    sha256sum -c audit_checksum.txt

Q5:如何进行合规审计?

A:进行合规审计的步骤:

  1. 了解相关法律法规和行业规范的审计要求
  2. 根据合规要求,配置审计策略
  3. 收集和分析审计日志
  4. 生成合规报告,记录审计结果
  5. 保存审计证据,便于日后审计
  6. 定期更新审计策略,适应新的合规要求

Q6:审计日志对数据库性能有影响吗?

A:审计日志的生成会对数据库性能产生一定的影响,影响程度取决于审计级别和审计策略:

  1. 审计级别越高,对性能的影响越大
  2. 审计对象越多,对性能的影响越大
  3. 审计日志写入方式(同步/异步)会影响性能

可以通过以下方式减少审计对性能的影响:

  1. 合理设置审计级别,只审计必要的操作
  2. 配置合理的审计策略,只审计关键对象
  3. 使用异步审计日志写入
  4. 优化审计日志存储,使用高性能存储设备

总结

审计日志是 KingBaseES 数据库安全体系的重要组成部分,对于安全审计、合规检查和故障排查具有重要价值。通过合理配置审计日志、加强审计日志管理和分析,可以提高数据库的安全性和合规性。

在实际使用过程中,需要根据数据库规模和业务需求,合理配置审计参数,建立审计日志管理和分析机制。同时,要关注不同版本间的差异,充分利用新版本提供的增强功能。

通过审计日志的有效管理和分析,可以帮助 DBA 及时发现和处理安全事件,提高数据库系统的安全性和可靠性,保障业务的正常运行和数据安全。