oracle数据库登陆限制


转载时请务必以超链接形式标明文章 原始出处和作者信息及本版权声明
链接:http://www.dbasky.net/archives/2009/03/oracle-5.html
根据应用要求,为规范应用流程,数据库中生产用户只能从特定的主机登陆,禁止非法登陆。根据此要求,设计了一个登陆的trigger,在用户登陆的时候进行检核.
    生产用户为XXX,为了减少对其他用户影响,将triger放置在该用户下面.如下:

    CREATE OR REPLACE TRIGGER XXX.LOGON_AUDIT
    AFTER LOGON ON DATABASE
    declare
      lv_user   varchar2(100);
      lv_host   varchar2(100);
      lv_schema varchar2(100);
      lv_suser  varchar2(100);
      lv_ip     varchar2(100);
    BEGIN
      select sys_context('USERENV', 'HOST'),
             sys_context('USERENV', 'CURRENT_USER'),
             sys_context('USERENV', 'CURRENT_SCHEMA'),
             sys_context('USERENV', 'SESSION_USER'),
             sys_context('USERENV', 'IP_ADDRESS')
        into lv_host, lv_user, lv_schema, lv_suser, lv_ip
        from dual;
    
      if lv_suser = 'XXX' then
        --记录正常XXX用户登陆记录
        if lv_host = 'zjtesta' or substr(lv_ip, 1, 9) = '192.168.128.101' then
          insert into xta6.logon_record
            (logon_user, logon_schema, logon_host, ip_address, status)
          values
            (lv_user, lv_schema, lv_host, lv_ip, 'passed');
        else
          RAISE_APPLICATION_ERROR(-20001, 'CONNECTIION REFUSED');
        end if;
      end if;
    END;
   
    该trigger能够在用户登陆后,检查登陆信息,连接者必须是zjtesta,或者是192.168.128.101网段的,如果违反规则,则RAISE_APPLICATION_ERROR退出连接。但是,如果USER具有DBA权限后,该RAISE字句将无法作用,切记!!!
    经查,原因为,oracle为了防止管理员帐户无法登陆而忽略该RAISE,所以,对具有DBA权限的用户,该审核方式无效,只能通过记录登陆者的信息来稽核,无法终止异常登陆.

发表评论

Close