歐瑞客--尋找「自慢」絕活
如何限制Client端連線到Oracle的方法
在Oracle資料庫上限制Client連線的方法,當然有可以從網路層上限制IP,例如防火牆等方式。
應用層,例如:WebLogic設定連線資料庫的IP。
在Oracle資料庫,可以透過不同的方式來解決這些問題。
以下介紹兩個方式來實現這樣的功能:
1、 修改SQLNET.ora文件來限制訪問資料庫的IP。
2、 使用觸發器實現。
以下範例就是使用sqlnet.ora的功能限制。
適用版本:oracle 9i以上版本
在9i提供了幾個參數:
A. TCP.EXCLUDED_NODES
設定禁止訪問資料庫的IP地址列表。
B. TCP.INVITED_NODES
設定允許訪問資料庫的IP地址列表,當這個參數和TCP.EXCLUDED_NODES設定的地址相同的時候
將覆蓋TCP.EXCLUDED_NODES設定。
C. TCP.VALIDNODE_CHECKING
檢測上述參數的設定。
例如:
tcp.validnode_checking=yes
#允許訪問的ip
tcp.invited_nodes =(ip1,ip2,……)
#不允許訪問的ip
tcp.excluded_nodes=(ip1,ip2,……)
透過這樣的設定就可以根據自己的需要更改,
需要注意的問題:
1、 需要設定參數為YES,這樣才能啟動。
2、 建議設定允許訪問的IP,因為IP地址有可能被隨意修改,這樣比較安全。
3、 TCP當參數TCP.INVITED_NODES和TCP.EXCLUDED_NODES設定的地址相同的時候將覆蓋TCP.EXCLUDED_NODES設定。
4、 需要重啟監聽器才能生效。
5、 這個方式只是適合TCP協定。
6、 這個配置適用9i以上版本。在9i之前的版本使用文件protocol.ora。
7、 在服務器上直接連接資料庫不受影響。
8、 這種限制方式是透過監聽器來限制的。
使用觸發器
很多時候我們需要寫一個logon trigger來進行帳號登入的控管。
在 Three-tier 架構下,大部分的程式可能都是由一個固定的帳號,
授與適當的權限經由AP Server連接到後端的Oracle資料庫來進行一般操作,
這個帳號的權限可能很大,而你並不希望programer利用這個帳號進入資料庫做一些測試動作,
因為這樣就達不到有效權限控管的要求。可是這個AP專用的帳號及密碼可能是半公開的,
你如何防止這樣的情況發生呢? 寫一個logon trigger 也許是不錯的主意。
CREATE OR REPLACE TRIGGER LOGON_DB_TRIGGER
AFTER LOGON ON DATABASE
DECLARE
IP VARCHAR2(30);
UNAME VARCHAR2(30);
BEGIN
SELECT SYS_CONTEXT ('USERENV','IP_ADDRESS'),USERNAME INTO IP,UNAME FROM V$SESSION
WHERE AUDSID=USERENV('SESSIONID');
IF IP != '10.70.36.120' AND
UNAME = 'STEVEN' THEN
RAISE_APPLICATION_ERROR(-20001,'Access Deny');
END IF;
END LOGON_DB_TRIGGER;
寫好這個Trigger,只要使用者帳號為STEVEN,且來源IP不是10.70.36.120都會被拒絕連線掉喔!!
這樣是不是多了些安全管控呢?特別注意一點,如果欲受限制的帳號權限為DBA or SYSDBA者,
將不受此Trigger管制。
刪除觸發器
DROP TRIGGER LOGON_DB_TRIGGER;
沒有留言:
張貼留言