欢迎光临
我们一直在努力

数据库用户登陆失败跟踪

 最近某客户的一应用系统老是出现数据库用户锁住,导致应用不能正常运行, 客户要求找出是哪个用户操作造成的,想了下,发现可以写一个trigger进行捕捉到登陆时间及IP等相关信息

触发器如下:

create or replace trigger logon_denied_to_alert
after servererror on database
declare
  message   varchar2(120);
  IP        varchar2(15);
  v_os_user varchar2(80);
  v_module  varchar2(50);
  v_action  varchar2(50);
  v_pid     varchar2(10);
  v_sid     number;
begin
  IF (ora_is_servererror(1017)) THEN
    if sys_context(‘userenv’, ‘network_protocol’) = ‘tcp’ then
      IP := sys_context(‘userenv’, ‘ip_address’);
    else
      select distinct sid into v_sid from sys.v_$mystat;
      SELECT p.SPID
        into v_pid
        FROM V$PROCESS p, V$SESSION v
       WHERE p.ADDR = v.PADDR
         AND v.sid = v_sid;
    end if;
    v_os_user := sys_context(‘userenv’, ‘os_user’);
    dbms_application_info.READ_MODULE(v_module, v_action);
    message := to_char(sysdate, ‘Dy Mon dd HH24:MI:SS YYYY’) ||
               ‘ logon denied from ‘ || nvl(IP, v_pid) || ‘ ‘ || v_os_user ||
               ‘ with ‘ || v_module || ‘ ‘ || v_action;
    sys.dbms_system.ksdwrt(2, message);
  end if;
end;

当用户尝试登陆失败后,警告时间里面会记录如下信息:

….  logon denied from 192.168.0.11 oracle with sqlplus@tiege  ….

而该trigger只是记录登陆失败的信息,正常成功登陆不会记录。

未经允许不得转载:SRE空间 » 数据库用户登陆失败跟踪

分享到:更多 ()

评论 1

评论前必须登录!

 

  1. #1

    经验相传,赞一个~

    Sue10年前 (2015-01-30)

oracle