暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 触发器失效

生有可恋 2021-09-23
3025

Oracle默认不会对连接数据库的IP信息进行跟踪,如果需要反查执行SQL的IP信息,要么通过监听日志去分析,要么通过创建触发器来实现。


我遇到的问题是触发器创建了但不生效。相同的触发器语句在不同的库上,有的生效有的不生效。一度怀疑是触发器语句有问题或创建触发器的用户权限有问题,甚至怀疑过数据库的系统包被破坏了。这个问题纠结了近半年,一朝得到解决,豁然开朗心情舒畅。


触发器创建语句如下:


    create or replace trigger tr_logon_ip
    after logon on database
    begin
    dbms_application_info.set_client_info(sys_context('USERENV',
    'IP_ADDRESS'));
    end;

    或者

      create or replace trigger tr_logon_ip
      after logon on database
      declare
      ipinfo varchar2(30);
      begin
      select sys_context('USERENV', 'IP_ADDRESS') INTO ipinfo from dual;
      dbms_application_info.set_client_info(ipinfo);
      end;

      两段代码都是有效的,第一段更简洁,有效语句都是调用dbms包写会话的client_info字段。


      通过查询会话信息,来确认触发器是否生效。IP信息记录在client_info字段。

        select t.inst_id,
        t.username,
        t.machine,
        t.client_info,
        t.module,
               t.username
        from gv$session t
        where t.client_info is not null;

        如果触发器没有生效,需要检查一下_system_trig_enabled 参数的状态


          sys@HIS>col name_col_plus_show_param for a20
          sys@HIS>col value_col_plus_show_param for a5
          sys@HIS>col type for a7
          sys@HIS>show parameter _system_trig_enabled


          NAME TYPE VALUE
          -------------------- ------- -----
          _system_trig_enabled boolean FALSE
          sys@HIS>



          _system_trig_enabled 为 false 时,系统触发器不会生效。


          将_system_trig_enabled 设置为 true,再观察一下会话中IP信息。


            sys@HIS>alter system set "_system_trig_enabled" = TRUE;


            System altered.


            sys@HIS>show parameter _system_trig_enabled


            NAME TYPE VALUE
            -------------------- ------- -----
            _system_trig_enabled boolean TRUE



            参数设置成功后,会话的IP已经被记录下来了,触发器生效。



            需要注意的是 _system_trig_enabled 是Oracle隐含内置参数,打开可能会引发安全问题。如果你的数据库权限没有做到严格管理,有可能会存在注入风险,比如被创建恶意触发器,有一类触发器会在数据库重启时触发,删掉系统表,破坏数据字典,最终导致数据库无法启动。


            使用alter语句设置参数时要使用双引号将_system_trig_enabled引起来,不然会报错。


            Reference

            http://www.dba-oracle.com/t_system_trig_enabled.htm

            system_trig_enabled tips


            文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论

            忘忧草
            关注
            暂无图片
            获得了23次点赞
            暂无图片
            内容获得21次评论
            暂无图片
            获得了5次收藏