Oracle数据库的高级安全选项提供了传输数据加密、数据完整性验证等多项功能,在必定程度上能够保证数据传输的安全性。java
链接到ORACLE数据库方式有两种,一种是经过sqlnet.ora文件,另外一种是经过JDBC方式。算法
为了使用Oracle的高级安全选项,对此功能进行了简单测试:sql
功能方面:不管是利用sqlnet.ora仍是经过JDBC链接到ORACLE数据库,这两种方式均可以进行实现数据加密。数据库
性能方面:不加密状况下执行时间较短、数据包个数相对较少且CPU空闲率相对较高。使用RC4_40和RC_4_56的加密算法对性能影响较小,CPU使用率和执行时安全
间增长不超过1%。使用DES40C和DES56C对系统性能影响不超过2%。服务器
高频调用测试:咱们利用loadrunner模拟10个客户端进行同时调用,不加密时CPU的占用率要比使用加密算法时CPU的占用率低2-3%左右。对于本次测试,使用RC4_40和RC4_56算法比使用DES40和DES50算法节省大约10秒左右。session
经过测试咱们能够看出传输的数据进行加密会对系统性能产生必定的影响,但这种影响不是很大。经过对比几种加密算法,咱们能够看出RC系列算法明显好于DES系列算法。而在某些DML语句上面RC4_40的性能比RC4_56表现更好。oracle
所以,这里咱们建议使用RC_40算法对经过传输的数据进行加密。性能
设置传输加密在服务器端是经过设置sqlnet.ora文件实现的。此文件能够动态修改,也就是说能够在数据库运行时直接打开此文件,加入下面代码随即生效:测试
SQLNET.ENCRYPTION_TYPES_SERVER= (RC4_40)
SQLNET.ENCRYPTION_SERVER = accepted
SQLNET.CRYPTO_SEED = # 加密种子
经过sqlnet.ora文件链接到ORACLE数据库的在客户端也有这个文件。设置也是能够动态修改的,加入下面代码随即生效:
SQLNET.ENCRYPTION_TYPES_SERVER= (RC4_40)
SQLNET.ENCRYPTION_SERVER = requested
SQLNET.CRYPTO_SEED = # 加密种子
经过JDBC链接到数据库的方式,须要在加密的网页中加入下面的代码:
<%@ page session="false" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="oracle.net.ns.*" %>
<%@ page import="oracle.net.ano.*" %>
Properties prop = new Properties();
prop.put("user","test");
prop.put("password","test");
prop.put("oracle.net.encryption_client", "REQUESTED");
prop.put("oracle.net.encryption_types_client", "(RC4_40)");
――无需设置加密种子。
上面的加密代码加到每个利用JDBC链接到数据库的网页中随即生效 。