[Q]如何限定特定IP访问数据库
  [A]可以利用登录触发器、cmgw或者是在$OREACLE_HOME/network/admin下新增一个protocol.ora文件(有些os可能是. protocol.ora),9i可以直接修改sqlnet.ora:
  增加如下内容:
  tcp.validnode_checking=yes
  #允许访问的ip
  tcp.inited_nodes=(ip1,ip2,……)
  #不允许访问的ip
  tcp.excluded_nodes=(ip1,ip2,……)
  
  [Q]如何穿过防火墙连接数据库
  [A]这个问题只会在WIN平台出现,UNIX平台会自动解决。
  解决方法:
  在服务器端的SQLNET.ORA应类似
  SQLNET.AUTHENTICATION_SERVICES= (NTS)
  NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
  TRACE_LEVEL_CLIENT = 16
  注册表的HOME0加[HKEY_LOCAL_MACHINE]
  USE_SHARED_SOCKET=TRUE

解决方案 »

  1.   

    捕获用户登录信息,如SID,IP地址等,在这个时候你就可以做些工作了.
      CREATE OR REPLACE TRIGGER tr_login_record
      AFTER logon ON DATABASE
      DECLARE
      miUserSid NUMBER;
      mtSession v$session%ROWTYPE;
      CURSOR cSession(iiUserSid IN NUMBER) IS
      SELECT * FROM v$session
      WHERE sid=iiUserSid;
      BEGIN
      SELECT sid INTO miUserSid FROM v$mystat WHERE rownum<=1;
      OPEN cSession(miUserSid);
      FETCH cSession INTO mtSession;
      --if user exists then insert data
      IF cSession%FOUND THEN
      INSERT INTO log$information(login_user,login_time,ip_adress,ausid,terminal,
      osuser,machine,program,sid,serial#)
      VALUES(ora_login_user,SYSDATE,SYS_CONTEXT ('USERENV','IP_ADDRESS'),
      userenv('SESSIONID'),
      mtSession.Terminal,mtSession.Osuser,
      mtSession.Machine,mtSession.Program,
      mtSession.Sid,mtSession.Serial#);
      ELSE
      --if user don't exists then return error
      sp_write_log('Session Information Error:'||SQLERRM);
      CLOSE cSession;
      raise_application_error(-20099,'Login Exception',FALSE);
      END IF;
      CLOSE cSession;
      EXCEPTION
      WHEN OTHERS THEN
      sp_write_log('Login Trigger Error:'||SQLERRM);
      END tr_login_record;
      在以上触发器中需要注意以下几点
      1、该用户有v_$session与v_$mystat的对象查询权限,可以在sys下对该拥护显式授权。
      2、sp_write_log原本是一个写日志的过程,可以置换为自己的需要,如null跳过。
      3、必须在创建该触发器之前创建一个log$information的表记录登录信息。
      

  2.   

    谢谢cenlmmx,还有其他的建议么,以前没做过,所以心里没底啊!!
      

  3.   

    偶是搞网络的, 不懂Oracle,但是和别的程序员合作过,给人家做网络安全和服务器安全配置,所以把这个说一下,不知道行不行:
    可以用VPN来解决这个问题吧,客户端通过VPN进入服务器群,然后获得指定的IP,这样,在管理,和安全上,完全可以解决这个问题吧。
      

  4.   

    谢谢hedongfang,我再找找相关资料