使用Oracle Net实现限制特定IP访问数据库

简介:

在实际运维环境中,信息安全是我们不能忽视的重要方面,更是企业核心价值所在。无论系统多强大、性能有多快,安全这个硬指标是不能回避的必要条件。

数据库作为系统数据的贮存载体,是信息系统关键核心。数据库的安全、数据的安全,很大程度上就代表了信息安全的大部分内容。数据库安全不是一个单一的概念,是包括网络、连接、用户、权限乃至存储等一系列软硬件共同实现。目前尚未有专门一项技术可以解决所有的数据库安全问题。

本篇主要介绍通过Oracle Net Service来实现限制特定IP访问数据库的功能。Oracle Net是客户端Client Process连接到Service Process的主要功能组件。默认情况下,系统自动参数行为可以支持大部分的应用需求。但是,默认参数行为很多是不满足安全性要求的。特定IP访问数据库,要求Oracle网络只能接受特定IP地址发出的请求连接,其他地址连接均不予接受。

这个需求是很多时候安全巡检的一个重要内容项目。目的在于控制减少访问数据库服务器的主机数量,减少潜在风险。下面介绍在Oracle中如何实现这个功能。

1、环境介绍

笔者使用Oracle 11gR2进行测试,具体版本号为11.2.0.4。

SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 – Production

服务器IP地址配置如下:

[oracle@localhost ~]$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:21:A2:01 
          inet addr:172.16.19.2  Bcast:172.16.19.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe21:a201/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2151824 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1194873 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2817459392 (2.6 GiB)  TX bytes:184579510 (176.0 MiB)

2、sqlnet.ora配置

Oracle Net是控制监听器和连接行为的主要核心组件。Oracle Net配置文件包括三个:listener.ora、sqlnet.ora和tnsnames.ora。三个文件依然保持原有Unix平台下的文本配置原则,分别承担不同的配置任务。

Listener.ora主要负责监听器配置内容。我们通过netca添加的监听器程序配置信息。在最新的11g版本中,引入了默认监听器机制。也就是说,很多情况下,我们在$ORACLE_HOME/network/admin文件夹中是找不到listener.ora文件的。但是此时监听器程序也运行正常。

默认监听程序是Oracle新版本的特性,即使在listener.ora中没有配置,Oracle也是有一个默认在1521端口伺候的监听程序后台运行。但是根据笔者的经验,实际生产环境中,还是独立创建监听程序比较好。
Sqlnet.ora是核心行为参数文件,默认情况下一般为空文件。这样情况下,系统是直接使用默认Oracle Net行为参数进行控制。我们常常使用的如:禁用服务器本地匿名登录等特性,都是在这个文件上进行配置的。

Tnsnames.ora是我们日常客户端最直接接触的文件。我们连入数据库是通过主机IP、服务名、端口号进行数据库实例instance定位的。在客户端,我们是通过本地连接名进行替代的。Tnsnames.ora就是记录本地配置信息的载体。

通过查看监听器状态,我们可以了解主要的Oracle Net配置情况。

[oracle@localhost ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 23-JUL-2014 16:11:06
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                16-JUN-2014 09:37:55
Uptime                    37 days 6 hr. 33 min. 10 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/network/admin/listener.ora
Listener Log File         /u01/app/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "sicspcdb" has 1 instance(s).
  Instance "sicspcdb", status READY, has 1 handler(s) for this service...
Service "sicspcdbXDB" has 1 instance(s).
  Instance "sicspcdb", status READY, has 1 handler(s) for this service...
The command completed successfully

我们在配置目录上,没有找到sqlnet.ora,所以需要单独创建一个文本文件。

[oracle@localhost ~]$ cd /u01/app/oracle/network/admin/
[oracle@localhost admin]$ ls -l
total 16
-rw-r--r--. 1 oracle oinstall  343 Jul 14 16:21 listener.ora
drwxr-xr-x. 2 oracle oinstall 4096 Jun 16 09:31 samples
-rw-r--r--. 1 oracle oinstall  381 Dec 17  2012 shrept.lst
-rw-r-----. 1 oracle oinstall  312 Jul 14 16:21 tnsnames.ora

在新建文件中,加入两个key-value参数内容。

[oracle@localhost admin]$ cat sqlnet.ora
TCP.VALIDNODE_CHECKING=yes
TCP.INVITED_NODES=172.17.22.51

TCP.VALIDNODE_CHECKING作为限制IP访问的开关项目。如果设置为yes,就表示启用限制功能。TCP.INVITED_NODES是一个列表参数,用于列出允许连入的IP地址列表。IP地址172.17.22.51是实验的windows环境。配置后,重启监听器(或者reload参数)。

[oracle@localhost admin]$ lsnrctl stop
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 23-JUL-2014 16:14:12
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
The command completed successfully
[oracle@localhost admin]$ lsnrctl start
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 23-JUL-2014 16:14:14
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
Starting /u01/app/oracle/bin/tnslsnr: please wait...

3、首轮测试

到客户端进行首次测试。客户端是windows环境,而且已经创建本地连接名。

C:\Users\admin>tnsping sicspcdb_linux_bk
TNS Ping Utility for 64-bit Windows: Version 11.2.0.4.0 - Production on 23-7月 -
2014 16:10:15
Copyright (c) 1997, 2013, Oracle.  All rights reserved.

已使用的参数文件:

D:\app\admin\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
已使用 TNSNAMES 适配器来解析别名
尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.19.2)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = sicspcdb)))
OK (10 毫秒)

当前IP地址为172.17.22.51,与配置相同。

C:\Users\admin>ipconfig
Windows IP 配置

以太网适配器 本地连接:

连接特定的 DNS 后缀 . . . . . . . : chinare.local
 本地链接 IPv6 地址. . . . . . . . : fe80::e9b1:af96:9d03:1c89%14
 IPv4 地址 . . . . . . . . . . . . : 172.17.22.51
 子网掩码  . . . . . . . . . . . . : 255.255.254.0
 默认网关. . . . . . . . . . . . . : 172.17.22.1

客户端连接测试:

SQL> conn sys/oracle@sicspcdb_linux_bk as sysdba
ERROR:
ORA-12537: TNS: 连接关闭

连接失败,在listener.log日志文件中,我们看到了拒绝信息。

Wed Jul 23 16:19:17 2014
Incoming connection from 172.17.22.51 rejected
23-JUL-2014 16:19:17 * 12546
TNS-12546: TNS:permission denied
 TNS-12560: TNS:protocol adapter error
  TNS-00516: Permission denied

这个和我们预想的完全不同,设置上允许登录的反而不能登录。那么,Linux服务器本机登录情况是否允许呢?

[oracle@localhost admin]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.4.0 Production on Wed Jul 23 16:16:20 2014
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
SQL> conn sys/oracle@sicspcdb as sysdba
Connected.
SQL>

故障现象:配置的连接IP在连入的时候,不被允许。本机登录尚可以支持。

**4、故障解决
**
经过分析和资料查询,在MOS中我们找到了对应的资料解释:

Cause
If the Local Server's address (where the listener is located) is not included in the TCP.INVITED_NODES listing, then the valid node checking seems to be nul and void.
Fix
The solution is to add the IP address or Fully qualified hostname of the local server to the TCP.INVITED_NODES list.
If this address is missing, then the "validnode checking" is not effective.

要求我们在配置sqlnet.ora参数中加上服务器本地地址,否则限制IP功能不能实现。修改后如下:

[oracle@localhost admin]$ cat sqlnet.ora
TCP.VALIDNODE_CHECKING=yes
TCP.INVITED_NODES=(172.17.22.51,127.0.0.1)

重新启动监听器或者reload配置信息。回到windows客户端进行连接测试。

[oracle@localhost admin]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.4.0 Production on Wed Jul 23 16:25:51 2014
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
SQL> conn sys/oracle@sicspcdb as sysdba
Connected.

找一个第三方IP进行测试连接。

C:\Documents and Settings\liuzy>ipconfig
Windows IP Configuration
Ethernet adapter 本地连接:
        Connection-specific DNS Suffix  . : chinare.local
        IP Address. . . . . . . . . . . . : 172.17.12.80
        Subnet Mask . . . . . . . . . . . : 255.255.254.0
        Default Gateway . . . . . . . . . : 172.17.12.1
C:\Documents and Settings\liuzy>sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期三 7月 23 16:29:32 2014
Copyright (c) 1982, 2010, Oracle.  All rights reserved.
SQL> conn sys/oracle@sicspcdb_training_linux as sysdba
ERROR:
ORA-12537: TNS: 连接关闭

实验测试成功。

4、结论

数据库安全问题是一个系统问题,一套安全的数据库应用系统需要进行全方面的保护配置。本篇介绍的限定IP访问手段,是Oracle平台上非常简单实用的手段。记录下来,留待需要朋友待查。

本文转自ICT时空 dbasdk博客,原文链接:使用Oracle Net实现限制特定IP访问数据库 ,如需转载请自行联系原博主。

相关文章
|
11天前
|
Oracle 关系型数据库 数据库
已解决:idea 连接 oracle 数据库 避雷
已解决:idea 连接 oracle 数据库 避雷
|
1天前
|
Oracle 关系型数据库 数据库
实时计算 Flink版产品使用问题之连接到Oracle数据库但无法读取到数据,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4天前
|
存储 Oracle 关系型数据库
Oracle数据库快速入门
Oracle数据库快速入门
7 0
|
5天前
|
存储 Oracle 关系型数据库
|
8天前
|
SQL Oracle 关系型数据库
探索 Linux 命令 `db_archive`:Oracle 数据库归档日志的工具
探索 Linux 中的 `db_archive`,实际与 Oracle 数据库归档日志管理相关。在 Oracle 中,归档日志用于恢复,当在线重做日志满时自动归档。管理员可使用 SQL*Plus 查看归档模式,通过 `RMAN` 进行备份和恢复操作。管理归档日志需谨慎,避免数据丢失。了解归档管理对 Oracle 管理员至关重要,确保故障时能快速恢复数据库。
|
9天前
|
SQL Oracle 关系型数据库
改变Oracle数据库连接端口
改变Oracle数据库连接端口
16 4
|
12天前
|
SQL Oracle 关系型数据库
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
|
12天前
|
SQL Oracle 关系型数据库
oracle数据库与sql
Oracle数据库和SQL之间存在一些关键差异。以下是对这些差异的详细解释: 1. **开放性**: * Oracle数据库具有显著的开放性,它能在所有主流平台上运行,这为用户提供了选择最
|
14天前
|
关系型数据库 Oracle 数据库
数据库漫谈-oracle
首先写oracle,这是关系型数据库的最早玩家,也是最巅峰
|
24天前
|
Oracle 关系型数据库 数据库
实时计算 Flink版产品使用合集之采集Oracle数据库时,归档日志大小暴增的原因是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

推荐镜像

更多