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

相关文章
|
3月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
364 93
|
2月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
574 2
|
2月前
|
Oracle 关系型数据库 Linux
【赵渝强老师】使用NetManager创建Oracle数据库的监听器
Oracle NetManager是数据库网络配置工具,用于创建监听器、配置服务命名与网络连接,支持多数据库共享监听,确保客户端与服务器通信顺畅。
202 0
|
5月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
3月前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
303 8
|
5月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
266 11
|
5月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—服务器异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库没有备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库文件; 4、导出并验证恢复的数据库文件。
|
7月前
|
Go
在golang中发起http请求以获取访问域名的ip地址实例(使用net, httptrace库)
这只是追踪我们的行程的简单方法,不过希望你跟着探险家的脚步,即使是在互联网的隧道中,也可以找到你想去的地方。接下来就是你的探险之旅了,祝你好运!
370 26
|
5月前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle RMAN的目录数据库
Oracle RMAN默认将备份元信息存储在控制文件中,但控制文件损坏或丢失会导致恢复失败,且备份增多会使控制文件无限增长。为解决这些问题,Oracle引入了RMAN目录数据库(Catalog Database),专门用于存储RMAN备份的元信息。使用目录数据库可提升备份管理效率,支持多数据库共享、长期备份历史记录存储,并可保存RMAN脚本。本文详细介绍了如何创建目录数据库、注册目标数据库及其操作步骤。
142 0
|
6月前
|
存储 Oracle 关系型数据库
oracle数据恢复—oracle数据库执行错误truncate命令的数据恢复案例
oracle数据库误执行truncate命令导致数据丢失是一种常见情况。通常情况下,oracle数据库误操作删除数据只需要通过备份恢复数据即可。也会碰到一些特殊情况,例如数据库备份无法使用或者还原报错等。下面和大家分享一例oracle数据库误执行truncate命令导致数据丢失的数据库数据恢复过程。

热门文章

最新文章

推荐镜像

更多