概述

很多时候我们想实现限制某个IP段登录数据库,比较常用的是用触发器来实现,这里大致介绍下。


触发器实现

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=’NWPP’
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;
/

说明:该触发器对用户EPAY_USER进行了IP限制(只允许’192.168.219.20′,’192.168.219.22’,如果需要设置IP段,用%或?代替即可,如’192.168.219.%‘)。


测试验证

1)从非允许IP地址登陆 (192.168.219.21),连接失败

2)从允许IP地址登陆(192.168.219.22),连接成功

3)从本地登陆(192.168.219.23)不受IP限制影响,连接成功


这个触发器还是挺好用的,大家有空也可以自己测试一下。后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~