oracle和sql server数据库对指定用户登录数据库进行IP限制就是说某个数据库用户只能在其指定的IP地址上远程登录我听说用触发器可以实现,不知道怎么写?各位大侠帮帮忙!

解决方案 »

  1.   

    希望对你有帮助
    http://forums.oracle.com/forums/thread.jspa?threadID=651208&tstart=0http://forums.oracle.com/forums/thread.jspa?threadID=616176&start=15&tstart=0
      

  2.   

    可以简单的通过编辑sqlnet.ora文件,添加
    tcp.validnode_checking=yes #确定是否对客户机IP地址进行检查
    tcp.invited_nodes=(ip1,ip2......) #列举允许连接的客户机的IP地址,以逗号分隔重启监听:
    lsnrctl stop
    lsnrctl start就搞定了。
      

  3.   

    "oracledbalgtu" 的回答是可以,但是那是对数据库整体进行的IP限制。
    我的目的是限制不同的用户使用不同的ip地址登录。"majy" 的帮助好像是我需要的。但还不太清楚怎么做,我先研究研究。
    如果能再解释一下就更好了谢谢二位大侠的回答!
      

  4.   

    对于这样的需求有两种做法一种就是在网络层上做,也就是直接通过网络的设置,阻止掉到服务器的1521的请求。当然也可以坐在应用层次,oracle已经在自己的sqlnet里提供了网络访问的一些相关设置。还没有写相关的blog文,这里有一个网友写的,可以查考一下
    http://hi.baidu.com/edeed/blog/item/45479245bc3861398794739f.html以前还看到过通过profile和其他的方法来进行类似的限制的,不过现在记不清楚了,找到了总结在blog里
      

  5.   

    我的问题已经解决了,自己写的触发器!O ye!
    还是谢谢你们!分就散给你们了
      

  6.   

    通过数据库级的trigger能够限制用户从某个IP登录到数据库.
    但是这个trigger却有一定的限制如拥用dba权限能绕过这个限制等等.
    CREATE OR REPLACE TRIGGER SYS.USER_LOGON AFTER LOGON ON DATABASE 
    DECLARE 
    VAR_USER_IP VARCHAR(30);
    BEGIN 
    select SYS_CONTEXT('USERENV','IP_ADDRESS') INTO VAR_USER_IP FROM DUAL;
    IF VAR_USER_IP='192.168.0.1' THEN
    RAISE_APPLICATION_ERROR(-20000, 'this ip cant logon');
    END IF ;
    END;
    这个是限制所有除DBA权限的用户从指定的IP登录
    下面这个是可以对具体某个用户从指定的IP登录:
    需要在数据库下建表SYSUSER$IP,我建在了SYS方案下
    表结构只要USERNAME和IP字段就可以了。
    CREATE OR REPLACE TRIGGER SYS.USER_LOGON AFTER LOGON ON DATABASE 
    DECLARE 
    VAR_USER_IP VARCHAR(30);
    VAR_USER VARCHAR(30);
    USERIP VARCHAR(30);
    BEGIN 
    select SYS_CONTEXT('USERENV','IP_ADDRESS') INTO VAR_USER_IP FROM DUAL;
    select user INTO VAR_USER FROM DUAL;
    select IP INTO USERIP  FROM SYS.SYSUSER$IP WHERE USERNAME=VAR_USER;
    IF (VAR_USER_IP != USERIP) THEN
    RAISE_APPLICATION_ERROR(-20000, 'this ip cant logon');
    END IF ;
    END;跟大家分享一下!
      

  7.   

    通过数据库级的trigger能够限制用户从某个IP登录到数据库. 
    但是这个trigger却有一定的限制如拥用dba权限能绕过这个限制等等. 
    CREATE OR REPLACE TRIGGER SYS.USER_LOGON AFTER LOGON ON DATABASE 
    DECLARE 
    VAR_USER_IP VARCHAR(30); 
    BEGIN 
    select SYS_CONTEXT('USERENV','IP_ADDRESS') INTO VAR_USER_IP FROM DUAL; 
    IF VAR_USER_IP='192.168.0.1' THEN 
    RAISE_APPLICATION_ERROR(-20000, 'this ip cant logon'); 
    END IF ; 
    END; 
    这个是限制所有除DBA权限的用户从指定的IP登录