统一审计必须先启用uniaud_on二进制模块,否则策略无效;AUDIT_TRAIL参数对其无影响;主备库须各自重链接并重启;V$OPTION中'Unified Auditing'为FALSE或V$UNIFIED_AUDIT_TRAIL查不到记录即未启用。

统一审计必须先启用二进制模块,否则任何策略都无效
在Oracle 19c Data Guard环境或单实例中,AUDIT_TRAIL参数设为DB或XML对统一审计毫无作用——统一审计不依赖该参数,而是靠uniaud_on重链接模块是否加载。没执行make -f ins_rdbms.mk uniaud_on ioracle并重启,V$UNIFIED_AUDIT_TRAIL就是空表,哪怕建了策略也查不到记录。
常见错误现象:SELECT * FROM V$UNIFIED_AUDIT_TRAIL WHERE ROWNUM = 1报ORA-00942,或返回空;SELECT value FROM V$OPTION WHERE PARAMETER = 'Unified Auditing'返回FALSE。这说明二进制模块未启用,必须主备库各自独立操作(容灾环境下缺一不可)。
创建AUDIT POLICY时必须显式指定USER_NAME条件
统一审计策略默认不绑定用户,即使你只想跟踪SCOTT的权限变更,也得在CREATE AUDIT POLICY里用WHEN 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') = ''SCOTT'''或更稳妥的AUDIT_POLICY + ROLES组合方式。直接对GRANT/REVOKE语句审计,但不加过滤,会捕获全库所有用户的操作,日志量爆炸且难定位。
实操建议:
- 优先用
AUDIT POLICY scott_priv_audit PRIVILEGES GRANT ANY PRIVILEGE, REVOKE ANY PRIVILEGE ROLES DBA, SELECT_CATALOG_ROLE WHEN 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') = ''SCOTT''' - 避免用
BY SCOTT语法——它只匹配直接登录用户,不覆盖通过SET ROLE或代理用户触发的权限变更 - 策略创建后必须
AUDIT POLICY scott_priv_audit启用,否则不生效
权限变更事件实际记录在UNIFIED_AUDIT_TRAIL中,字段名不是直觉命名
审计记录不会把“谁改了什么权限”塞进一个叫PRIVILEGE_CHANGED的字段里。真实字段是ACTION_NAME(值为GRANT或REVOKE)、OBJECT_SCHEMA(被授权对象所属schema)、SQL_TEXT(原始语句),而操作者是DBUSERNAME(非OS_USERNAME)。
容易踩的坑:
-
SQL_TEXT列类型是CLOB,直接WHERE SQL_TEXT LIKE '%SCOTT%'会报错,得用DBMS_LOB.INSTR或先转TO_CHAR -
DBUSERNAME在代理连接(如CONNECT / AS SYSDBA再ALTER SESSION SET CURRENT_SCHEMA=SCOTT)下仍是SYS,不是SCOTT,需结合PROXY_SESSIONID和V$SESSION_CONNECT_INFO关联判断 - 细粒度权限(如
GRANT SELECT ON emp TO scott)的OBJECT_NAME字段才填emp,系统权限(如GRANT CREATE TABLE TO scott)该字段为空
清理策略必须初始化且类型匹配,否则审计数据越积越多
统一审计日志默认不自动清理,DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL调用失败最常见的原因是:没先跑INIT_CLEANUP,或传了错的AUDIT_TRAIL_TYPE。混用AUDIT_TRAIL_DB会导致函数静默退出、不报错、也不删数据。
正确步骤:
- 首次启用前:运行
BEGIN DBMS_AUDIT_MGMT.INIT_CLEANUP(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, default_cleanup_interval => 24); END; - 手动清理时:明确指定
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED - 检查作业状态:
SELECT job_name, enabled FROM dba_scheduler_jobs WHERE job_name = 'CLEANUP_OS_AUDIT_JOB',确保是TRUE
真正容易被忽略的是:初始化后,DBA_AUDIT_MGMT_CONFIG_PARAMS视图才会有记录;没初始化就查这个视图,结果为空,会误判为“没配置成功”。











