Oracle 19c默认为混合审计模式,统一审计需执行make -f ins_rdbms.mk uniaud_on ioracle并重启数据库才能生效;仅V$OPTION返回TRUE不代表启用,必须验证UNIFIED_AUDIT_TRAIL视图存在且AUDIT POLICY BY指定用户后才记录。

Oracle 19c 默认不启用统一审计,哪怕 V$OPTION 返回 TRUE,也只是编译支持,不是运行生效。监控特权用户(如 SYS、SYSTEM、DBA)必须完成二进制重链接 + 数据库重启,否则所有 AUDIT POLICY 都不会写入任何记录。
确认 Unified Auditing 是否真正启用
只查 V$OPTION 是无效的。真实状态必须分两步验证:
- 执行
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;若为DB或XML,说明仍处于混合模式,统一审计被压制
- 报
必须执行 make -f ins_rdbms.mk uniaud_on ioracle
这是不可跳过的硬性步骤。19c 安装后默认是混合模式,纯统一审计依赖内核模块加载。跳过这步,CREATE AUDIT POLICY 能成功,但策略永不触发——没有后台进程监听事件。
- 停库:
SHUTDOWN IMMEDIATE;停监听:lsnrctl stop - 切换到
$ORACLE_HOME/rdbms/lib目录,执行:make -f ins_rdbms.mk uniaud_on ioracle - 重启数据库:
STARTUP;再验证V$OPTION和UNIFIED_AUDIT_TRAIL - 注意:
uniaud_on不可逆(除非再跑uniaud_off),且要求 OS 用户对$ORACLE_HOME有写权限
创建并启用针对特权用户的审计策略
策略创建后不会自动生效,必须显式 AUDIT POLICY,且作用域必须匹配实际登录身份。
- 创建策略(例如审计所有 DDL 和登录行为):
CREATE AUDIT POLICY priv_user_policy ACTIONS LOGON, LOGOFF, CREATE ANY TABLE, DROP ANY TABLE, ALTER ANY TABLE - 启用策略(关键!只审计指定用户):
AUDIT POLICY priv_user_policy BY SYS, SYSTEM, DBA - 注意:
BY DBA表示审计拥有DBA角色的用户,不是角色名本身;若用户通过GRANT DBA TO scott获得权限,则scott的操作会被捕获 - 删自己 schema 的表(如
DROP TABLE t1)不触发DROP ANY TABLE,需额外加ACTIONS DROP ON schema.table或用ACTIONS ALL
查不到日志?先盯住这三个点
策略启用后无记录,90% 是卡在这三个环节:
- 目标用户是否真有对应权限?查:
SELECT * FROM dba_sys_privs WHERE privilege IN ('DROP ANY TABLE', 'CREATE ANY TABLE') AND grantee = 'SYSTEM' - 操作是否命中策略条件?例如
LOGON策略只捕获新会话建立,不捕获已存在会话内的操作 - 执行操作的会话是否属于策略作用域?比如策略写了
BY SYS, SYSTEM,但你是用SCOTT登录执行CREATE TABLE,而SCOTT没被包含在BY列表中,就不会记录
统一审计的策略定义虽可通过 Redo 同步到备库,但主备必须各自完成重链接和重启,否则备库的 UNIFIED_AUDIT_TRAIL 查不到任何内容——这点在 Data Guard 环境下极易被忽略。


















