Oracle特定使用者登入失敗案例 ORA-20001

來源:互聯網
上載者:User

昨晚收到開發的郵件,說使用PL/SQL DEV登入資料庫時,出現如下錯誤,要求處理下:

看到這個錯誤我也比較鬱悶,沒碰到過這種情況。於是手工建立了一個測試使用者scott,發現遠程登入沒有問題的。此時考慮應該是資料庫中有些使用者限制了登入的。再看錯誤編號:ORA-20001,Oracle保留的異常錯誤號碼範圍為-20999到-20000,提供給使用者自訂異常使用的,這進一步確認了資料庫的一些使用者被做了限制的。那到底做了哪些限制呢?
通常有兩種方法:
(1)在sqlnet.ora檔案中配置,比如:
限制IP地址192.168.131.109對資料庫的訪問
在sqlnet.ora檔案中添加如下內容:
tcp.validnode_checking=yes
tcp.invited_nodes=(192.168.130.11)
tcp.excluded_nodes=(192.168.131.109)

第一行的含義:啟用IP限制功能;
第二行的含義:允許訪問資料庫的IP地址清單,多個IP地址使用逗號分開,此例中我們寫入資料庫伺服器的IP地址;
第三行的含義:禁止訪問資料庫的IP地址清單,多個IP地址使用逗號分開,此處我們寫入欲限制的IP地址192.168.131.109。
然後重啟監聽生效。

(2)使用trigger
在trigger中定義,哪些IP及哪些使用者能夠遠程登入資料庫。

說明:使用profile是不能做到限制IP登入的。

很明顯,方法(1)不能自訂錯誤號碼:ORA-20001,而使用方法(2)trigger中可以定義錯誤號碼,很有可能使用的是trigger,於是查看:

select t.owner,t.trigger_name,t.triggering_event,t.table_owner,t.status,t.trigger_body,t.description from dba_triggers t where t.triggering_event like '%LOGON%';


果然是使用trigger限制登入IP及使用者的。

trigger_body:
DECLARE
ipaddr VARCHAR2(30);
BEGIN
SELECT sys_context('userenv', 'ip_address') INTO ipaddr FROM dual;
IF ipaddr not in ('192.168.131.54','192.168.131.55','192.168.131.97','192.168.131.60','192.168.131.61','192.168.131.63','192.168.131.64','192.168.131.62','192.168.131.65','192.168.131.95','192.168.131.57','192.168.131.58','192.168.131.59','192.168.131.94','192.168.131.93','192.168.105.94','192.168.105.95','192.168.105.96','192.168.105.98','192.168.105.99','192.168.105.65') THEN
raise_application_error('-20001', 'You can not login,Please contact administrator');
END IF;
END disablelogin_userdb1;

最後給出的建議:

可以以mtdb(另一個使用者,沒有做限制)登入 訪問加使用者首碼,或者去除觸發器(不建議)。

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.