oracle 限制ip访问的方式:参数定制、触发器实现

单纯的设定允许的IP 和 禁止的IP
  以前有文档说增加或修改protocol.ora文件,
  在9i中真正起作用的是sqlnet.ora文件,我们修改sqlnet.ora其实是{zh0}最快的方法。
  
  在sqlnet.ora中增加如下部分
  -----------------------------
  #### 来自 protocol.ora 的属性 ####
  
  tcp.validnode_checking=yes
  
  #允许访问的IP
  tcp.invited_nodes=(ip1,ip2……)
  
  #禁止访问的IP
  tcp.excluded_nodes=(ip1,ip2……)
  
  之后重新启动xxx即可
  
  需要注意的地方:
  1、tcp.invited_nodes与tcp.excluded_nodes都存在,以tcp.invited_nodes为主
  2、一定要许可或不要禁止服务器本机的IP地址,否则通过lsnrctl将不能启动或停止监听,因为该过程监听程序会通过本机的IP访问xxx,而该IP被禁止了,但是通过服务启动或关闭则不影响。
  3、修改之后,一定要重起监听才能生效,而不需要重新启动数据库
  4、任何平台都可以,但是只适用于TCP/IP协议
  但是,客户需求:针对每一个用户,都能指定相应的允许的IP地址.
  设计思路
  :建立表(用户名,ip地址),触发器 (AFTER LOGON ON DATABASE)
  缺点:
  不过AFTER LOGON ON DATABASE触发器对有DBA权限的用户不起作用,还好客户说,数据库中拥有DBA权限的用户就几个,并且密码就一个人知道.
  如果对DBA用户也要限制IP地址,触发器这种方法就无能威力了.
  运行抓图
  Table,Trigger,Package源码:
  表
  SQL> select * from iplimit;
  LOGONUSER IPBEGIN IPEND REASON ADDTIME
  ---------- --------------- --------------- ---------- ----------
  PUBLIC 202.94.155.37 202.94.155.101 实验室 17-7月 -06
  HYCW 202.94.155.67 202.94.155.67 sd 17-7月 -06
  KFKF 222.158.124.129 222.158.124.129 开发 17-7月 -06
  触发器
  CREATE OR REPLACE TRIGGER "LOGON_AUDIT" AFTER
  LOGON ON DATABASE
  DECLARE
  RECORD_NUM NUMBER;
  USERIP VARCHAR2(15);
  ISFORBIDDEN BOOLEAN:=TRUE;
  BEGIN
   USERIP:=SYS_CONTEXT ('USERENV','IP_ADDRESS');
   SELECT COUNT(*) INTO RECORD_NUM FROM ACME.IPLIMIT WHERE LOGONUSER=USER;
   IF(RECORD_NUM>0)THEN
   IF(ACME.SECURITY.ISLEGALIP(USERIP,USER)=FALSE)THEN
   RAISE_APPLICATION_ERROR(-20003,'IP :'||USERIP||' is forbided');
   END IF;
  
   ELSE
   SELECT COUNT(*) INTO RECORD_NUM FROM ACME.IPLIMIT WHERE LOGONUSER='PUBLIC';
   IF(RECORD_NUM>0)THEN
   IF(ACME.SECURITY.ISLEGALIP(USERIP,'PUBLIC')=FALSE)THEN
   RAISE_APPLICATION_ERROR(-20003,'IP :'||USERIP||' is forbided');
   END IF;
   ELSE
   RAISE_APPLICATION_ERROR(-20003,'IP :'||USERIP||' is forbided');
   END IF;
   END IF;
  EXCEPTION
  WHEN NO_DATA_FOUND THEN
   RAISE;
  WHEN VALUE_ERROR THEN
   SYS.Dbms_Output.PUT_LINE('EXCEPTION HANDED');
  WHEN OTHERS THEN
   RAISE;
  END LOGON_AUDIT;
  /
  程序包
  CREATE OR REPLACE PACKAGE "SECURITY" IS
   FUNCTION ISLEGALIP(USERIP IN VARCHAR2,USERNAME IN VARCHAR2) RETURN BOOLEAN;
  FUNCTION Chartonumcompare(Char1 IN VARCHAR2,Char2 IN VARCHAR2) RETURN NUMBER ;
  FUNCTION Ipcompare(Ip1 IN VARCHAR2,Ip2 IN VARCHAR2) RETURN NUMBER ;
  END Security;
  /
  程序包体就不提供了
  就是关于上面3个函数的
  转自:烟台大苹果



郑重声明:资讯 【oracle 限制ip访问的方式:参数定制、触发器实现】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——