有谁 如何控制oracle的客户端访问的ip和对应的软件,变通实现方法也可以,谢谢

解决方案 »

  1.   

    注意登录触发器对有ADMINISTER DATABASE TRIGGER角色的用户无效.
    如dba都有这个角色.
      

  2.   

    IP可以用触发器解决
    create table log_table
    (
      log_user varchar2(30),
      database_name varchar2(30),
      event_name varchar2(20),
      log_time date,
      log_ip varchar2(15)
    );
    --1:登录
    create or replace trigger user_logon
    after logon on database
    begin
      insert into log_table (log_user,database_name,event_name,log_time,log_ip)
        values(sys.login_user,sys.database_name,sys.sysevent,sysdate,SYS_CONTEXT('USERENV','IP_ADDRESS'));
    end;
    /--2:退出登录
    create or replace trigger user_logoff
    before logoff on database
    begin
      insert into log_table (log_user,database_name,event_name,log_time,log_ip)
        values(sys.login_user,sys.database_name,sys.sysevent,sysdate,SYS_CONTEXT('USERENV','IP_ADDRESS'));
    end;
      

  3.   

    可能我的描述不清楚,我问的是安全方面的问题,就是只允许一些固定的ip能够从客户端链接到oracle
    ,而不是记载它的日志。现有的想法是在unix启个脚本,定时扫描,杀掉对应的会话,不知有没有其他方法
      

  4.   

    程序可以加一个program列,从V$SESSION中的PROGRAM列去取值
      

  5.   

    限制特定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……) 之后重新启动监听器即可
      

  6.   

    呵呵,我已经查到资料了  和luxuezhu(csdn完善你的blog吧) ( 说的一样,再追究一下,
    能不能控制特定数据库用户的oracle的客户端访问的ip和对应的软件的连接。
      

  7.   

    客户端使用的软件以及机器名
    在V$session里面可以查到
    select machine,program from v$session;
      

  8.   

    TRIGGER TI_LOG_CREATIONS
    BEFORE CREATE OR ALTER OR DROP ON DATABASE
    --  ========================================================
    --  程式類別 : TRIGGER                                      
    --  程式名稱 : T_LOG_CREATIONS                                       
    --  程式功能 : 防止用戶更改表結構導致程序無效             
    --  原設計者 : 程時欽    設立日期 : 2005/06/10       
    --  ------------------異動記錄明細-----------------           
    --  異動日期   異 動 者      異   動   原   因          
    --  ========================================================
    DECLARE        BEGIN                                     
       IF sys.login_user<>'SYS' AND sys.dictionary_obj_type='TABLE' 
                                AND sys_context('userenv','ip_address') NOT IN('172.24.17.40') THEN
          RAISE_APPLICATION_ERROR(-20008,'小樣,你沒有創建,更改,刪除'||sys.dictionary_obj_name||'的權限,請聯系DBA!');
       END IF;
    END TI_LOG_CREATIONS; 
    看看我寫的吧,主要時防止別人亂改表結構的,也是限定了隻有我的ip才可以的