oracle 19c中dbms_fga与统一审计并行独立,fga策略由dbms_fga管理、不走unified_auditing管道;其触发依赖物理读取被审计列,且audit_column须大小写精确、不可为空或通配。
oracle 19c 的细粒度审计(dbms_fga)和统一审计(unified auditing)是两套独立机制,不能混用配置逻辑——dbms_fga 不走统一审计管道,也不受 audit policy 控制;启用统一审计后,fga 日志默认写入 unified_audit_trail,但策略本身仍由 dbms_fga 管理。
DBMS_FGA 和 UNIFIED_AUDITING 是并行关系,不是上下级
很多人以为“开了统一审计,FGA 就自动归入它”,这是典型误解。统一审计管的是 DDL、DML、权限变更等系统级事件;DBMS_FGA 专用于监控 SELECT 对特定列的访问,底层触发机制完全不同:它依赖优化器执行路径是否物理读取被审计列,与统一审计的 audit policy 完全无关。
关键事实:
-
DBMS_FGA.ADD_POLICY成功后,策略记录在DBA_AUDIT_POLICIES,不进UNIFIED_AUDIT_POLICIES - 日志去向取决于数据库配置:
– 若AUDIT_TRAIL = DB或DB, EXTENDED,FGA 记录写入DBA_FGA_AUDIT_TRAIL
– 若已启用纯统一审计(UNIFIED_AUDIT_TRAIL可查且非空),FGA 日志默认落UNIFIED_AUDIT_TRAIL,DBA_FGA_AUDIT_TRAIL可能为空 -
SHOW PARAMETER audit_trail返回NONE时,DBMS_FGA会直接失效(连策略都加不上)
audit_column 必须大小写精确、不可为空、不支持通配符
DBMS_FGA.ADD_POLICY 的 audit_column 参数不是过滤条件,而是“触发开关”:只要 SELECT 语句中显式引用了其中任一列(哪怕只做 SELECT salary FROM emp),策略就激活。
常见错误:
- 表定义列名为
SALARY,却传'salary'→ 策略加载成功但永不触发 - 传空字符串或
NULL→ Oracle 不报错,但DBA_AUDIT_POLICIES查不到该策略 - 想覆盖所有列,写成
'*'或'ALL'→ 无效,必须显式列出,如'SALARY,SSN,ID_NUMBER'
验证方法:SELECT object_schema, object_name, audit_column FROM dba_audit_policies WHERE policy_name = 'YOUR_POLICY';
确保返回值与表实际列名完全一致(含大小写)。
FGA 不触发?先看执行计划是否真读了被审计列
DBMS_FGA 是“物理访问审计”,不是“语法审计”。优化器若通过索引跳过被审计列,FGA 就不会记录——这不是 bug,是设计使然。
典型静默失效场景:
-
WHERE name = 'SMITH'走非唯一索引,SALARY列未被回表读取 → 不触发 -
SELECT * FROM emp WHERE name = 'X'→ 若name有唯一索引,可能只读索引叶块,SALARY未触达
测试必须强制访问列:
-
SELECT salary FROM emp WHERE rownum = 1(强制全表扫描) SELECT /*+ FULL(emp) */ salary FROM emp WHERE name = 'X'- 确认执行计划含
TABLE ACCESS FULL或INDEX FAST FULL SCAN
统一审计启用状态直接影响 FGA 日志可见性
即使 DBMS_FGA 策略正确、查询也真读了列,日志也可能“看不见”——因为统一审计没真正启用。
排查顺序:
- 运行
SELECT * FROM UNIFIED_AUDIT_TRAIL WHERE ROWNUM = 1;
– 报ORA-00942→ 统一审计未激活,FGA 日志只能查DBA_FGA_AUDIT_TRAIL
– 返回空但无错 → 检查SHOW PARAMETER audit_trail,值不能是NONE - 若
UNIFIED_AUDIT_TRAIL可查,但 FGA 日志不在其中,检查是否在 CDB/PDB 架构下建错了容器:
–DBMS_FGA.ADD_POLICY必须在目标 PDB 内执行
–object_schema必须是该 PDB 内存在的 schema 名
最易忽略的一点:你看到的“审计生效”,可能只是传统审计路径在工作;而你以为关闭了传统审计(audit_trail=NONE),其实只是让 FGA 失效——因为 FGA 依赖传统审计基础设施启动。











