Skip to content

DB2 安全审计

安全审计概述

DB2 安全审计是指对数据库活动进行监控和记录的过程,用于检测和预防未授权访问、数据泄露和其他安全违规行为。安全审计是数据库安全体系的重要组成部分,有助于满足合规要求,提高数据库安全性。

安全审计的重要性

  • 合规要求:满足行业法规和标准(如PCI DSS、HIPAA、SOX等)的审计要求
  • 安全监控:实时监控数据库活动,检测异常行为
  • 取证分析:在安全事件发生后,提供详细的审计日志用于取证分析
  • 责任追究:明确用户操作责任,便于追溯
  • 安全改进:通过审计数据,识别安全漏洞,改进安全策略

安全审计的类型

审计类型审计内容
连接审计记录用户连接和断开连接的活动
语句审计记录用户执行的SQL语句
对象审计记录对特定数据库对象的操作
特权审计记录特权用户的操作
安全策略审计记录安全策略的变更

审计组件和架构

审计组件

DB2 安全审计包含以下主要组件:

  • 审计日志:存储审计记录的文件或表
  • 审计策略:定义要审计的活动和对象
  • 审计引擎:负责收集和处理审计数据
  • 审计管理工具:用于配置和管理审计功能

审计架构

DB2 审计架构分为以下层次:

  1. 审计策略定义:管理员定义审计策略
  2. 审计数据收集:审计引擎收集审计数据
  3. 审计数据存储:审计数据存储到审计日志
  4. 审计数据分析:管理员分析审计数据
  5. 审计报告生成:生成审计报告

审计配置

启用审计功能

步骤1:检查审计功能状态

bash
# 检查审计功能是否已启用
db2 get dbm cfg | grep -i audit

步骤2:启用审计功能

bash
# 启用审计功能
db2 update dbm cfg using AUDIT_BUF_SZ 1024
db2 update dbm cfg using AUDIT_BUF_FLUSH_TIME 10
db2 update dbm cfg using AUDIT_SYSLOG_TYPE USER
db2stop forcedb2start

配置审计日志

审计日志类型

DB2 支持两种审计日志类型:

  • 文件审计日志:审计记录存储到文件中
  • 表审计日志:审计记录存储到数据库表中

配置文件审计日志

bash
# 配置文件审计日志
db2audit configure datapath <审计日志路> mode normal

# 示例:
db2audit configure datapath /home/db2inst1/auditlogs mode normal

配置表审计日志

bash
# 创建审计表空间
CREATE TABLESPACE audit_ts PAGESIZE 8 K MANAGED BY AUTOMATIC STORAGE CONTAINERS (FILE 'audit_ts' 100 M);

# 配置表审计日志
db2audit configure mode normal trailsize 1000 tables audit_ts

审计策略管理

创建审计策略

语法

sql
CREATE AUDIT POLICY <审计策略名>
  CATEGORIES <审计类别> STATUS <状态>
  [ERROR TYPE <错误处理类型>]
  [WHEN <条件>]

示例:创建连接审计策略

sql
CREATE AUDIT POLICY connect_policy
  CATEGORIES CONTEXT STATUS BOTH
  ERROR TYPE AUDIT

示例:创建语句审计策略

sql
CREATE AUDIT POLICY statement_policy
  CATEGORIES EXECUTE STATUS BOTH
  ERROR TYPE AUDIT
  WHEN CONTEXT.AUTHID = 'ADMIN'

示例:创建对象审计策略

sql
CREATE AUDIT POLICY object_policy
  CATEGORIES OBJECT STATUS BOTH
  ERROR TYPE AUDIT

将审计策略应用到对象

应用到数据库

sql
AUDIT DATABASE USING POLICY <审计策略名>

应用到表

sql
AUDIT TABLE <表名> USING POLICY <审计策略名>

应用到用户

sql
AUDIT ROLE <角色名> USING POLICY <审计策略名>

查看审计策略

bash
# 列出所有审计策略
db2audit list policies

# 查看特定审计策略
db2audit describe policy <审计策略>

修改和删除审计策略

修改审计策略

sql
ALTER AUDIT POLICY <审计策略名>
  CATEGORIES <审计类别> STATUS <状态>

删除审计策略

sql
DROP AUDIT POLICY <审计策略名>

审计数据管理

查看审计数据

查看文件审计日志

bash
# 提取审计日志
db2audit extract file <输出文> from <审计日志路>

# 格式化审计日志
db2audit flush
cat <输出文> | db2audit format

查看表审计日志

sql
# 查询审计表
SELECT * FROM SYSTOOLS.AUDIT_RECORDS WHERE EVENT_TIMESTAMP > CURRENT TIMESTAMP - 1 DAY

审计数据清理

清理文件审计日志

bash
# 清理旧的审计日志文件
find <审计日志路> -name "*.audit" -mtime +30 -delete

清理表审计日志

sql
# 创建审计清理存储过程
CREATE PROCEDURE CLEAN_AUDIT_RECORDS(IN retention_days INT)
BEGIN
  DELETE FROM SYSTOOLS.AUDIT_RECORDS WHERE EVENT_TIMESTAMP < CURRENT TIMESTAMP - retention_days DAYS;
END

# 调用存储过程清理审计记录
CALL CLEAN_AUDIT_RECORDS(30)

审计数据备份

bash
# 备份审计日志文件
cp -r <审计日志路> <备份路>

审计监控和告警

实时监控审计数据

使用db2audit工具

bash
# 实时监控审计事件
db2audit stream

使用第三方监控工具

  • IBM Data Server Manager
  • Splunk
  • ELK Stack (Elasticsearch, Logstash, Kibana)

配置审计告警

bash
# 配置审计告警脚本
#!/bin/bash

# 检查审计日志中的异常事件
audit_log=$(db2audit extract file /tmp/audit_log from /home/db2inst1/auditlogs)

grep -i "failed" /tmp/audit_log
if [ $? -eq 0 ]; then
  # 发送告警邮件
  echo "发现异常审计事件,请查看审计日志" | mail -s "DB2 审计告警" admin@example.com
fi

审计最佳实践

1. 审计策略设计

  • 最小权限原则:只审计必要的活动,避免审计过多数据
  • 分层审计:根据对象重要性设置不同的审计级别
  • 定期审查:定期审查审计策略,确保其有效性
  • 测试审计:在生产环境实施前,先在测试环境测试审计策略

2. 审计日志管理

  • 安全存储:确保审计日志安全存储,防止篡改
  • 定期备份:定期备份审计日志
  • 合理保留期限:根据合规要求和业务需求,设置合理的审计日志保留期限
  • 定期清理:定期清理过期的审计日志

3. 审计数据分析

  • 定期分析:定期分析审计数据,识别异常行为
  • 建立基线:建立正常行为基线,便于检测异常
  • 自动化分析:使用自动化工具分析审计数据
  • 及时响应:对异常事件及时响应

4. 合规性

  • 了解合规要求:了解行业法规和标准的审计要求
  • 文档化:记录审计策略和审计过程
  • 定期审计:定期进行合规审计
  • 持续改进:根据审计结果,持续改进安全策略

版本差异

DB2版本审计功能差异
10.5支持基本的审计功能,包括文件审计日志和表审计日志
11.1增强了审计功能,支持更细粒度的审计策略
11.5引入了更强大的审计功能,支持审计策略的条件表达式
11.5.8+增强了审计性能,支持更多审计事件类型

生产实践

1. 审计策略示例

连接审计策略

sql
CREATE AUDIT POLICY connect_audit
  CATEGORIES CONTEXT STATUS BOTH
  ERROR TYPE AUDIT
AUDIT DATABASE USING POLICY connect_audit

特权用户审计策略

sql
CREATE AUDIT POLICY privileged_audit
  CATEGORIES EXECUTE, OBJECT, SECMAINT STATUS BOTH
  ERROR TYPE AUDIT
  WHEN CONTEXT.AUTHID IN ('SYSADM', 'DBADM')
AUDIT ROLE DBADM USING POLICY privileged_audit

敏感数据审计策略

sql
CREATE AUDIT POLICY sensitive_data_audit
  CATEGORIES OBJECT STATUS BOTH
  ERROR TYPE AUDIT
AUDIT TABLE sensitive_table USING POLICY sensitive_data_audit

2. 审计监控示例

使用Splunk监控审计日志

  1. 配置Splunk Forwarder收集DB2审计日志
  2. 创建Splunk仪表盘,展示审计事件统计
  3. 配置告警规则,检测异常审计事件

使用ELK Stack监控审计日志

  1. 配置Logstash收集DB2审计日志
  2. 使用Elasticsearch存储审计数据
  3. 使用Kibana创建审计数据可视化

3. 审计报告示例

连接审计报告

日期用户名客户端IP连接状态持续时间
2023-06-01user1192.168.1.100成功3600秒
2023-06-01user2192.168.1.101失败0秒

语句审计报告

日期用户名SQL语句执行状态影响行数
2023-06-01user1SELECT * FROM sensitive_table成功100行
2023-06-01user2DELETE FROM important_table失败0行

常见问题(FAQ)

Q1: 如何启用DB2审计功能?

A1: 启用DB2审计功能的步骤:

  1. 配置审计参数:db2 update dbm cfg using AUDIT_BUF_SZ 1024
  2. 配置审计日志:db2audit configure datapath <审计日志路径> mode normal
  3. 创建审计策略:CREATE AUDIT POLICY <审计策略名> CATEGORIES <审计类别> STATUS BOTH
  4. 应用审计策略:AUDIT DATABASE USING POLICY <审计策略名>

Q2: 审计功能会影响数据库性能吗?

A2: 审计功能会对数据库性能产生一定影响,影响程度取决于:

  • 审计策略的复杂度
  • 要审计的活动数量
  • 审计日志的存储方式

建议:

  • 只审计必要的活动
  • 合理配置审计缓冲区大小
  • 定期清理审计日志

Q3: 如何查看审计日志?

A3: 查看审计日志的方法:

  • 文件审计日志db2audit extract file <输出文件> from <审计日志路径>; cat <输出文件> | db2audit format
  • 表审计日志SELECT * FROM SYSTOOLS.AUDIT_RECORDS

Q4: 如何备份和清理审计日志?

A4: 备份和清理审计日志的方法:

  • 备份cp -r <审计日志路径> <备份路径>
  • 清理文件审计日志find <审计日志路径> -name "*.audit" -mtime +30 -delete
  • 清理表审计日志DELETE FROM SYSTOOLS.AUDIT_RECORDS WHERE EVENT_TIMESTAMP < CURRENT TIMESTAMP - 30 DAYS

Q5: 如何检测异常审计事件?

A5: 检测异常审计事件的方法:

  • 使用自动化工具(如Splunk、ELK Stack)监控审计数据
  • 建立正常行为基线,检测偏离基线的行为
  • 配置告警规则,及时通知异常事件

Q6: 审计日志可以加密吗?

A6: 是的,DB2 支持审计日志加密:

bash
# 配置加密的审计日志
db2audit configure datapath <审计日志路> mode normal encrypt key <加密密>

Q7: 如何审计特定用户的活动?

A7: 审计特定用户活动的方法:

sql
CREATE AUDIT POLICY user_audit
  CATEGORIES ALL STATUS BOTH
  ERROR TYPE AUDIT
  WHEN CONTEXT.AUTHID = 'specific_user'
AUDIT DATABASE USING POLICY user_audit

Q8: 如何审计特定表的操作?

A8: 审计特定表操作的方法:

sql
CREATE AUDIT POLICY table_audit
  CATEGORIES OBJECT STATUS BOTH
  ERROR TYPE AUDIT
AUDIT TABLE <表名> USING POLICY table_audit

Q9: 审计功能支持哪些审计类别?

A9: DB2 支持以下审计类别:

  • CONTEXT:连接和断开连接活动
  • EXECUTE:SQL语句执行
  • OBJECT:对象操作
  • SECMAINT:安全策略变更
  • VALIDATE:权限验证
  • CHECKING:检查操作

Q10: 如何关闭审计功能?

A10: 关闭审计功能的方法:

bash
# 移除所有审计策略
AUDIT DATABASE REMOVE POLICY

# 禁用审计功能
db2 update dbm cfg using AUDIT_BUF_SZ 0
db2stop forcedb2start

总结

DB2 安全审计是数据库安全体系的重要组成部分,有助于满足合规要求,提高数据库安全性。通过合理配置审计功能,定义有效的审计策略,定期分析审计数据,可以有效检测和预防安全违规行为。

在实施审计功能时,需要考虑性能影响,只审计必要的活动,合理配置审计参数。同时,需要定期备份和清理审计日志,确保审计数据的安全存储和管理。

随着数据库技术的发展,DB2 审计功能也在不断增强,提供了更细粒度的审计控制和更强大的审计分析能力。数据库管理员应该充分利用这些功能,构建完善的数据库安全审计体系。