扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
呵呵,不要做坏事啊.
成都创新互联是一家专业提供丁青企业网站建设,专注与成都网站建设、网站建设、H5高端网站建设、小程序制作等业务。10年已为丁青众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
抓包工具应该不可以,因为验证时的数据包是加密的,破解起来难度很大。
2000多包是一次交互,还是一共交互?
因为oracle的查询有点变态,如果是初次连接,那么会先传一个交互,这边说我这里要连接了,服务器说,我知道了,正在查询是否可以同意。过一会,同意连接,分给你内存多少,你的权限是什么,查询吧。再一个交互:这边说我要查xxx,服务器说:好的。过了一会,你的查询结果是xxxx(但不是直接发结果,题头是什么,数据格式什么样子。。。好象还包括执行计划,执行时间,条数等等,这些内容好象都会发送,只是好象,这部分忘的差不多了,很久没搞这块内容了)
如果是一次交互,就是说,你抓的包没有多次交互的情况,那么只能是减少查询内容了,毕竟带宽没有固网那么足,假设你固网是查询5个字段,那么动网就三个主要字段,而且每叶内容减少,多分页,这样能提高一些。现在喜欢用“抢带宽”的方式,这样是能快一些,不过动网带宽真的不高,你就是全抢过来也不如固网(而且也不可能)。另外我记得oracle好象有一种是不要题头,不要前缀,不要xxxx的,你可以仔细找找,网上应该有,类似就是sqlplus 中的 set XXXXX off,类似这个,我在数据库传参脚本中用过,应该也能减少一些。
如果是一共交互,那么就设置一些数据库长连接(数量自己根据实际定),也就是你的页面断开,但是数据库不断开,下一个页面也用这个数据库用户,那么就不用开始的一个交互了,这样能省下两次交互,能减少一些。
查询频繁的那张表很大么,如果不大可以放在内存中,作为内存表,还有一些就是一般的oracle优化的内容,我想这部分你也清楚,我就不多写了。
最后说一点,个人观点,仅供参考。
写一个after update的trigger,再写一个存储过程,trigger调用存储过程,存储过程调用java程序。
----------------------------建立一个java存储过程
1. 先看一下这个目录
[oracle@ocean ~]$ pwd
/home/oracle
[oracle@ocean ~]$ ls -l
total 8
-rw-r--r-- 1 oracle orains 604 Dec 26 2006 bash
2. 连接到test用户
SQL conn test/test
Connected.
3. 授于test用户文件读写和执行命令的权限
SQLexec dbms_java.grant_permission('TEST','SYS:java.io.FilePermission','ALL FILES','read,write,execute,delete');
PL/SQL procedure successfully completed.
SQLexec dbms_java.grant_permission('TEST','java.lang.RuntimePermission','*','writeFileDescriptor' );
PL/SQL procedure successfully completed.
4. 建立java存储过程,注意,这里的exp 路径和dmp文件的路径是数据库服务器的路径
create or replace and compile java source named "aa"
as
import java.io.*;
import java.lang.*;
import java.util.*;
import java.sql.*;
import oracle.sql.*;
public class aa
{
public static void invoke_exe() throws IOException
{
Process p=Runtime.getRuntime().exec("/oracle/product/9.2.4/bin/exp userid=test/test file=/home/oracle/test.dmp");
try
{
p.waitFor();
}catch(InterruptedException ie){System.out.println(ie);}
}
}
/
Java created.
Elapsed: 00:00:00.01
5. 建立调用java存储过程的存储过程call_aa
create or replace procedure call_aa
as language java
name 'aa.invoke_exe()';
/
6. 执行java存储过程
exec call_aa;
7. 检查一下dmp文件是否已经生成
[oracle@ocean ~]$ pwd
/home/oracle
[oracle@ocean ~]$ ls -l
total 28
-rw-r--r-- 1 oracle orains 604 Dec 26 2006 bash
-rw-r--r-- 1 oracle orains 16384 Jul 3 14:12 test.dmp
-----------------
exec dbms_Java.Grant_Permission('TEST', 'java.io.FilePermission', 'ALL FILE', 'read ,write, execute, delete');
exec dbms_Java.Grant_Permission('TEST', 'java.io.FilePermission', 'd:aa.bat', 'read ,write, execute, delete');
exec dbms_java.grant_permission('TEST','java.lang.RuntimePermission','*','writeFileDescriptor' );
你问的这个问题,其实是数据库审计的概念。目前市面上这种产品非常之多,一般都是硬件类的产品。
他的工作原理是对你数据库所在的端口进行镜像,镜像到数据库审计产品的抓包口上,对所有数据库的访问包进行抓取分析,将数据库的语句提取出来显示到他的控制界面上。
一般包含的审计内容有:源IP,目标IP,源MAC地址,目标MAC地址,用户名,所访问的数据库语句(显示全部的语句),语句执行成功与否,数据库响应时间。
我还没有听说有哪款软件是可以实现这个功能的。最简单的一个就是:软件如果安装在一台服务器上,你根本无法配置抓包口对数据包进行抓取。
还有不懂给我留言吧。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流