You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle统一审计追踪中如何跟踪关联模块/SQL的审计日志?

Oracle统一审计追踪关联脚本/版本信息的替代方案

你之前用DBMS_APPLICATION_INFO.SET_MODULE标记脚本版本的思路没问题,但统一审计日志确实不包含Module和Action字段,下面是几个实用的替代方法,不用跨多个视图就能直接筛选关联审计日志:

1. 用客户端标识符(Client Identifier)标记

这是最直接的方案,设置后统一审计日志会直接记录该标识:

  • 脚本开头执行:
    EXEC DBMS_SESSION.SET_IDENTIFIER('RELEASE123_My_Script.sql');
    
    可以把版本和脚本名合并成一个字符串,或者用分隔符区分,比如RELEASE123|My_Script.sql
  • 筛选审计日志时,直接查询UNIFIED_AUDIT_TRAIL的CLIENT_IDENTIFIER列:
    SELECT * FROM UNIFIED_AUDIT_TRAIL
    WHERE CLIENT_IDENTIFIER = 'RELEASE123_My_Script.sql';
    

2. 自定义审计上下文(Audit Context)

如果需要同时标记多个维度的信息(比如版本、脚本名、执行人),可以用这个方法添加自定义键值对:

  • 脚本开头执行:
    BEGIN
      DBMS_AUDIT_MGMT.SET_AUDIT_CONTEXT(
        NAMES  => SYS.DBMS_AUDIT_MGMT.NAME_LIST('RELEASE_VERSION', 'SCRIPT_NAME'),
        VALUES => SYS.DBMS_AUDIT_MGMT.VALUE_LIST('RELEASE123', 'My_Script.sql')
      );
    END;
    /
    
  • 这些信息会存在UNIFIED_AUDIT_TRAIL的ADDITIONAL_INFO列(JSON格式),用JSON函数筛选:
    SELECT * FROM UNIFIED_AUDIT_TRAIL
    WHERE JSON_VALUE(ADDITIONAL_INFO, '$.RELEASE_VERSION') = 'RELEASE123'
      AND JSON_VALUE(ADDITIONAL_INFO, '$.SCRIPT_NAME') = 'My_Script.sql';
    

3. 利用会话程序名(Program)字段

如果你习惯用DBMS_APPLICATION_INFO的方式,可以改用SET_PROGRAM,这个字段会被统一审计日志捕获:

  • 脚本开头执行:
    EXEC DBMS_APPLICATION_INFO.SET_PROGRAM('RELEASE123_My_Script.sql');
    
  • 筛选时查询UNIFIED_AUDIT_TRAIL的PROGRAM列:
    SELECT * FROM UNIFIED_AUDIT_TRAIL
    WHERE PROGRAM = 'RELEASE123_My_Script.sql';
    

这三个方案都不需要关联额外视图,直接在UNIFIED_AUDIT_TRAIL里就能完成筛选,根据你的实际需求选就行——单标识用客户端标识符,多维度信息用自定义审计上下文,想兼容原有习惯就用程序名字段。

内容的提问来源于stack exchange,提问作者nightmare637

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:02:40