oracle 19c默认未启用统一审计,必须执行make -f ins_rdbms.mk uniaud_on ioracle重链接并重启数据库;仅v$option返回true表示支持,非已启用,真实启用需unified_audit_trail视图存在且可查、audit_trail=none。
oracle 19c 默认不启用统一审计,哪怕 v$option 返回 true,也只是表示“支持”,不是“已启用”;跳过二进制重链接和重启,后续所有 audit policy 都不会记录任何事件。
确认 Unified Auditing 是否真启用
别只查 V$OPTION。它返回 TRUE 只说明内核编译时带了该特性,不代表运行时激活。真实状态必须分两步验证:
- 执行
SELECT value FROM V$OPTION WHERE PARAMETER = 'Unified Auditing'—— 若为FALSE,必须重链接 - 若为
TRUE,再运行SELECT * FROM UNIFIED_AUDIT_TRAIL WHERE ROWNUM = 1:
– 报ORA-00942: table or view does not exist→ 未启用(视图根本不存在)
– 返回空但无报错 → 检查SHOW PARAMETER audit_trail,值必须是NONE
启用 Unified Auditing 必须重链接 Oracle 二进制
这是硬性前提,不可跳过。19c 安装后默认是混合模式(传统 + 统一共存),纯统一审计需重新编译核心模块:
- 停库:
SHUTDOWN IMMEDIATE;停监听:lsnrctl stop - 切换到
$ORACLE_HOME/rdbms/lib,执行:make -f ins_rdbms.mk uniaud_on ioracle - 重启数据库:
STARTUP;再查V$OPTION和UNIFIED_AUDIT_TRAIL - 注意:此操作不可逆(除非再用
uniaud_off),且要求操作系统用户对$ORACLE_HOME有写权限
创建并启用审计策略的最小可行路径
启用统一审计后,策略不会自动生效,必须显式启用。常见错误是只 CREATE 不 AUDIT,或作用域写错:
- 创建策略(例如审计删表):
CREATE AUDIT POLICY drop_table_policy ACTIONS DROP ANY TABLE - 启用策略(关键!必须指定作用域):
– 全库:AUDIT POLICY drop_table_policy
– 指定用户:AUDIT POLICY drop_table_policy BY SYSTEM, DBA -
ACTIONS DROP ANY TABLE审计的是拥有该权限的用户删他人 schema 的表;删自己表需写ACTIONS DROP ON schema.table
查不到审计记录?先确认这三件事
策略启用后仍无日志,大概率卡在这三个环节:
- 目标用户是否真有
DROP ANY TABLE权限?查:SELECT * FROM dba_sys_privs WHERE privilege = 'DROP ANY TABLE' AND grantee = 'USERNAME' - 删表操作是否触发了该权限?例如
DROP TABLE hr.employees是,DROP TABLE t1(自己 schema)不是 - 执行删表的会话是否属于策略启用范围?比如策略写了
BY SYSTEM,但你是用SCOTT登录执行的,就不会被记录 - 另外,查
UNIFIED_AUDIT_TRAIL必须用有READ ANY AUDIT RECORD权限的用户——SYS不行,会报错
真正启用统一审计的标志不是命令能跑通,而是 UNIFIED_AUDIT_TRAIL 视图存在、可查、且有实际记录;所有配置步骤都依赖这个底层状态,漏掉重链接,后面全是白忙。











