Oracle限制账号登录IP,Oracle限制用户只能从指定IP登录

为了数据库安全,有时候需要限制某些数据库用户只有特定的IP才能登陆,使用触发器,获取登录用户的IP就可以实现上述功能。

SQL语句如下:

CREATE OR REPLACE TRIGGER system.check_ip_addresses

AFTER logon ON DATABASE

BEGIN

IF USER IN ('USER1',

'USER2') THEN

IF sys_context('USERENV',

'IP_ADDRESS') NOT IN ('192.168.0.101',

'192.168.0.102') THEN

raise_application_error(-20000,

'Can not log in from this IP address (' ||

sys_context('USERENV',

'IP_ADDRESS') || ')');

END IF;

END IF;

END;

使用USER1用户登录,会报如下错误,禁止登录:

0818b9ca8b590ca3270a3433284dd417.png

代码优化,只允许特定数据库用户远程登录

SQL代码如下:

CREATE OR REPLACE TRIGGER system.check_ip_addresses

AFTER logon ON DATABASE

BEGIN

DECLARE

l_count NUMBER;

BEGIN

SELECT COUNT(1)

INTO l_count

FROM cux_local_ip lip

WHERE lip.ip = sys_context('USERENV',

'IP_ADDRESS');

IF l_count = 0 THEN

SELECT COUNT(1)

INTO l_count

FROM cux_acess_remoteip_user ru

WHERE ru.user_name = USER

AND (ru.access_ip = 'ALL' OR sys_context('USERENV',

'IP_ADDRESS') = ru.access_ip);

IF l_count = 0 AND USER !='SYSTEM' THEN

raise_application_error(-20000,

'Login error,Permission denied!');

END IF;

END IF;

END;

END;

其中,

表cux_local_ip,代表本地IP,允许登录所有用户

cux_acess_remoteip_user,字段user_name代表哪些可以在对应的IP登录,access_ip为登录IP(ALL代表所有IP都能登录)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值