本文档风哥主要介绍Oracle数据库PDB审计相关知识,包括PDB审计的概念、方法、要求、规划、配置、验证等内容,由风哥教程参考Oracle官方文档Multitenant内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 PDB审计的概念
Oracle数据库PDB审计是指在多租户容器数据库(CDB)中对PDB级别的操作进行审计,包括标准审计、精细审计、统一审计等。PDB审计可以实现PDB级别的操作审计,提高安全性。PDB审计包括标准审计、精细审计、统一审计、审计策略、审计报告等组件。更多视频教程www.fgedu.net.cn
- 支持PDB级别的操作审计
- 支持标准审计
- 支持精细审计
- 支持统一审计
- 提高安全性
1.2 PDB审计的方法
Oracle数据库PDB审计的方法:
- 标准审计:使用标准审计功能
- 精细审计:使用精细审计功能
- 统一审计:使用统一审计功能
- 审计策略:配置审计策略
- 审计报告:生成审计报告
1.3 PDB审计的要求
Oracle数据库PDB审计的要求:
- PDB架构:必须在PDB架构中配置审计
- 系统资源:足够的CPU、内存和磁盘空间
- 权限:需要PDB的DBA权限
- 兼容性:Oracle数据库版本必须支持PDB审计
- 配置:需要配置适当的参数和选项
Part02-生产环境规划与建议
2.1 PDB审计规划
Oracle数据库PDB审计规划要点:
1. 分析业务需求
2. 评估系统资源
3. 设计PDB审计方案
4. 规划PDB审计架构
5. 规划审计策略
6. 规划审计报告
7. 测试和验证
# 适用场景
– 多租户数据库
– 需要PDB级别操作审计的系统
– 需要标准审计的系统
– 需要精细审计的系统
– 需要提高安全性的系统
# 不适用场景
– 单租户数据库
– PDB审计需求简单的系统
– 低管理需求系统
2.2 PDB审计设计
Oracle数据库PDB审计设计建议:
– 基于业务需求设计
– 基于资源需求设计
– 最小化审计开销
– 最大化安全性
– 合理配置参数
# PDB审计设计策略
– 合理规划PDB审计架构
– 配置适当的审计策略
– 配置适当的审计选项
– 配置适当的审计报告
– 配置适当的审计监控
# 设计步骤
1. 分析业务需求
2. 评估系统资源
3. 设计PDB审计方案
4. 规划PDB审计架构
5. 测试PDB审计效果
6. 调整配置
2.3 PDB审计最佳实践
Oracle数据库PDB审计最佳实践:
- 规划PDB审计架构:根据业务需求规划PDB审计架构,最小化审计开销
- 配置审计策略:为PDB配置合理的审计策略
- 监控审计记录:监控审计记录使用情况,及时发现和处理问题
- 定期审计:定期审计审计记录,确保数据安全
- 设置安全告警:设置安全告警,及时发现安全问题
- 定期review:定期review审计配置,优化管理策略
Part03-生产环境项目实施方案
3.1 PDB审计实施
3.1.1 配置标准审计
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;
CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE
# 切换到PDB
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 查看审计参数
SQL> SHOW PARAMETER audit
NAME TYPE VALUE
———————————— ———– ——————————
audit_file_dest string /oracle/app/oracle/admin/orclcdb/adump
audit_sys_operations boolean TRUE
audit_trail string DB
# 配置标准审计
SQL> AUDIT SESSION BY fgfgfgsales_user;
Audit succeeded.
SQL> AUDIT TABLE BY fgfgfgsales_user BY ACCESS;
Audit succeeded.
SQL> AUDIT UPDATE, DELETE ON fgfgfgsales.orders BY fgfgfgsales_user;
Audit succeeded.
# 查看审计选项
SQL> SELECT user_name, audit_option, success, failure FROM dba_audit_trail_options WHERE user_name = ‘SALES_USER’ ORDER BY user_name, audit_option;
USER_NAME AUDIT_OPTION SUCCESS FAILURE
———– —————- ——— ———
SALES_USER SESSION BY ACCESS BY ACCESS
SALES_USER TABLE BY ACCESS BY ACCESS
SALES_USER UPDATE ON ORDERS BY ACCESS BY ACCESS
SALES_USER DELETE ON ORDERS BY ACCESS BY ACCESS
# 验证标准审计配置成功
3.1.2 配置精细审计
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 创建精细审计策略
SQL> BEGIN
DBMS_FGA.ADD_POLICY(
object_schema => ‘SALES’,
object_name => ‘ORDERS’,
policy_name => ‘ORDERS_FGA_POLICY’,
audit_condition => ‘TOTAL_AMOUNT > 10000’,
audit_column => ‘TOTAL_AMOUNT’,
handler_schema => NULL,
handler_module => NULL,
enable => TRUE
);
END;
/
PL/SQL procedure successfully completed.
# 查看精细审计策略
SQL> SELECT object_schema, object_name, policy_name, enabled FROM dba_audit_policies WHERE object_schema = ‘SALES’ AND object_name = ‘ORDERS’;
OBJECT_SCHEMA OBJECT_NAME POLICY_NAME ENABLED
————- ———— —————— ——–
SALES ORDERS ORDERS_FGA_POLICY YES
# 验证精细审计配置成功
3.2 PDB审计配置
3.2.1 配置统一审计
SQL> ALTER SESSION SET CONTAINER = cdb$root;
Session altered.
# 查看统一审计状态
SQL> SELECT value FROM v$option WHERE parameter = ‘Unified Auditing’;
VALUE
——
FALSE
# 配置统一审计
SQL> ALTER SYSTEM SET AUDIT_TRAIL = ‘DB, EXTENDED’ SCOPE = SPFILE;
System altered.
# 重启数据库
SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP;
ORACLE instance started.
Total System Global Area 838860800 bytes
Fixed Size 9139560 bytes
Variable Size 536870912 bytes
Database Buffers 285212672 bytes
Redo Buffers 7637656 bytes
Database mounted.
Database opened.
# 查看统一审计状态
SQL> SELECT value FROM v$option WHERE parameter = ‘Unified Auditing’;
VALUE
——
TRUE
# 验证统一审计配置成功
3.2.2 配置审计策略
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 创建审计策略
SQL> CREATE AUDIT POLICY fgfgfgsales_audit_policy
PRIVILEGES CREATE SESSION, CREATE TABLE, DROP TABLE
ACTIONS UPDATE ON fgfgfgsales.orders, DELETE ON fgfgfgsales.orders
WHEN ‘SYS_CONTEXT(”USERENV”, ”SESSION_USER”) = ”SALES_USER”’
EVALUATE EVERY;
Audit policy created.
# 启用审计策略
SQL> AUDIT POLICY fgfgfgsales_audit_policy;
Audit succeeded.
# 查看审计策略
SQL> SELECT policy_name, policy_name, enabled FROM dba_audit_policies WHERE policy_name = ‘SALES_AUDIT_POLICY’;
POLICY_NAME POLICY_NAME ENABLED
—————— —————— ——–
SALES_AUDIT_POLICY SALES_AUDIT_POLICY YES
# 验证审计策略配置成功
3.3 PDB审计验证
3.3.1 验证标准审计
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 测试标准审计
$ sqlplus fgfgfgsales_user/”NewSales123#”@fgfgfgsalespdb
SQL*Plus: Release 19.0.0.0.0 – Production on Fri Mar 31 10:00:00 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.3.0.0.0
SQL> SHOW USER;
USER is “SALES_USER”
SQL> CREATE TABLE test_audit (
id NUMBER,
name VARCHAR2(100)
);
Table created.
SQL> INSERT INTO test_audit (id, name) VALUES (1, ‘Audit Test’);
1 row created.
SQL> COMMIT;
Commit complete.
# 查看审计记录
SQL> SELECT username, action_name, obj_name, timestamp FROM dba_audit_trail WHERE username = ‘SALES_USER’ ORDER BY timestamp DESC FETCH FIRST 10 ROWS ONLY;
USERNAME ACTION_NAME OBJ_NAME TIMESTAMP
————– ————– ———— ——————-
SALES_USER CREATE TABLE TEST_AUDIT 31-MAR-26 10:00:00
SALES_USER LOGON 31-MAR-26 10:00:00
# 验证标准审计成功
3.3.2 验证精细审计
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
# 测试精细审计
SQL> UPDATE fgfgfgsales.orders SET total_amount = 15000 WHERE order_id = 1;
1 row updated.
SQL> COMMIT;
Commit complete.
# 查看精细审计记录
SQL> SELECT db_user, object_name, policy_name, sql_text FROM dba_fga_audit_trail WHERE db_user = ‘SALES_USER’ ORDER BY timestamp DESC FETCH FIRST 10 ROWS ONLY;
DB_USER OBJECT_NAME POLICY_NAME SQL_TEXT
——– ———— —————— ——————————
SALES_USER ORDERS ORDERS_FGA_POLICY UPDATE fgfgfgsales.orders SET total_amount = 15000 WHERE order_id = 1
# 验证精细审计成功
Part04-生产案例与实战讲解
4.1 PDB审计案例
在某企业的生产环境中,需要配置PDB审计。
– 数据库版本:Oracle 19c
– 系统规模:中等规模,日交易量100万
– 需求:配置PDB审计
# 实施方案
1. 查看PDB
SQL> SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;
CON_ID NAME OPEN_MODE
—— ——— ———-
2 PDB$SEED READ ONLY
3 SALESPDB READ WRITE
4 HRPDB READ WRITE
5 APP_ROOT READ WRITE
6 APP_PDB1 READ WRITE
2. 切换到PDB
SQL> ALTER SESSION SET CONTAINER = fgfgfgsalespdb;
Session altered.
3. 配置标准审计
SQL> AUDIT SESSION BY fgfgfgsales_user;
Audit succeeded.
4. 配置精细审计
SQL> BEGIN
DBMS_FGA.ADD_POLICY(
object_schema => ‘SALES’,
object_name => ‘ORDERS’,
policy_name => ‘ORDERS_FGA_POLICY’,
audit_condition => ‘TOTAL_AMOUNT > 10000’,
audit_column => ‘TOTAL_AMOUNT’,
enable => TRUE
);
END;
/
PL/SQL procedure successfully completed.
5. 验证审计配置
SQL> SELECT user_name, audit_option FROM dba_audit_trail_options WHERE user_name = ‘SALES_USER’;
USER_NAME AUDIT_OPTION
———– —————-
SALES_USER SESSION
# 实施效果
– 成功配置PDB审计
– 标准审计正常
– 精细审计正常
– 审计记录正常
– 安全性提高
4.2 PDB审计优化案例
在某金融机构的生产环境中,需要优化PDB审计,提高性能。
– 数据库版本:Oracle 19c
– 系统规模:大规模,日交易量1000万
– 问题:PDB审计需要优化
# 优化方案
1. 查看审计配置
SQL> SELECT user_name, audit_option FROM dba_audit_trail_options WHERE user_name = ‘SALES_USER’;
USER_NAME AUDIT_OPTION
———– —————-
SALES_USER SESSION
SALES_USER TABLE
SALES_USER UPDATE ON ORDERS
SALES_USER DELETE ON ORDERS
2. 优化审计配置
SQL> NOAUDIT TABLE BY fgfgfgsales_user;
Noaudit succeeded.
SQL> NOAUDIT UPDATE, DELETE ON fgfgfgsales.orders BY fgfgfgsales_user;
Noaudit succeeded.
3. 配置精细审计
SQL> BEGIN
DBMS_FGA.ADD_POLICY(
object_schema => ‘SALES’,
object_name => ‘ORDERS’,
policy_name => ‘ORDERS_FGA_POLICY’,
audit_condition => ‘TOTAL_AMOUNT > 100000’,
audit_column => ‘TOTAL_AMOUNT’,
enable => TRUE
);
END;
/
PL/SQL procedure successfully completed.
4. 验证优化效果
SQL> SELECT user_name, audit_option FROM dba_audit_trail_options WHERE user_name = ‘SALES_USER’;
USER_NAME AUDIT_OPTION
———– —————-
SALES_USER SESSION
# 优化效果
– 审计配置优化
– 审计开销降低
– 性能提高
– 安全性保持
4.3 PDB审计问题处理
在某电商网站的生产环境中,PDB审计出现问题,需要处理。
– 审计记录过多
– 审计性能下降
– 审计存储空间不足
# 分析步骤
1. 查看审计记录
SQL> SELECT COUNT(*) FROM dba_audit_trail;
COUNT(*)
———-
1000000
2. 查看审计配置
SQL> SELECT user_name, audit_option FROM dba_audit_trail_options WHERE user_name = ‘SALES_USER’;
USER_NAME AUDIT_OPTION
———– —————-
SALES_USER SESSION
SALES_USER TABLE
SALES_USER UPDATE ON ORDERS
SALES_USER DELETE ON ORDERS
SALES_USER INSERT ON ORDERS
SALES_USER SELECT ON ORDERS
3. 查看审计存储空间
SQL> SELECT segment_name, bytes/1024/1024 size_mb FROM dba_segments WHERE segment_name = ‘AUD$’;
SEGMENT_NAME SIZE_MB
————- ———-
AUD$ 500
# 问题原因
– 审计配置过于详细
– 审计记录过多
– 审计存储空间不足
# 解决方案
1. 清理审计记录
SQL> DELETE FROM sys.audit$ WHERE ntimestamp# < SYSDATE - 30;
1000000 rows deleted.
SQL> COMMIT;
Commit complete.
2. 优化审计配置
SQL> NOAUDIT TABLE BY fgfgfgsales_user;
Noaudit succeeded.
SQL> NOAUDIT INSERT, SELECT ON fgfgfgsales.orders BY fgfgfgsales_user;
Noaudit succeeded.
3. 配置审计清理
SQL> BEGIN
DBMS_AUDIT_MGMT.init_cleanup(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
default_cleanup_interval => 12
);
END;
/
PL/SQL procedure successfully completed.
4. 验证解决效果
SQL> SELECT COUNT(*) FROM dba_audit_trail;
COUNT(*)
———-
0
# 解决效果
– 审计记录清理成功
– 审计配置优化
– 审计性能恢复
– 存储空间释放
Part05-风哥经验总结与分享
5.1 PDB审计经验
Oracle数据库PDB审计经验:
- 规划PDB审计架构:根据业务需求规划PDB审计架构,最小化审计开销
- 配置审计策略:为PDB配置合理的审计策略
- 监控审计记录:监控审计记录使用情况,及时发现和处理问题
- 定期审计:定期审计审计记录,确保数据安全
- 设置安全告警:设置安全告警,及时发现安全问题
- 定期review:定期review审计配置,优化管理策略
5.2 PDB审计检查清单
– [ ] 检查系统资源
– [ ] 检查PDB架构
– [ ] 检查审计需求
– [ ] 检查审计配置
– [ ] 检查审计策略
– [ ] 检查审计记录
– [ ] 规划PDB审计架构
– [ ] 配置标准审计
– [ ] 配置精细审计
– [ ] 验证审计功能
# PDB审计问题处理流程
1. 检查系统资源
2. 检查PDB架构
3. 检查审计需求
4. 规划PDB审计架构
5. 配置标准审计
6. 配置精细审计
7. 验证审计功能
8. 处理审计问题
9. 优化配置
10. 监控审计记录使用情况
5.3 PDB审计工具
Oracle数据库PDB审计常用工具:
- SQL*Plus:SQL命令行工具,用于执行SQL命令
- Oracle Enterprise Manager:图形化管理工具,用于监控和管理数据库
- SQL Developer:SQL开发工具,用于开发和调试SQL
- Oracle Audit Vault:Oracle审计库,用于审计管理
- Oracle Data Masking:Oracle数据脱敏,用于数据保护
- Oracle Security Manager:Oracle安全管理器,用于安全管理
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
