限制訪問(wèn)Oracle客戶端IP方法總結(jié)
在itpub上有一個(gè)帖子討論了一個(gè)話題,就是關(guān)于限定訪問(wèn)Oracle客戶端IP的方法問(wèn)題的討論,我印象中似乎這樣的問(wèn)題在論壇上已經(jīng)討論了比較多了,今天就總結(jié)一下。
http://www.itpub.net/743725,1.html
這里討論的在Oracle數(shù)據(jù)庫(kù)層面上限制IP的方法,當(dāng)然還有可以在網(wǎng)絡(luò)層面上限制IP,例如防火墻軟件等方式。應(yīng)用層,例如:WebLogic設(shè)置訪問(wèn)數(shù)據(jù)庫(kù)的IP。
在Oracle數(shù)據(jù)庫(kù)中由于版本的差異,可以通過(guò)不同的方式來(lái)解決這些問(wèn)題。
有幾種方式來(lái)實(shí)現(xiàn)這樣的功能:
1、 修改SQLNET.ora文件限制訪問(wèn)數(shù)據(jù)庫(kù)的IP。
2、 使用觸發(fā)器實(shí)現(xiàn)。
sqlnet.ora文件的功能:
1. Specify the client domain to append to unqualified names
2. Prioritize naming methods
3. Enable logging and tracing features
4. Route connections through specific processes
5. Configure parameters for external naming
6. Configure Oracle Advanced Security
7. Use protocol-specific parameters to restrict access to the database
這里使用的就是sqlnet.ora文件的第七項(xiàng)功能限制訪問(wèn)數(shù)據(jù)庫(kù)的連接。
適用版本:oracle 9i以上版本
在9i提供了幾個(gè)參數(shù):
TCP.EXCLUDED_NODES
設(shè)置禁止訪問(wèn)數(shù)據(jù)庫(kù)的IP地址列表。
TCP.INVITED_NODES
設(shè)置允許訪問(wèn)數(shù)據(jù)庫(kù)的IP地址列表,當(dāng)這個(gè)參數(shù)和TCP.EXCLUDED_NODES設(shè)置的地址相同的時(shí)候?qū)⒏采wTCP.EXCLUDED_NODES設(shè)置。
TCP.VALIDNODE_CHECKING
檢測(cè)上述參數(shù)的設(shè)置。
例如:
tcp.validnode_checking=yes #允許訪問(wèn)的ip tcp.invited_nodes =(ip1,ip2,……) #不允許訪問(wèn)的ip tcp.excluded_nodes=(ip1,ip2,……)
通過(guò)這樣的設(shè)置就可以根據(jù)自己的需要更改,
需要注意的問(wèn)題:
1、 需要設(shè)置參數(shù)為YES,這樣才能激活。
2、 建議設(shè)置允許訪問(wèn)的IP,因?yàn)镮P地址有可能被隨意修改,就不能起到自己的目的。
3、 TCP當(dāng)參數(shù)TCP.INVITED_NODES和TCP.EXCLUDED_NODES設(shè)置的地址相同的時(shí)候?qū)⒏采wTCP.EXCLUDED_NODES設(shè)置。
4、 需要重啟監(jiān)聽器才能生效。
5、 這個(gè)方式只是適合TCP協(xié)議。
6、 這個(gè)配置適用于9i以上版本。在9i之前的版本使用文件protocol.ora。
7、 在服務(wù)器上直接連接數(shù)據(jù)庫(kù)不受影響。
8、 這種限制方式事通過(guò)監(jiān)聽器來(lái)限制的。
9、 這個(gè)限制只是針對(duì)IP檢測(cè),對(duì)于用戶名檢測(cè)事不支持的。
10、使用觸發(fā)器
create or replace trigger stop_52_connect after logon on scott2.schema declare ipinfo VARCHAR2(30); begin select sys_context('userenv','ip_address') into ipinfo from dual; if ipinfo='172.16.0.52' then raise_application_error('-20001','you can not logon by scott2'); end if; end stop_52_connect;