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

如何在Oracle中核查数据库对象及触发器的修改者

Oracle数据库对象及触发器修改者核查方案

1. 核查Oracle中修改数据库对象的人员

  • 基础数据字典查询(仅获取修改时间)
    通过DBA_OBJECTS视图可查看对象的最后修改时间,但默认不记录修改者:

    SELECT owner, object_name, object_type, last_ddl_time
    FROM dba_objects
    WHERE object_name = 'YOUR_OBJECT_NAME' 
      AND object_type = 'YOUR_OBJECT_TYPE'; -- 替换为TABLE、VIEW、TRIGGER等类型
    
  • 启用数据库审计(核心解决方案)
    要获取修改者信息,必须开启数据库审计(需SYSDBA权限):

    1. 开启审计并重启数据库:
      ALTER SYSTEM SET audit_trail=DB,EXTENDED SCOPE=SPFILE;
      SHUTDOWN IMMEDIATE;
      STARTUP;
      
    2. 配置审计规则,可选择全局DDL审计或特定对象审计:
      -- 审计所有用户的DDL操作
      AUDIT ALL DDL BY ALL;
      -- 或仅审计指定对象的修改操作
      AUDIT ALTER, DROP, CREATE ON your_schema.your_object BY ACCESS;
      
    3. 查询审计日志获取修改者详情:
      SELECT username, obj_name, obj_type, action_name, timestamp, host, terminal
      FROM dba_audit_trail
      WHERE obj_name = 'YOUR_OBJECT_NAME' 
        AND action_name IN ('ALTER', 'CREATE', 'DROP');
      

    若使用Oracle 12c及以上版本,推荐使用统一审计视图:

    SELECT username, object_name, object_type, action_name, event_timestamp, client_hostname, client_ip_address
    FROM unified_audit_trail
    WHERE object_name = 'YOUR_OBJECT_NAME' 
      AND action_name IN ('ALTER', 'CREATE', 'DROP');
    

2. 核查特定触发器的修改者(多机共用凭证场景)

当多台机器使用相同用户凭证连接时,需结合客户端标识信息定位操作来源:

  • 利用审计日志的客户端字段
    开启审计后,日志会记录客户端主机名、IP地址等信息,可通过这些字段区分操作机器:

    SELECT username, object_name, action_name, event_timestamp, client_hostname, client_ip_address
    FROM unified_audit_trail
    WHERE object_name = 'YOUR_TRIGGER_NAME' 
      AND object_type = 'TRIGGER' 
      AND action_name IN ('ALTER', 'CREATE', 'DROP');
    
  • 自定义日志表补充追踪
    若审计信息不足,可创建自定义日志表和DDL触发器捕获详细操作:

    1. 创建日志存储表:
      CREATE TABLE trigger_mod_log (
          log_id NUMBER GENERATED ALWAYS AS IDENTITY,
          trigger_name VARCHAR2(128),
          modified_by VARCHAR2(128),
          modify_time TIMESTAMP,
          client_host VARCHAR2(128),
          client_ip VARCHAR2(40),
          action_type VARCHAR2(30)
      );
      
    2. 创建DDL触发器捕获触发器修改事件:
      CREATE OR REPLACE TRIGGER track_trigger_changes
      AFTER CREATE OR ALTER OR DROP ON DATABASE
      WHEN (ora_dict_obj_type = 'TRIGGER' AND ora_dict_obj_name = 'YOUR_TRIGGER_NAME')
      DECLARE
          v_ip VARCHAR2(40);
      BEGIN
          SELECT SYS_CONTEXT('USERENV', 'IP_ADDRESS') INTO v_ip FROM DUAL;
          INSERT INTO trigger_mod_log (
              trigger_name, modified_by, modify_time, client_host, client_ip, action_type
          ) VALUES (
              ora_dict_obj_name, USER, SYSTIMESTAMP, SYS_CONTEXT('USERENV', 'HOST'), v_ip, ora_sysevent
          );
      END;
      /
      
    3. 查询自定义日志:
      SELECT * FROM trigger_mod_log ORDER BY modify_time DESC;
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:06:10