转://因触发器限制导致oracle用户登录失败

Posted zfox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转://因触发器限制导致oracle用户登录失败相关的知识,希望对你有一定的参考价值。

使用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用户登录失败的主要内容,如果未能解决你的问题,请参考以下文章

点播转码相关常见问题及排查方式

plsql连接ORacle数据库时报:因目标主机或对象不存在,连接失败。怎样解决

[转帖] Oracle数据库 通过触发器 限制登录ip

ora-28001导致人事web APP 不好用

Oracle 数据库备份和恢复配置

Oracle EBS 初始化用户密码(转)