统一审计必须启用才能生效,Oracle 19c默认未激活,需执行make -f ins_rdbms.mk uniaud_on ioracle并重启;仅V$OPTION返回TRUE不代表已启用,须验证UNIFIED_AUDIT_TRAIL可查且audit_trail为NONE。
统一审计必须启用,否则所有策略无效
oracle 19c 默认不启用统一审计,v$option 返回 true 只表示“支持”,不代表已激活。真正生效必须执行二进制重链接并重启数据库:make -f ins_rdbms.mk uniaud_on ioracle,否则 audit policy 创建了也完全不记录。
验证是否真正启用,只看两件事:
-
SELECT value FROM V$OPTION WHERE PARAMETER = 'Unified Auditing'返回TRUE -
SELECT * FROM UNIFIED_AUDIT_TRAIL WHERE ROWNUM = 1不报ORA-00942,且SHOW PARAMETER audit_trail返回NONE
监控SYS需用预定义策略或自建策略,不能靠标准审计
标准审计(AUDIT GRANT ANY PRIVILEGE 等)对 SYS 无效——Oracle 为 SYS 绕过标准审计机制。唯一可靠路径是统一审计。
推荐优先启用预定义策略:ORA_SECURECONFIG 已包含 SYS 相关操作(如登录、DDL、权限变更),直接查 UNIFIED_AUDIT_TRAIL 即可:
SELECT event_timestamp, action_name, object_schema, object_name, sql_text FROM UNIFIED_AUDIT_TRAIL WHERE user_name = 'SYS' AND ROWNUM <= 10;
若需定制,建策时注意:
-
ACTIONS LOGON, DDL, ALTER SYSTEM, EXECUTE覆盖常见高危行为 -
AUDIT POLICY sys_monitor_policy BY SYS显式指定用户,避免漏掉本地连接 - 不要写
BY ALL USERS,否则日志爆炸且难过滤
本地连接(/ AS SYSDBA)的审计盲区必须补上
SYS 通过 sqlplus / as sysdba 登录时,user_name 在 UNIFIED_AUDIT_TRAIL 中可能为空或显示为 ORACLE,不是 SYS。这是 Oracle 的设计行为,不是配置错误。
绕过该限制的实操方法:
- 在策略中加入
ACTIONS LOGON,并配合CONTEXT条件(需提前启用ENABLE AUDITING) - 查
UNIFIED_AUDIT_TRAIL时加条件:client_program_name LIKE '%sqlplus%' AND return_code != 0(失败登录也常暴露意图) - 搭配系统级日志:Linux 的
auditd记录/u01/app/oracle/product/19c/dbhome_1/bin/oracle进程调用,补全上下文
触发器不能替代审计,尤其对SYS
有人想用 LOGON 触发器拦截或记录 SYS 行为,但这是危险且无效的:
-
SYS登录时触发器根本不会执行(Oracle 特权路径绕过) - 即使对其他 DBA 用户启用,
ORA_CLIENT_IP_ADDRESS在本地连接下为NULL,ORA_SYS_CONTEXT('USERENV', 'HOST')也可能不可靠 - 触发器无法捕获后台进程、RMAN、Data Pump 等非会话级操作
真正要盯住 SYS,唯一正解是统一审计 + 外部进程日志交叉比对。别省那一步重链接,也别信“建个触发器就完事”这种方案。


















