模板天下 | 网页模板 | 学 院 | 源 码 | 书 籍 | 壁 纸 | 字 体 | JS脚本 | FLASH源码 | 软 件 | 矢 量 | 服务器软件 | 素 材 | 其 它 |
设为主页
加入收藏
联系站长
平面设计 | 网页制作 | 程序编写 | 数 据 库 | 媒体动画 | 网络冲浪 | 服务器相关 | 站长乐园 | 业界动态 |
当前在线
oracle 每个用户 ip访问限制 开发总结
2007-10-12 16:28:07  作者:模板天下收集整理  来源:未知 网友评论 0 条 论坛
   

单纯的设定允许的IP 和 禁止的IP
 以前有文档说增加或修改protocol.ora文件,
在9i中真正起作用的是sqlnet.ora文件,我们修改sqlnet.ora其实是最好最快的方法。
 
在sqlnet.ora中增加如下部分
-----------------------------
#### 来自 protocol.ora 的属性 ####
 
tcp.validnode_checking=yes 
 
#允许访问的IP
tcp.invited_nodes=(ip1,ip2……) 
 
#禁止访问的IP
tcp.excluded_nodes=(ip1,ip2……)
 
之后重新启动监听器即可
 
需要注意的地方:
1、tcp.invited_nodes与tcp.excluded_nodes都存在,以tcp.invited_nodes为主
2、一定要许可或不要禁止服务器本机的IP地址,否则通过lsnrctl将不能启动或停止监听,因为该过程监听程序会通过本机的IP访问监听器,而该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个函数的
 
转自:烟台大苹果

共分1页  [1] 

>> 相关文章

关于网站 | 客服中心 | 服务条款 | 合作伙伴 | 广告联系 | 本站历程 | 网站导航 | 发布资源 == 好的资源 大家共享

吉ICP备05000107号