本发明涉及网络数据传输技术领域,特别涉及一种oracle-jdbc数据传输通道加密压缩系统及方法。
背景技术:
随着云计算与云服务的发展,很多政府或企业单位逐渐将应用迁移到云服务,有些情况下需要将业务系统的应用和数据库分别部署到云服务和本地内网。这些系统如果采用jdbc(javadatabaseconnectivity,java数据库连接)连接数据方式,考虑到数据的安全,需要对应用和数据库之间的数据传输进行加密。一般情况下有两种加密方式:一是采用oracle的内置jdbc加密;一种是放弃jdbc方式,通过其他方式(如mq、ftp)进行数据加密传输。
对于第一种加密方式,由于目前政府行业要求加密算法采用国内加密算法,而oracle对此支持不好;第二种加密方式则需要对原来的传输方式进行改造,修改量会比较大。
由于当前采用jdbc连接oracle的应用非常广泛。如大部分java应用程序连接oracle,一些数据交换工具也连接oracle,还有一些oracle的客户端查询工具;当以上应用场景的数据传输需要采用国家密码算法时,就需要开发一种新的加密方法。
针对jdbc连接oracle数据库的数据传输种进行自定义加密和压缩的问题,本发明设计了一种oracle-jdbc数据传输通道加密压缩系统及方法,采用国内加密算法对jdbc的底层tcp通道进行加密,对原系统的改造量很小。
技术实现要素:
本发明为了弥补现有技术的缺陷,提供了一种简单高效的oracle-jdbc数据传输通道加密压缩系统及方法。
本发明是通过如下技术方案实现的:
一种oracle-jdbc数据传输通道加密压缩系统及方法,其特征在于:包括客户代理端和数据库代理端,所述客户代理端与java程序部署在同一网络,数据库代理端与oracle数据库部署在同一网络;所述客户代理端与java程序之间,数据库代理端与oracle数据库之间以及客户代理端与数据库代理端之间均通过tcp(transmissioncontrolprotocol,传输控制协议)连接。
所述oracle-jdbc数据传输通道加密压缩系统的加密压缩方法,其特征在于:对jdbc的底层协议-tcp协议进行处理,对上层协议即jdbc协议透明,并在客户代理端于数据库代理端之间建立起数据传输加密压缩通道;所述java程序通过jdbc访问客户代理端,所述客户代理端将请求数据传输至数据库代理端,通过数据库代理端传输至oracle数据库;所述oracle数据库接收到请求后将结果数据发送至数据库代理端,经数据库代理端加密压缩传输到客户代理端,客户代理端解密解压后传输到java程序。
所述oracle-jdbc数据传输通道加密压缩系统的加密压缩方法,包括以下步骤:
(1)首先,java程序发起连接请求后,会同客户代理端建立一个tcp连接,然后java程序将请求数据发送给客户代理端;
(2)客户代理端读取数据后会向数据库代理端发起tcp连接请求,之后将请求数据发送发给数据库代理端;
(3)数据库代理端从客户代理端读取请求数据,并分析出请求数据的数据库代理端地址和端口,将请求数据的数据库代理端地址和端口替换为实际的oracle数据库地址和端口;
(4)然后,数据库代理端向实际的oracle数据库地址建立tcp连接,替换请求数据的oracle数据库地址和端口,将替换后的请求数据包发送给oracle数据库;
(5)oracle数据库接收到请求数据后将结果数据发送至数据库代理端,数据库代理端接收到结果数据后进行加密和压缩;
(6)数据库代理端将加密压缩包发送到客户代理端,客户代理端按照格式对数据库代理端传输过来的加密压缩包进行解密和解压,解密解压完毕后将数据返回给java程序。
所述步骤(5)中,数据库代理端进行加密时在加密包前附加一个表示整个加密包数据块长度的字段data_len;所述步骤(6)中,客户代理端进行解密时首先读取加密压缩包的长度字段data_len,如果本次的加密压缩包未能达到data_len的长度,则将本次的加密压缩包放入缓存,继续进行下一次读取,直到读取完整的数据量后进行解密和解压;如果本次的加密压缩包达到data_len的长度,则将本次的加密压缩包直接进行解密和解压。
本发明的有益效果是:该oracle-jdbc数据传输通道加密压缩系统及方法,解决了jdbc连接oracle数据库的数据传输过程中加密和压缩的问题,实现了采用中国国家密码算法或其他oracle本身不支持的加密算法时oracle-jdbc的跨网络传输。
附图说明
附图1为本发明oracle-jdbc数据传输通道加密压缩系统及方法示意图。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图和实施例,对本发明进行详细的说明。应当说明的是,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
该oracle-jdbc数据传输通道加密压缩系统,包括客户代理端和数据库代理端,所述客户代理端与java程序部署在同一网络,数据库代理端与oracle数据库部署在同一网络;所述客户代理端与java程序之间,数据库代理端与oracle数据库之间以及客户代理端与数据库代理端之间均通过tcp(transmissioncontrolprotocol,传输控制协议)连接。
该oracle-jdbc数据传输通道加密压缩系统的加密压缩方法,对jdbc的底层协议-tcp协议进行处理,对上层协议即jdbc协议透明,并在客户代理端于数据库代理端之间建立起数据传输加密压缩通道;所述java程序通过jdbc访问客户代理端,所述客户代理端将请求数据传输至数据库代理端,通过数据库代理端传输至oracle数据库;所述oracle数据库接收到请求后将结果数据发送至数据库代理端,经数据库代理端加密压缩传输到客户代理端,客户代理端解密解压后传输到java程序。
java程序需要将jdbc的url改写为新的模式,现举例如下:oracle数据库地址:192.168.0.1,端口1521;数据库代理端地址:192.168.1.2,端口6011;客户代理端地址:192.168.1.1,端口6012。
如按正常的连接方式,java程序访问oracle数据库的url(uniformresourcelocator,统一资源定位符)为:
“jdbc:oracle:thin:@192.168.0.1:1521:orcl”;
如果使用本发明需要将url改为:
“jdbc:oracle:thin:@192.168.1.1:6102:orcl//ip=192.168.0.1&port=1521//”;
该oracle-jdbc数据传输通道加密压缩系统的加密压缩方法,包括以下步骤:
(1)首先,java程序发起连接请求后,会同客户代理端建立一个tcp连接,然后java程序将请求数据发送给客户代理端;
(2)客户代理端读取数据后会向数据库代理端发起tcp连接请求,之后将请求数据发送发给数据库代理端;
(3)数据库代理端从客户代理端读取请求数据,并分析出请求数据的数据库代理端地址和端口,将请求数据的数据库代理端地址和端口替换为实际的oracle数据库地址和端口;
(4)然后,数据库代理端向实际的oracle数据库地址建立tcp连接,替换请求数据的oracle数据库地址和端口,将替换后的请求数据包发送给oracle数据库;
(5)oracle数据库接收到请求数据后将结果数据发送至数据库代理端,数据库代理端接收到结果数据后进行加密和压缩;
(6)数据库代理端将加密压缩包发送到客户代理端,客户代理端按照格式对数据库代理端传输过来的加密压缩包进行解密和解压,解密解压完毕后将数据返回给java程序。
所述步骤(5)中,数据库代理端进行加密时在加密包前附加一个表示整个加密包数据块长度的字段data_len;所述步骤(6)中,客户代理端进行解密时首先读取加密压缩包的长度字段data_len,如果本次的加密压缩包未能达到data_len的长度,则将本次的加密压缩包放入缓存,继续进行下一次读取,直到读取完整的数据量后进行解密和解压;如果本次的加密压缩包达到data_len的长度,则将本次的加密压缩包直接进行解密和解压。