1. 首页 > DB2教程 > 正文

DB2教程FG042-DB2审计日志配置实战

风哥教程参考DB2官方文档Security Guide、Audit Guide等内容,详细介绍DB2审计功能的配置、使用和分析方法。更多视频教程www.fgedu.net.cn

目录大纲

Part01-审计功能基础概念

1.1 DB2审计概述

DB2审计功能可以记录数据库活动,包括:

  • 用户登录和登出
  • 权限管理操作
  • 数据访问操作
  • 数据变更操作
  • 对象管理操作
  • 系统管理操作

1.2 审计类别

审计类别 描述
AUDIT 审计相关的操作
CHECKING 权限检查操作
OBJMNT 对象管理操作
SECMAINT 安全管理操作
SYSADMIN 系统管理操作
VALIDATE 用户验证操作
CONTEXT 上下文信息
EXECUTE SQL语句执行

1.3 审计架构

  • 审计策略:定义审计规则
  • 审计缓冲区:临时存储审计记录
  • 审计日志:持久化存储审计记录
  • 审计分析工具:db2audit、SYSPROC.AUDIT_ARCHIVE等

Part02-审计策略配置

2.1 创建审计策略

# 创建审计策略
CREATE AUDIT POLICY fgedu_audit_policy
CATEGORIES AUDIT STATUS BOTH,
CHECKING STATUS BOTH,
OBJMNT STATUS BOTH,
SECMAINT STATUS BOTH,
SYSADMIN STATUS BOTH,
VALIDATE STATUS BOTH,
CONTEXT STATUS NONE,
EXECUTE STATUS NONE
ERROR TYPE NORMAL;

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

2.2 应用审计策略

# 将审计策略应用到数据库
AUDIT DATABASE USING POLICY fgedu_audit_policy;

# 将审计策略应用到表
AUDIT TABLE fgedu_order USING POLICY fgedu_audit_policy;

# 将审计策略应用到用户
AUDIT USER db2user1 USING POLICY fgedu_audit_policy;

# 查看审计应用情况
SELECT AUDITPOLICYNAME, OBJECTTYPE, OBJECTSCHEMA, OBJECTNAME
FROM SYSCAT.AUDITUSE;

2.3 配置实例级别审计

# 更新实例配置
db2 update dbm cfg using AUDIT_BUF_SZ 1000;
db2 update dbm cfg using AUDIT_DISK_PATH /db2/audit;

# 查看实例审计配置
db2 get dbm cfg | grep -i audit;

Audit buffer size (AUDIT_BUF_SZ) = 1000
Audit disk path (AUDIT_DISK_PATH) = /db2/audit

2.4 启动审计

# 启动审计
db2audit start;

# 查看审计状态
db2audit describe;

DB2 AUDIT SETTINGS:

Audit active: “TRUE ”
Log audit events: “FAILURE”
Log checking events: “FAILURE”
Log object maintenance events: “FAILURE”
Log security maintenance events: “FAILURE”
Log system administrator events: “FAILURE”
Log validate events: “FAILURE”
Log context events: “NONE”
Log execute events: “NONE”
Return SQLCA on audit error: “FALSE ”
Audit Data Partition: ” ”
Current audit buffer: 0

Part03-审计日志管理

3.1 提取审计日志

# 提取审计日志到文件
db2audit extract delasc to /db2/audit/audit.log from files;

# 提取特定类别的审计日志
db2audit extract delasc to /db2/audit/audit_validate.log category validate from files;

# 提取特定时间范围的审计日志
db2audit extract delasc to /db2/audit/audit_2026.log from files
timestamp ‘2026-01-01-00.00.00.000000’ to ‘2026-12-31-23.59.59.999999’;

3.2 归档审计日志

# 使用存储过程归档审计日志
CALL SYSPROC.AUDIT_ARCHIVE(
‘/db2/audit/archive’,
NULL,
NULL,
0,
?,
?,
?);

# 查看归档状态
SELECT * FROM TABLE(SYSPROC.AUDIT_LIST_LOGS(”));

3.3 清理审计日志

# 清理已提取的审计日志
db2audit flush;

# 删除旧的审计日志文件
rm /db2/audit/db2audit*.log

Part04-审计日志分析

4.1 审计日志格式

审计日志文件包含以下字段:

  • 时间戳
  • 事件类别
  • 事件类型
  • 用户ID
  • 应用程序名
  • 工作站名
  • SQL语句
  • 返回码

4.2 创建审计分析表

# 创建审计表
CREATE TABLE audit_data (
timestamp TIMESTAMP,
category VARCHAR(32),
event VARCHAR(32),
app_id VARCHAR(128),
app_name VARCHAR(128),
auth_id VARCHAR(128),
auth_type VARCHAR(32),
object_schema VARCHAR(128),
object_name VARCHAR(128),
object_type VARCHAR(32),
sql_text CLOB(64K),
return_code INTEGER,
extra_info CLOB(64K)
) ORGANIZE BY ROW;

# 导入审计数据
LOAD FROM /db2/audit/audit.log OF DEL
MODIFIED BY delprioritychar coldel0x1e
INSERT INTO audit_data;

4.3 审计日志查询

# 查询登录事件
SELECT timestamp, auth_id, app_name, return_code
FROM audit_data
WHERE category = ‘VALIDATE’
ORDER BY timestamp DESC
FETCH FIRST 100 ROWS ONLY;

# 查询失败的登录
SELECT timestamp, auth_id, app_name, extra_info
FROM audit_data
WHERE category = ‘VALIDATE’
AND return_code <> 0
ORDER BY timestamp DESC;

# 查询对象管理操作
SELECT timestamp, auth_id, object_schema, object_name, object_type, sql_text
FROM audit_data
WHERE category = ‘OBJMNT’
ORDER BY timestamp DESC
FETCH FIRST 100 ROWS ONLY;

# 查询权限变更
SELECT timestamp, auth_id, sql_text
FROM audit_data
WHERE category = ‘SECMAINT’
ORDER BY timestamp DESC;

# 统计用户活动
SELECT auth_id, category, COUNT(*) as event_count
FROM audit_data
WHERE timestamp > CURRENT TIMESTAMP – 7 DAYS
GROUP BY auth_id, category
ORDER BY event_count DESC;

4.4 审计报告

# 生成每日审计报告
SELECT
DATE(timestamp) as audit_date,
category,
COUNT(*) as total_events,
SUM(CASE WHEN return_code = 0 THEN 1 ELSE 0 END) as success_events,
SUM(CASE WHEN return_code <> 0 THEN 1 ELSE 0 END) as failed_events
FROM audit_data
WHERE DATE(timestamp) = CURRENT DATE – 1 DAY
GROUP BY DATE(timestamp), category
ORDER BY category;

Part05-风哥经验总结与分享

5.1 审计最佳实践

  • 根据安全需求配置合适的审计级别
  • 定期归档和清理审计日志
  • 监控审计日志的存储空间
  • 建立审计分析流程
  • 定期审查审计日志
  • 对关键表和用户进行审计
  • 保护审计日志的安全

5.2 常见审计问题

问题 原因 解决方案
审计日志过大 审计级别过高 调整审计策略,只审计必要内容
性能影响 同步审计开销大 使用异步审计,增大审计缓冲区
审计数据丢失 审计缓冲区溢出 增大AUDIT_BUF_SZ,定期提取日志
审计分析困难 数据量大且格式复杂 建立审计表,使用SQL分析

5.3 审计自动化脚本

# 每日审计归档脚本
#!/bin/bash
AUDIT_DIR=”/db2/audit”
ARCHIVE_DIR=”/db2/audit/archive”
DATE=$(date +%Y%m%d)

# 提取审计日志
db2audit extract delasc to ${AUDIT_DIR}/audit_${DATE}.log from files

# 归档审计日志
mkdir -p ${ARCHIVE_DIR}/${DATE}
mv ${AUDIT_DIR}/db2audit*.log ${ARCHIVE_DIR}/${DATE}/
mv ${AUDIT_DIR}/audit_${DATE}.log ${ARCHIVE_DIR}/${DATE}/

# 清理审计缓冲区
db2audit flush

echo “Audit archive completed for ${DATE}”

# 审计告警脚本
#!/bin/bash
# 检查失败的登录
FAILED_LOGINS=$(db2 -x “SELECT COUNT(*) FROM audit_data WHERE category = ‘VALIDATE’ AND return_code <> 0 AND timestamp > CURRENT TIMESTAMP – 1 HOUR”)

if [ “$FAILED_LOGINS” -gt 10 ]; then
echo “ALERT: Too many failed logins: $FAILED_LOGINS” | mail -s “DB2 Audit Alert” dba@fgedu.net.cn
fi

更多视频教程www.fgedu.net.cn
学习交流加群风哥微信: itpux-com
风哥Oracle/MySQL/PostgreSQL/Greenplum/DB2/Redis等数据库培训课程,10年一线实战经验,企业级培训,真正掌握数据库核心技术!

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息