默认情况下,客户端和Oracle数据库之间的数据传输都是以明文方式进行的,这在广域网环境下,存在着较大的安全漏洞。我们可以用SSH加密的方式进行数据传输,其实现原理是:客户端通过ssh-keygen生成一对公钥和私钥,其中客户端保留私钥,公钥存放在服务器端。当客户端通过SSH协议向服务端发送信息时,客户端会将信息加密,在发送到服务端后,如果私钥和公钥无误,服务端自动将信息解密,还原为明文信息。此外SSH还有端口转发功能,它能够将TCP连接通过SSH的安全机制转发到远端机器上,这样我们就可以得到一个可靠的TCP会话,从而实现安全的信息通道了。简单地说,就是利用SSH的端口转发功能,实现SSH对特定端口的监听,当有任何会话连接到监听的端口时(如本地端口1555),我们可以将其转发到其他端口(如远程端口1521)。
假设客户端IP为172.16.4.28,服务端IP为172.16.4.200,数据库运行在服务端上,监听端口为1521,目的是在客户端172.16.4.28实现SSH的端口转发功能,从而得到一条客户端至服务端的安全链路。以下为Oracle客户端调用SSH端口转发功能的简要配置过程。
(1)在IP为172.16.4.28的客户端中执行SSH端口转发命令。这样连接至IP为172.16.4.28,端口1555的会话就可以通过SSH转发至IP为172.16.4.200的1521端口上了。如下所示:
[root@hzmc etc]# ssh -CNfg -L 1555:172.16.4.200:1521 ora10g@172.16.4.200
使用netstat命令可以看到客户端的1555端口转发链路已经确立,如下所示:
[root@hzmc etc]# netstat -an|grep :1555
tcp 0 0 :::1555 :::* LISTEN
(2)查看服务端的监听状态,可以看到监听运行在IP地址为172.16.4.200的端口1521上,如下所示:
Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.4.200)(PORT=1521)))
Service "gg11" has 1 instance(s). Instance "gg11", status READY, has 2 handler(s) for this service...
(3)查看客户端tnsnames.ora连接串,可以看到会话连接的HOST配置为172.16.4.28,端口配置为1555。如下所示:
gg11 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.4.28)(PORT = 1555)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = gg11) ) )
(4)由于在客户端上的转发链路已经确立,所以连接至IP地址为172.16.4.28、端口为1555的会话可以自动转发至IP地址为172.16.4.200、端口为1521的地址上,如下所示:
[ora10g@hzmc admin]$ tnsping gg11 TNS Ping Utility for Linux: Version 10.2.0.3.0 - Production on 10-JUL-2012 12:28:50 Copyright (c) 1997, 2006, Oracle. All rights reserved. Used parameter files:
/ora10g/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =
172.16.4.28)(PORT = 1555)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME
= gg11)))
OK (10 msec)
[ora10g@hzmc admin]$ sqlplus "zhoul/zhoul@gg11" SQL*Plus: Release 10.2.0.3.0 - Production on Tue Jul 10 12:28:54 2012 Copyright (c) 1982, 2006, Oracle. All Rights Reserved. Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> exit
(5)如果要关闭安全链路,只要将端口转发进程844杀掉即可,如下所示:
[ora10g@hzmc admin]$ ps -ef|grep CNfg|grep -v grep
root 844 1 0 12:07 ? 00:00:00 ssh -CNfg -L
1555:172.16.4.200:1521 ora10g@172.16.4.200
[ora10g@hzmc admin]$ kill 844
内容转自http://book.51cto.com/art/201312/421443.htm