zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

[Oracle]如何使用触发器实现IP限制用户登录

OracleIP 实现 使用 如何 用户 触发器 登录
2023-06-13 09:15:03 时间
下面是一个触发器的例子:
复制代码代码如下:

createorreplacetriggerlogon_ip_control
afterlogonondatabase
declare
 ipSTRING(30);
 userSTRING(30);
begin
SELECTSYS_CONTEXT("USERENV","SESSION_USER")intouserfromdual;
SELECTSYS_CONTEXT("USERENV","IP_ADDRESS")intoipfromdual;
ifuser="EPAY_USER"
 THEN
     IFipnotin("192.168.219.20","192.168.219.22") 
     THENraise_application_error(-20001,"User"||user||"isnotallowedtoconnectfrom"||ip);
     ENDIF;
ENDIF;
end;
/

该触发器对用户EPAY_USER进行了IP限制(只允许"192.168.219.20","192.168.219.22",如果需要设置IP段,用%或?代替即可,如"192.168.219.%‘)。
下面看几个例子测试一下:
1)从非允许IP地址登陆(192.168.219.21),连接失败
复制代码代码如下:

[oracle@lxdb2~]$sqlplusepay_user@pri
SQL*Plus:Release11.2.0.3.0ProductiononWedJul319:23:482013
Copyright(c)1982,2011,Oracle. Allrightsreserved.
Enterpassword:
ERROR:
ORA-00604:erroroccurredatrecursiveSQLlevel1
ORA-20001:UserEPAY_USERisnotallowedtoconnectfrom192.168.219.21
ORA-06512:atline10

2)从允许IP地址登陆(192.168.219.22),连接成功
复制代码代码如下:
[oracle@lxdb1~]$sqlplusepay_user
SQL*Plus:Release11.2.0.3.0ProductiononWedJul311:24:252013
Copyright(c)1982,2011,Oracle. Allrightsreserved.
Enterpassword:
Connectedto:
OracleDatabase11gEnterpriseEditionRelease11.2.0.3.0-64bitProduction
WiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions

3)从本地登陆(192.168.219.23)不受IP限制影响,连接成功
复制代码代码如下:
[oracle@lxdb1~]$sqlplusepay_user
SQL*Plus:Release11.2.0.3.0ProductiononWedJul311:24:252013
Copyright(c)1982,2011,Oracle. Allrightsreserved.
Enterpassword:
Connectedto:
OracleDatabase11gEnterpriseEditionRelease11.2.0.3.0-64bitProduction
WiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions