使用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访问数据库 ,如需转载请自行联系原博主。

相关文章
|
7天前
|
前端开发 C# 数据库
.NET中使用BootstrapBlazor组件库Table实操篇
.NET中使用BootstrapBlazor组件库Table实操篇
|
7天前
|
Linux C# Android开发
.NET Avalonia开源、免费的桌面UI库 - SukiUI
.NET Avalonia开源、免费的桌面UI库 - SukiUI
|
8天前
|
开发框架 Oracle 关系型数据库
ASP.NET实验室LIS系统源码 Oracle数据库
LIS是HIS的一个组成部分,通过与HIS的无缝连接可以共享HIS中的信息资源,使检验科能与门诊部、住院部、财务科和临床科室等全院各部门之间协同工作。 
21 4
|
12天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库:装上去,飞起来!
本文是一篇关于Oracle数据库安装和使用的博文摘要。作者以轻松幽默的笔调介绍了自己在实验中掌握的Oracle数据库基本操作,包括使用组件查看命令、配置数据库监听器等。作者也分享了在实验中遇到的一些有趣问题,如SQL语句缺少分号导致的意外错误。此外,作者还强调了登录sys用户和启动实例加载数据库的注意事项,并鼓励读者面对挑战时保持乐观,不断提升自己的能力。整体风格风趣严谨,引人入胜。
201 0
|
2月前
|
存储 Java 数据库
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数(二)
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数
25 0
|
2天前
|
Oracle 关系型数据库 Java
plsql链接远程Oracle数据库步骤
实际工作中,我们往往需要使用 PLSQL Develope 工具连接远程服务器上的 ORACLE 数据库进行管理,但是由于 ORACLE 安装在本地电脑步骤繁琐,并且会耗费电脑的很大一部分资源,因此,我们寻求一种不需要在本地安装 ORACLE 数据库而能直接使用 PLSQL Develope 工具连接到远程服务器 ORACLE 的方法。
14 2
|
8天前
|
Oracle 关系型数据库 数据处理
某教程学习笔记(一):10、oracle数据库注入
某教程学习笔记(一):10、oracle数据库注入
6 0
|
24天前
|
SQL 开发框架 .NET
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
55 0
|
1月前
|
存储 Oracle 关系型数据库
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
|
2月前
|
存储 SQL Java
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数(一)
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数
26 0

推荐镜像

更多