oracle特定用户登录失败案例
2013-05-13 11:47
197 查看
昨晚收到开发的邮件,说使用PL/SQL DEV登录数据库时,出现如下错误,要求处理下:
看到这个错误我也比较郁闷,没碰到过这种情况。于是手工创建了一个测试用户scott,发现远程登录没有问题的。此时考虑应该是数据库中有些用户限制了登录的。再看错误编号:ORA-20001,oracle保留的异常错误号范围为-20999到-20000,提供给用户自定义异常使用的,这进一步确认了数据库的一些用户被做了限制的。那到底做了哪些限制呢?
通常有两种方法:
(1)在sqlnet.ora文件中配置,比如:
限制IP地址192.168.131.109对数据库的访问
在sqlnet.ora文件中添加如下内容:
tcp.validnode_checking=yes
tcp.invited_nodes=(192.168.130.11)
tcp.excluded_nodes=(192.168.131.109)
第一行的含义:启用IP限制功能;
第二行的含义:允许访问数据库的IP地址列表,多个IP地址使用逗号分开,此例中我们写入数据库服务器的IP地址;
第三行的含义:禁止访问数据库的IP地址列表,多个IP地址使用逗号分开,此处我们写入欲限制的IP地址192.168.131.109。
然后重启监听生效。
(2)使用trigger
在trigger中定义,哪些IP及哪些用户能够远程登录数据库。
说明:使用profile是不能做到限制IP登录的。
很明显,方法(1)不能自定义错误号:ORA-20001,而使用方法(2)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;
最后给出的建议:
可以以mtdb(另一个用户,没有做限制)登录 访问加用户前缀,或者去除触发器(不建议)。
看到这个错误我也比较郁闷,没碰到过这种情况。于是手工创建了一个测试用户scott,发现远程登录没有问题的。此时考虑应该是数据库中有些用户限制了登录的。再看错误编号:ORA-20001,oracle保留的异常错误号范围为-20999到-20000,提供给用户自定义异常使用的,这进一步确认了数据库的一些用户被做了限制的。那到底做了哪些限制呢?
通常有两种方法:
(1)在sqlnet.ora文件中配置,比如:
限制IP地址192.168.131.109对数据库的访问
在sqlnet.ora文件中添加如下内容:
tcp.validnode_checking=yes
tcp.invited_nodes=(192.168.130.11)
tcp.excluded_nodes=(192.168.131.109)
第一行的含义:启用IP限制功能;
第二行的含义:允许访问数据库的IP地址列表,多个IP地址使用逗号分开,此例中我们写入数据库服务器的IP地址;
第三行的含义:禁止访问数据库的IP地址列表,多个IP地址使用逗号分开,此处我们写入欲限制的IP地址192.168.131.109。
然后重启监听生效。
(2)使用trigger
在trigger中定义,哪些IP及哪些用户能够远程登录数据库。
说明:使用profile是不能做到限制IP登录的。
很明显,方法(1)不能自定义错误号:ORA-20001,而使用方法(2)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;
最后给出的建议:
可以以mtdb(另一个用户,没有做限制)登录 访问加用户前缀,或者去除触发器(不建议)。
相关文章推荐
- 用户地址oracle特定用户登录失败案例
- Oracle数据库案例整理-登录Oracle数据库失败-Oracle初始化参数设置错误导致普通用户授予sysdba权限登录失败
- Oracle数据库案例整理-登录Oracle数据库失败-oracle用户没有添加到DBA用户组
- Oracle数据库案例整理-登录Oracle数据库失败-非oracle用户权限不足
- Oracle取消用户连续登录失败次数限制
- Oracle用户连续登录失败次数限制如何取消
- Oracle数据库案例整理-登录Oracle数据库失败-启动进程数大于Oracle系统设置的进程数
- 转://因触发器限制导致oracle用户登录失败
- Oracle用户连续登录失败次数限制如何取消
- Oracle中对用户登陆失败进行审计,查出相关登录信息(机器名)
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误,用户 'sa' 登录失败
- Oracle数据库案例整理-执行Oracle脚本失败或异常-oracle用户没有目录可执行权限导致执行SQL脚本失败
- ORACLE 记录连接用户的IP地址以及登录失败用户的IP地址
- Oracle数据库案例整理-导入导出Oracle数据失败-数据库用户被锁
- Oracle数据库案例整理-登录Oracle数据库失败-系统内存小于Oracle参数配置的memory_target值
- 使用触发器实现记录oracle用户登录失败信息到alert.log日志文件
- oracle查看用户登录失败次数及详细信息
- 转://因触发器限制导致oracle用户登录失败
- 使用Oracle的审计功能记录连接数据库登录失败的用户信息
- Servlet案例5:用户登录失败信息回显