使用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平臺上非常簡單實用的手段。記錄下來,留待需要朋友待查。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30496894/viewspace-1825202/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 限制特定IP訪問資料庫資料庫
- Oracle資料庫限制訪問IPOracle資料庫
- 使用sqlnet.ora禁止特定IP訪問資料庫SQL資料庫
- 如何限制ip訪問Oracle資料庫Oracle資料庫
- 【LISTENER】使用sqlnet.ora禁止特定IP訪問資料庫SQL資料庫
- 觸發器限制指定IP訪問oracle資料庫觸發器Oracle資料庫
- 設定oracle資料庫IP訪問限制(IP白名單黑名單)Oracle資料庫
- 資料庫限制/允許某些IP訪問資料庫
- Oracle配置sqlnet.ora限制ip訪問[Oracle基礎]OracleSQL
- 【方法】如何限定IP訪問Oracle資料庫Oracle資料庫
- 如何限定IP訪問Oracle資料庫-轉Oracle資料庫
- 禁止某個IP訪問Oracle資料庫Oracle資料庫
- 使用SQLNET.ora檔案限制Ip地址訪問SQL
- Oracle資料庫訪問限制繞過漏洞 解決Oracle資料庫
- 利用淘寶ip庫限制地區訪問
- Sqlserver限制賬戶在哪些ip下才可以訪問資料庫SQLServer資料庫
- .htaccess IP訪問限制
- ORACLE 11g sqlnet.ora 設定限制IP 訪問OracleSQL
- nginx限制ip訪問(轉)Nginx
- Windows限制訪問指定IPWindows
- windows設定僅訪問特定ipWindows
- 限制訪問Oracle客戶端IP方法總結Oracle客戶端
- 3.2.4 開啟資料庫到限制訪問模式資料庫模式
- Oracle資料庫訪問控制Oracle資料庫
- [開源] .Net 使用 ORM 訪問 華為GaussDB資料庫ORM資料庫
- ASP實現限制一個ip只能訪問一次的方法
- 通過SQLNET.ora檔案限制Ip地址訪問SQL
- 透過SQLNET.ora檔案限制Ip地址訪問SQL
- oracle透過trigger來限制使用者和ip連線資料庫的限制Oracle資料庫
- Holer實現MongoDB資料庫外網訪問MongoDB資料庫
- Holer實現外網訪問SQLServer資料庫SQLServer資料庫
- Holer實現外網訪問PostgreSQL資料庫SQL資料庫
- [zhuan]linux限制IP訪問sshLinux
- laravel 單使用者 單IP 頻次訪問限制Laravel
- nginx+lua(OpenResty),實現訪問限制NginxREST
- Holer實現外網訪問MariaDB資料庫資料庫
- 【PRODUCE】Oracle 通過儲存過程限制使用者訪問表資料Oracle儲存過程
- 使用R2DBC實現資料庫的響應式訪問資料庫