Skip to content

DB2 审计机制

概述

DB2审计机制是数据库安全的重要组成部分,用于记录和监控数据库的访问和操作。通过配置和管理审计机制,DBA可以确保数据库的安全,满足合规性要求,并在发生安全事件时进行有效的调查和分析。

审计机制组成

1. 审计策略

审计策略是定义审计行为的规则集,包括要审计的事件类型、用户和对象。

审计事件类型

  • 数据库级别事件:连接、断开连接、数据库启动和关闭
  • 对象级别事件:创建、修改、删除数据库对象
  • 数据级别事件:查询、插入、更新、删除数据
  • 安全级别事件:授权、撤销授权、角色管理

审计策略管理

sql
-- 创建审计策略
CREATE AUDIT POLICY db2_audit_policy
CATEGORIES
  (CONTEXT, EXECUTE, OBJECTACCESS, SECMAINT, SYSADMIN, VALIDATE)
STATUS BOTH
ERROR TYPE AUDIT;

-- 启用审计策略
AUDIT DATABASE USING POLICY db2_audit_policy;

-- 查看审计策略
SELECT * FROM SYSCAT.AUDITPOLICIES;
SELECT * FROM SYSCAT.AUDITUSE;

2. 审计日志

审计日志用于存储审计事件的记录,DB2支持多种审计日志类型。

审计日志类型

  • FILE:将审计记录写入文件系统
  • BUFFERED:将审计记录写入缓冲区,定期刷新到文件
  • STREAM:将审计记录流式传输到外部系统

审计日志配置

sql
-- 设置审计日志类型和路径
UPDATE DATABASE MANAGER CONFIGURATION USING AUDIT_BUF_SZ 32
AUDIT_SYSLOGLEVEL WARNING
AUDIT_SYSLOGTYPE USER
AUDIT_PATH '/db2audit' IMMEDIATE;

-- 查看审计配置
GET DATABASE MANAGER CONFIGURATION SHOW DETAIL;

3. 审计记录

审计记录包含审计事件的详细信息,包括事件类型、时间、用户、对象和操作。

审计记录内容

  • 事件类型:审计事件的类型,如连接、查询、更新等
  • 时间戳:事件发生的时间
  • 会话ID:数据库会话标识符
  • 用户ID:执行操作的用户
  • 对象名称:操作的对象名称
  • 操作类型:执行的操作类型
  • 结果:操作的结果(成功或失败)

审计记录查询

sql
-- 查询审计记录(需要审计管理权限)
SELECT * FROM SYSCAT.AUDITRECORDS
WHERE EVENT_TIMESTAMP > CURRENT TIMESTAMP - 1 DAY
ORDER BY EVENT_TIMESTAMP DESC;

审计配置方法

1. 基于策略的审计

基于策略的审计是DB2 9.7及以上版本推荐的审计方法,提供了更灵活和细粒度的审计控制。

配置步骤

  1. 创建审计策略:定义要审计的事件类型和规则
  2. 应用审计策略:将审计策略应用到数据库或对象
  3. 监控审计日志:定期查看和分析审计日志
  4. 调整审计策略:根据需要调整审计策略

示例:配置表级审计

sql
-- 创建表级审计策略
CREATE AUDIT POLICY table_audit_policy
CATEGORIES (OBJECTACCESS STATUS BOTH, CONTEXT STATUS BOTH)
ERROR TYPE AUDIT;

-- 应用审计策略到表
AUDIT TABLE db2inst1.employee USING POLICY table_audit_policy;

-- 查看表级审计配置
SELECT * FROM SYSCAT.AUDITUSE WHERE OBJECTTYPE = 'T';

2. 基于事件的审计

基于事件的审计是传统的审计方法,通过配置审计事件类型来记录审计信息。

配置步骤

  1. 启用审计:设置审计开关
  2. 配置审计事件:选择要审计的事件类型
  3. 设置审计日志:配置审计日志的存储位置和格式
  4. 监控审计日志:定期查看和分析审计日志

示例:配置基于事件的审计

sql
-- 启用审计
UPDATE DATABASE MANAGER CONFIGURATION USING AUDITING ON IMMEDIATE;

-- 配置审计事件
AUDIT CREATE TABLE, DROP TABLE, ALTER TABLE BY ALL;
AUDIT SELECT, INSERT, UPDATE, DELETE ON db2inst1.employee BY ALL;

审计管理与监控

1. 审计日志管理

审计日志轮换

  • 自动轮换:通过配置审计日志大小和数量,实现自动轮换
  • 手动轮换:使用命令手动轮换审计日志
sql
-- 手动轮换审计日志
FLUSH AUDIT BUFFERS;

-- 归档审计日志
CALL SYSPROC.AUDIT_ARCHIVE();

审计日志清理

  • 定期清理:根据审计策略和合规要求,定期清理旧的审计日志
  • 归档保存:将需要长期保存的审计日志归档到安全的存储位置

2. 审计监控

实时监控

  • 使用DB2监控工具实时监控审计事件
  • 配置告警,当检测到异常审计事件时发送通知

定期分析

  • 定期分析审计日志,识别潜在的安全威胁
  • 生成审计报告,满足合规性要求

审计分析工具

  • db2audit:DB2自带的审计分析工具
  • IBM Guardium:企业级数据库审计和合规性管理工具
  • 第三方工具:如Splunk、LogRhythm等日志分析工具

版本差异

版本审计机制特点
DB2 9.1支持基本的审计功能,基于事件的审计
DB2 9.7引入基于策略的审计,提供更灵活的审计控制
DB2 10.1增强审计策略,支持更细粒度的审计控制
DB2 10.5改进审计日志管理,支持审计日志加密
DB2 11.1增强审计性能,支持更高效的审计记录存储
DB2 11.5支持审计记录的数字签名,增强审计日志的完整性

生产实践

1. 审计策略设计

审计范围确定

  • 确定需要审计的敏感数据和对象
  • 识别关键业务流程和操作
  • 考虑合规性要求,如SOX、PCI DSS等

审计策略示例

sql
-- 创建合规性审计策略
CREATE AUDIT POLICY compliance_policy
CATEGORIES
  (CONTEXT STATUS BOTH, -- 记录会话上下文
   EXECUTE STATUS BOTH, -- 记录SQL执行
   OBJECTACCESS STATUS BOTH, -- 记录对象访问
   SECMAINT STATUS BOTH, -- 记录安全管理操作
   SYSADMIN STATUS BOTH, -- 记录系统管理操作
   VALIDATE STATUS BOTH) -- 记录验证操作
STATUS BOTH -- 记录成功和失败的操作
ERROR TYPE AUDIT; -- 审计错误也被记录

-- 应用到数据库
AUDIT DATABASE USING POLICY compliance_policy;

2. 审计性能优化

审计性能影响

  • 审计会对数据库性能产生一定影响,特别是在高并发环境下
  • 审计记录的数量和类型会影响性能开销

性能优化措施

  • 只审计必要的事件和对象,避免过度审计
  • 合理配置审计缓冲区大小,减少I/O开销
  • 使用BUFFERED审计日志类型,提高性能
  • 定期清理和归档审计日志,避免日志文件过大

性能监控

sql
-- 监控审计相关性能指标
SELECT * FROM SYSIBMADM.SNAPDB WHERE SNAPSHOT_TIMESTAMP > CURRENT TIMESTAMP - 1 HOUR;

3. 审计日志安全

审计日志保护

  • 限制审计日志的访问权限,只有授权用户可以访问
  • 加密审计日志,防止未授权访问
  • 定期备份审计日志,防止日志丢失
  • 实现审计日志的完整性保护,如数字签名

审计日志访问控制

sql
-- 限制审计日志访问权限
REVOKE ALL ON DIRECTORY '/db2audit' FROM PUBLIC;
GRANT READ ON DIRECTORY '/db2audit' TO AUDITADM;

4. 审计自动化

审计脚本示例

bash
#!/bin/bash
# DB2 审计日志分析脚本

db_name="sample"
audit_path="/db2audit"
output_file="audit_analysis_$(date +%Y%m%d_%H%M%S).log"

# 分析审计日志
echo "DB2 审计日志分析报告" > $output_file
echo "生成时间: $(date)" >> $output_file
echo "数据库: $db_name" >> $output_file
echo "审计日志路径: $audit_path" >> $output_file
echo "========================================" >> $output_file

# 使用db2audit工具分析日志
db2audit extract file $audit_path/audit.log from $audit_path
db2audit flush

# 查询审计记录
db2 connect to $db_name > /dev/null
echo "1. 最近24小时的审计事件统计:" >> $output_file
db2 -x "SELECT EVENTTYPE, COUNT(*) AS EVENT_COUNT
FROM SYSCAT.AUDITRECORDS
WHERE EVENT_TIMESTAMP > CURRENT TIMESTAMP - 1 DAY
GROUP BY EVENTTYPE
ORDER BY EVENT_COUNT DESC" >> $output_file

echo "========================================" >> $output_file
echo "2. 最近24小时的失败登录尝试:" >> $output_file
db2 -x "SELECT AUTHID, LOCAL_DATETIME, ERRCODE
FROM SYSCAT.AUDITRECORDS
WHERE EVENTTYPE = 'VALIDATE' AND RESULT = 'FAILURE'
AND EVENT_TIMESTAMP > CURRENT TIMESTAMP - 1 DAY
ORDER BY LOCAL_DATETIME DESC" >> $output_file

echo "========================================" >> $output_file
db2 connect reset > /dev/null
echo "审计日志分析完成,结果保存到 $output_file" >> $output_file

常见问题(FAQ)

Q1: 如何选择合适的审计方法?

A1: 选择审计方法应考虑以下因素:

  • 数据库版本:DB2 9.7及以上版本推荐使用基于策略的审计
  • 审计需求:基于策略的审计提供更灵活和细粒度的控制
  • 管理复杂度:基于策略的审计管理更简单,适合大型数据库
  • 性能要求:根据性能要求调整审计范围和类型

Q2: 审计会对数据库性能产生多大影响?

A2: 审计对数据库性能的影响取决于:

  • 审计的事件类型和数量
  • 审计日志的类型和配置
  • 数据库的工作负载和并发度

一般情况下,审计会带来5%-15%的性能开销,合理配置审计策略可以将性能影响降到最低。

Q3: 如何确保审计日志的安全?

A3: 确保审计日志安全的措施包括:

  • 限制审计日志的访问权限
  • 加密审计日志
  • 定期备份和归档审计日志
  • 实现审计日志的完整性保护
  • 监控审计日志的访问和修改

Q4: 如何处理大量的审计日志?

A4: 处理大量审计日志的方法包括:

  • 合理配置审计策略,只审计必要的事件
  • 实现审计日志的自动轮换和清理
  • 使用审计分析工具,高效分析审计日志
  • 建立审计日志的归档和检索机制

Q5: 如何满足合规性要求?

A5: 满足合规性要求的方法包括:

  • 了解相关合规性标准的审计要求
  • 制定符合合规要求的审计策略
  • 定期生成审计报告,证明合规性
  • 保留足够长时间的审计日志
  • 定期进行合规性审计和评估

Q6: DB2 11.5版本在审计机制方面有哪些改进?

A6: DB2 11.5版本在审计机制方面的改进包括:

  • 支持审计记录的数字签名,增强审计日志的完整性
  • 改进审计性能,减少审计对数据库性能的影响
  • 增强审计策略的灵活性,支持更细粒度的审计控制
  • 改进审计日志管理,支持更高效的日志轮换和归档
  • 增强审计分析工具,提供更强大的审计日志分析能力

总结

DB2审计机制是数据库安全的重要组成部分,通过合理配置和管理审计机制,可以确保数据库的安全,满足合规性要求,并在发生安全事件时进行有效的调查和分析。

建议DBA根据数据库的安全需求和合规要求,选择合适的审计方法,制定合理的审计策略,定期监控和分析审计日志,确保审计机制的有效性和安全性。

同时,要注意审计对数据库性能的影响,合理配置审计参数,优化审计性能,平衡安全性和性能的需求。通过持续的审计管理和改进,可以建立一个强大的数据库安全防护体系,保护数据库资产的安全。