怎样才能截获web服务器向数据库服务器发送的sql请求,有什么方法吗?

解决方案 »

  1.   

    如果WEB数据库连接是固定的,可以通过以下跟踪
    针对某一个会话的跟踪可以通过set_sql_trace_in_session来实现
    (1) 以管理员登录查询v$session表,查出具体是的SID及SERIAL#
    (2) exec dbms_system.set_sql_trace_in_session(SID,SERIAL#,true);
    (3) 执行WEB操作
    (4) exec dbms_system.set_sql_trace_in_session(SID,SERIAL#,false);然后通过查看Oracle安装目录下udump目录下生成的trc文件来分析。建议在WEB服务端对有关数据库操作的做封装,能过参数可以随时开启关闭跟踪信息。
      

  2.   

    跟踪倒是可以,只是我想把这个sql截获下来,控制它,然后根据需要发送给数据库服务器。还有办法吗?
      

  3.   

    补充kingright(kingright) (1) 以管理员登录查询v$session表,查出具体是的SID及SERIAL#(通过v$session的last_call_et字段确定)
    (2) exec dbms_system.set_sql_trace_in_session(SID,SERIAL#,true);
    (3) 执行WEB操作
    (4) exec dbms_system.set_sql_trace_in_session(SID,SERIAL#,false);
      

  4.   

    以上两位说的好像和我的意思是不一样的。我是说是否可以在到达数据库前截获,比如在http协议层上将其截获?
      

  5.   

    LZ的想在HTTP层上截获
    但WEB服务器连数据库并不走HTTP,是tcp/ip协议
      

  6.   

    自己想办法分析tcp/ip包吧,不过有难度哦,建议还是在发送前验证的好
      

  7.   


     9441(不知道) WEB服务器连数据库并不走HTTP,那咱们在浏览器中登陆时不是也访问数据库了吗,浏览器不是用的http协议吗?
      

  8.   

    1 如果是10g的web服务功能,实际上好象是10g的web服务器自己再通过内部协议(具体什么协议没研究过)去访问数据库;
    2 如果是你自己的web服务器,一般是通过jdbc\ado\odbc等通过tcp/ip等协议去和数据库通信
      

  9.   

    如果是上面的第二种情况该如何将请求截获呢? 只能在数据库服务器机器上的某一个端口用socket监听了吧?
      

  10.   

    如果是上面的第二种情况该如何将请求截获呢? 只能在数据库服务器机器上的某一个端口用socket监听了吧?
      

  11.   

    反过来思考一下吧,如果是你自己的web服务器,一般是通过jdbc\ado\odbc等通过tcp/ip等协议去和数据库通信,但是通信之前构造的sql是你可以控制的,比如在java中,所有的sql都是先放入string或string buffer然后由statement对象调用执行的,你可以再执行前获取sql语句集,把语句和执行时间log到指定文件组,这样在web服务器记录log要比在数据库服务器上记录log简单的多嘛;
    其实最好的是花点时间和人力写个平台,实现web到数据库的通信,其它程序直接调用你自己定义的平台,既省去了重复写连接数据库的操作,又可以实现你说的统一控制
      

  12.   

    可以web服务器向数据库服务器发送的sql请求,都通过一个存储过程入口去执行!
    Create or Replace procedure WebRequestDB(
    c_sql varchar2;
    c_user Type;
    c_IP   Type;
    .....
    )
    利用存储过程去截获Sql Text , user ,IP ...等信息,去检查合法性等...
      

  13.   

    有人说在session中就能将这些信息截获,有朋友做过这方面的程序吗?
      

  14.   

    看来只能先把sql放在固定的字符串里面了,分析这个字符串,然后调度!各位看是这样吗!