风哥教程参考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 disk path (AUDIT_DISK_PATH) = /db2/audit
2.4 启动审计
db2audit start;
# 查看审计状态
db2audit describe;
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
学习交流加群风哥微信: itpux-com
风哥Oracle/MySQL/PostgreSQL/Greenplum/DB2/Redis等数据库培训课程,10年一线实战经验,企业级培训,真正掌握数据库核心技术!
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
