[Oracle] 如何使用觸發(fā)器實(shí)現(xiàn)IP限制用戶登錄
更新時(shí)間:2013年07月12日 10:35:53 作者:
在Oracle里,不像MySQL那樣方便,可以直接在用戶上進(jìn)行IP限制,Oracle要實(shí)現(xiàn)用戶級(jí)別的IP限制,可以使用觸發(fā)器來(lái)迂回實(shí)現(xiàn),以下就是示例,需要的朋友可以參考下
下面是一個(gè)觸發(fā)器的例子:
create or replace trigger logon_ip_control
after logon on database
declare
ip STRING(30);
user STRING(30);
begin
SELECT SYS_CONTEXT('USERENV','SESSION_USER') into user from dual;
SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') into ip from dual;
if user='EPAY_USER'
THEN
IF ip not in ('192.168.219.20','192.168.219.22')
THEN raise_application_error(-20001,'User '||user||' is not allowed to connect from '||ip);
END IF;
END IF;
end;
/
該觸發(fā)器對(duì)用戶EPAY_USER進(jìn)行了IP限制(只允許'192.168.219.20','192.168.219.22',如果需要設(shè)置IP段,用%或?代替即可,如'192.168.219.%‘)。
下面看幾個(gè)例子測(cè)試一下:
1)從非允許IP地址登陸 (192.168.219.21),連接失敗
[oracle@lxdb2 ~]$ sqlplus epay_user@pri
SQL*Plus: Release 11.2.0.3.0 Production on Wed Jul 3 19:23:48 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Enter password:
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: User EPAY_USER is not allowed to connect from 192.168.219.21
ORA-06512: at line 10
2)從允許IP地址登陸(192.168.219.22),連接成功
[oracle@lxdb1 ~]$ sqlplus epay_user
SQL*Plus: Release 11.2.0.3.0 Production on Wed Jul 3 11:24:25 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
3)從本地登陸(192.168.219.23)不受IP限制影響,連接成功
[oracle@lxdb1 ~]$ sqlplus epay_user
SQL*Plus: Release 11.2.0.3.0 Production on Wed Jul 3 11:24:25 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
復(fù)制代碼 代碼如下:
create or replace trigger logon_ip_control
after logon on database
declare
ip STRING(30);
user STRING(30);
begin
SELECT SYS_CONTEXT('USERENV','SESSION_USER') into user from dual;
SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') into ip from dual;
if user='EPAY_USER'
THEN
IF ip not in ('192.168.219.20','192.168.219.22')
THEN raise_application_error(-20001,'User '||user||' is not allowed to connect from '||ip);
END IF;
END IF;
end;
/
該觸發(fā)器對(duì)用戶EPAY_USER進(jìn)行了IP限制(只允許'192.168.219.20','192.168.219.22',如果需要設(shè)置IP段,用%或?代替即可,如'192.168.219.%‘)。
下面看幾個(gè)例子測(cè)試一下:
1)從非允許IP地址登陸 (192.168.219.21),連接失敗
復(fù)制代碼 代碼如下:
[oracle@lxdb2 ~]$ sqlplus epay_user@pri
SQL*Plus: Release 11.2.0.3.0 Production on Wed Jul 3 19:23:48 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Enter password:
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: User EPAY_USER is not allowed to connect from 192.168.219.21
ORA-06512: at line 10
2)從允許IP地址登陸(192.168.219.22),連接成功
復(fù)制代碼 代碼如下:
[oracle@lxdb1 ~]$ sqlplus epay_user
SQL*Plus: Release 11.2.0.3.0 Production on Wed Jul 3 11:24:25 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
3)從本地登陸(192.168.219.23)不受IP限制影響,連接成功
復(fù)制代碼 代碼如下:
[oracle@lxdb1 ~]$ sqlplus epay_user
SQL*Plus: Release 11.2.0.3.0 Production on Wed Jul 3 11:24:25 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Enter password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
相關(guān)文章
Oracle使用like查詢時(shí)對(duì)下劃線的處理方法
這篇文章主要介紹了Oracle使用like查詢時(shí)對(duì)下劃線的處理方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Oracle使用rownum分頁(yè)方式實(shí)例代碼
ROWNUM是一個(gè)序列,是oracle數(shù)據(jù)庫(kù)從數(shù)據(jù)文件或緩沖區(qū)中讀取數(shù)據(jù)的順序,這篇文章主要給大家介紹了關(guān)于Oracle使用rownum分頁(yè)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07Oracle過(guò)程與函數(shù)的區(qū)別分析
在Oracle數(shù)據(jù)庫(kù)中,過(guò)程和函數(shù)都以編譯后的形式存放在數(shù)據(jù)庫(kù)中,二者的主要區(qū)別在于他們的調(diào)用方式,下文對(duì)二者的區(qū)別作了詳盡的描述,供您參考2014-08-08使用Oracle數(shù)據(jù)庫(kù)登錄時(shí)被告知用戶被鎖怎么解決
這篇文章主要介紹了使用Oracle數(shù)據(jù)庫(kù)登錄時(shí)被告知用戶被鎖怎么解決的相關(guān)資料,需要的朋友可以參考下2016-07-07在Tomcat服務(wù)器下使用連接池連接Oracle數(shù)據(jù)庫(kù)
本文為大家介紹下在Tomcat服務(wù)器下使用連接池來(lái)連接數(shù)據(jù)庫(kù)的操作,下面有個(gè)不錯(cuò)的示例,大家可以參考下2014-01-01Oracle連接數(shù)據(jù)庫(kù)提示ORA-12638:身份證明檢索失敗的解決辦法
今天在使用應(yīng)用程序連接Oracle時(shí)碰到了"ORA-12638:身份證明檢索失敗"錯(cuò)誤,給大家總結(jié)解決方法,這篇文章主要給大家介紹了關(guān)于Oracle連接數(shù)據(jù)庫(kù)提示ORA-12638:身份證明檢索失敗的解決辦法,需要的朋友可以參考下2023-10-10Oracle數(shù)據(jù)庫(kù)如何刪除歸檔日志文件
這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫(kù)如何刪除歸檔日志文件的相關(guān)資料,當(dāng)Oracle中的歸檔日志空間滿時(shí),則需要把它清空,否則將會(huì)影響數(shù)據(jù)庫(kù)正常運(yùn)行,將無(wú)法正常登入ORACLE,需要的朋友可以參考下2023-11-11