1. 程式人生 > >轉://因觸發器限制導致oracle用戶登錄失敗

轉://因觸發器限制導致oracle用戶登錄失敗

address alt Owner 文件 文件中 ora 限制ip ddr ati

使用PL/SQL DEV登錄數據庫時,出現如下錯誤
技術分享

手工創建了test用戶,通過dev工具登錄沒問題。懷疑數據庫中有些用戶限制了登錄的。再看錯誤編號:ORA-20001,oracle保留的異常錯誤號範圍為-20999到-20000,提供給用戶自定義異常使用,進一步確認某些用戶是做了限制,一般限制方法有兩種:
1、在sqlnet.ora文件中配置
例:限制IP地址192.168.131.109對數據庫的訪問,在sqlnet.ora文件中添加如下內容:
tcp.validnode_checking=yes #啟用IP限制功能
tcp.invited_nodes=(192.168.130.11) #允許訪問數據庫的IP地址,多個IP使用逗號分開
tcp.excluded_nodes=(192.168.131.109) #禁止訪問數據庫的IP地址,多個IP使用逗號分開

2、使用trigger
在trigger中定義,哪些IP及哪些用戶能夠遠程登錄數據庫。
註:使用profile是不能做到限制IP登錄的。

從問題描述中,sqlnet.ora方式不能定義錯誤號,而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;

建議:
1、不受限用戶登錄再加前綴訪問受限用戶的對象
2、去除觸發器,但可能是業務或安全要求,一般不建議

轉://因觸發器限制導致oracle用戶登錄失敗