Oracle Unified Auditing 要求 COMPATIBLE ≥ 12.0.0,否则启动报 ORA-65133;需通过 V$OPTION 确认支持,再 relink 启用,创建策略后须 AUDIT POLICY 激活,并授 READ ANY AUDIT RECORD 权限方可查询。
Oracle Unified Auditing 为什么必须先检查 COMPATIBLE 参数
启用 unified auditing 前,compatible 必须 ≥ 12.0.0,否则启动数据库时会报错 ora-65133: unified auditing is not supported in this container。这不是安装问题,而是内核级限制——低于该版本的 oracle 根本不加载 unified audit trail 相关组件。
检查方式:
SELECT VALUE FROM V$PARAMETER WHERE NAME = 'compatible';如果返回
11.2.0.4.0 或更低,必须先升级数据库或修改参数(需停库 + STARTUP UPGRADE + ALTER SYSTEM SET COMPATIBLE='12.0.0' SCOPE=SPFILE;)。
- 修改
COMPATIBLE后不能回退,确认前务必评估依赖老特性(如某些 Data Pump 行为)的应用 - 即使数据库是 12c/19c/21c,RAC 中某个节点未同步 SPFILE 也可能导致部分实例启动失败
- 12.1 默认仍使用传统审计(
audit_trail=DB),Unified 不是自动激活的
如何确认当前是否已启用 Unified Auditing
不能只看 AUDIT_TRAIL 参数值——它在 Unified 模式下恒为 DB 或 OS,无实际意义。真正判断依据是内核编译选项和运行时状态:
执行:
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';返回
TRUE 表示支持;再查SELECT * FROM V$UNIFIED_AUDIT_TRAIL WHERE ROWNUM = 1;若报
ORA-00942: table or view does not exist,说明虽支持但未启用(即未链接 uniaud_on)。
- Linux/Unix 下启用需 relink:用 oracle 用户执行
$ORACLE_HOME/bin/rsi -u(12c)或$ORACLE_HOME/rdbms/lib/configure_uniaud.sh(19c+) - Windows 无需 relink,但必须以管理员身份运行
oradim -edit -sv service_name -a TRUE - 启用后必须重启数据库,
ALTER SYSTEM SET AUDIT_TRAIL=UNIFIED SCOPE=SPFILE是无效命令
审计所有用户操作:不要直接建 UNIFIED AUDIT POLICY
想捕获 SELECT/INSERT/UPDATE/DELETE 等 DML,很多人会写:
CREATE AUDIT POLICY all_dml_policy ACTIONS ALL;这只会审计当前会话显式执行的 DML,对应用连接池中复用的 session、PL/SQL 包内隐式调用完全无效。
真正覆盖全部操作的方式是启用预定义策略:
AUDIT_POLICY ORA_SECURECONFIG它包含 87 条规则,涵盖登录、DDL、DML、权限变更等核心行为。若需更细粒度,应组合使用:
AUDIT_POLICY my_full_audit POLICIES ORA_SECURECONFIG, ORA_LOGON_FAILURES
-
ACTIONS ALL不包含LOGON,必须单独加ACTIONS LOGON才能记录登录事件 - 审计策略默认不激活,创建后必须显式
AUDIT POLICY my_full_audit;(注意不是ENABLE) - 对 SYS 用户,默认不审计其操作,需额外执行
AUDIT POLICY my_full_audit WHENEVER NOT SUCCESSFUL;并设置UNIFIED_AUDIT_SUCCEEDED隐含参数
查不到审计记录?优先检查 DBA_COMMON_AUDIT_TRAIL 和权限
启用 Unified Auditing 后,日志写入 UNIFIED_AUDIT_TRAIL(数据字典视图),而非旧的 DBA_AUDIT_TRAIL。但普通用户查 UNIFIED_AUDIT_TRAIL 会提示无权限,因为该视图底层基于 DBA_COMMON_AUDIT_TRAIL,而后者要求 SELECT ANY DICTIONARY 或 READ ANY AUDIT RECORD 权限。
安全做法是创建专用只读角色:
CREATE ROLE audit_reader;<br>GRANT READ ANY AUDIT RECORD TO audit_reader;<br>GRANT audit_reader TO audit_analyst;
-
UNIFIED_AUDIT_TRAIL默认只保留 90 天(受UNIFIED_AUDIT_SUCCEEDED和_unified_audit_trail_retention_days控制),超期自动 purge,不是“查不到”而是“已被删” - 高并发系统中,审计记录可能延迟数秒才可见,避免刚执行 SQL 就立刻查视图
- 若用
DBMS_AUDIT_MGMT清理过审计数据,需确认是否误清了 unified 分区(DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL默认清理所有类型)
统一审计的策略绑定、日志归档、与 Oracle Label Security 的冲突点,都藏在 relink 之后的第一次 startup 日志里——那里有最真实的线索。


















