我写了一个基于Oracle的c/s程序(c#)做的,我怕客户端用户通过pl/sql developer或者sqlplus直接登入我的数据库,希望能够加个触发器。
当用户登录系统时,判别用户使用的程序是什么,如果不是我写的客户端程序,而是其他软件,则判断客户端地址是否是我指定的一些地址(比如服务器本身或者我自己的PC机),否则就kill掉登入的session.
该如何实现呢?

解决方案 »

  1.   

    你想把程序的安全性放到ORACLE里实现么,一般开发是不这么做的获取连接的信息
    SELECT s.username 用户名称, s.status 状态,s.machine 机器名称, 
      osuser 操作系统用户名称,spid UNIX进程号, 
      'kill -9 '||spid UNIX级断开连接, 
      'alter system kill session ' ||''''||s.sid||','||s.serial# || ''';' Oracle级断开连接, 
      TO_CHAR (logon_time, 'dd/mm/yyyy hh24:mi:ss') 登陆时间, 
      last_call_et 空闲时间秒, 
      TO_CHAR (TRUNC (last_call_et / 3600, 0))||' '||' HRS '|| 
      TO_CHAR ( 
      TRUNC ((last_call_et - TRUNC (last_call_et / 3600, 0) * 3600) / 60, 0) 
      ) ||' MINS' 空闲时间小时分钟, 
      module 模块 
      FROM v$session s, v$process p 
      WHERE TYPE = 'USER' 
      AND p.addr = s.paddr 
      AND status != 'KILLED' 
      -- AND SUBSTR (machine, 1, 19) NOT IN ('机器名') 
     /* AND last_call_et > 60 * 60 * 1 -- 空闲时间超过1小时的连接 */
      ORDER BY last_call_et desc;通过 ALTER SYSTEM KILL SESSION 'SID,SERIAL#' 命令来杀SESSION 
      

  2.   

    不在Oracle上实现,那怎么实现呀。客户端实现肯定不可能吧,我要防御的就是别人用非法软件入侵数据库。
    有个高人给我的建议是,当用户登入数据库的时候,会在某些表里面记录session信息,对这样的表建立一个触发器,检测session所使用的地址和软件,如果非法就kill掉进程。
      

  3.   

    如果可以的话,可以限制访问Oracle的IP,明确指定哪些IP可以访问Oracle是最好的
      

  4.   

    不能这样,我希望用户可以在任何ip地址使用我写的程序来访问数据,但是除了服务器和我的ip外,其他ip不允许使用sqlplus或者其他程序访问数据库.