oracle学习-用户被锁
2016-03-26 21:31
211 查看
近期有一个生产数据库用户总是被锁,导致生产环境有些应用的访问数据库连接失败,造成生产事故,针对用户被锁的问题进行如下记录说明。
首先将被锁用户解锁,然后排查具体原因。
解锁方式:
1.使用dba角色用户登录,查看用户是否被锁。
用户被锁原因:
1.频繁登陆oracle该用户密码错误,并超过一定的数目。
1)一般默认的用户密码错误数量为10。可以通过dba角色进行查看。
其中FAILED_LOGIN_ATTEMPTS的值为错误数量。默认为10。
故障排查:
如我此次出的问题为维护方将TongWeb中间件的服务停掉,但是未正确停掉该服务的java线程,由于维护方认为线程已经停止,因此在修改oracle用户的密码后,没有按照规定将该服务原有数据源密码修改,认为没有影响,但是恰恰该服务的一个线程还是启动并在尝试链接该用户,因此导致频繁密码错误将用户锁定。
可以通过查看数据库所在安装目录的监听日志进行时间点定位到应用(由于我们无法远程到生产方的数据库,无法查看他们的监听日志,因此如下是样例,不是真正的生产情况)
查看$ORACLE_HOME/network/admin/log/listener.log日志
10-MAR-2009 08:51:03 * (CONNECT_DATA=(SID=lhoms)(SERVER=DEDICATED)(CID=(PROGRAM=oracle)(HOST=omstestdb)(USER=oraoms))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.69.1.11)(PORT=49434)) * establish * lhoms * 0
10-MAR-2009 08:51:03 * (CONNECT_DATA=(SID=lhoms)(SERVER=DEDICATED)(CID=(PROGRAM=oracle)(HOST=omstestdb)(USER=oraoms))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.69.1.11)(PORT=49435)) * establish * lhoms * 0
这样可知是上面10.69.1.11的ip尝试多次失败登陆造成的被锁
由于我这边没有如此便利条件,因此我是将所有可能链接该数据库的服务器上的进程逐条查看并查看每个应用的数据库配置才找到原因。
2.第二个原因是该用户过期,默认的用户过期时间为180天,如果用户时间超过180天,则也会锁定用户。
使用dba角色用户登录,处理该问题。
1)查看该用户的profile,一般为default
4)之后需要将密码激活,使用dba角色登陆
首先将被锁用户解锁,然后排查具体原因。
解锁方式:
1.使用dba角色用户登录,查看用户是否被锁。
select username,lock_date from dba_users;2.查看用户如果lock_date有值则说明该用户被锁,需要进行解锁。
alter user username account unlock;排查问题的流程如下:
用户被锁原因:
1.频繁登陆oracle该用户密码错误,并超过一定的数目。
1)一般默认的用户密码错误数量为10。可以通过dba角色进行查看。
其中FAILED_LOGIN_ATTEMPTS的值为错误数量。默认为10。
select * from dba_profiles;2)进行修改为30次
alter profile default limit FAILED_LOGIN_ATTEMPTS 30;3)修改为无限次(不推荐,会造成数据库资源安全问题)
alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited;注:通过修改密码错误的允许次数这种方式只能治标不治本。真正还是需要查看是什么应用将该账户锁定。
故障排查:
如我此次出的问题为维护方将TongWeb中间件的服务停掉,但是未正确停掉该服务的java线程,由于维护方认为线程已经停止,因此在修改oracle用户的密码后,没有按照规定将该服务原有数据源密码修改,认为没有影响,但是恰恰该服务的一个线程还是启动并在尝试链接该用户,因此导致频繁密码错误将用户锁定。
可以通过查看数据库所在安装目录的监听日志进行时间点定位到应用(由于我们无法远程到生产方的数据库,无法查看他们的监听日志,因此如下是样例,不是真正的生产情况)
查看$ORACLE_HOME/network/admin/log/listener.log日志
10-MAR-2009 08:51:03 * (CONNECT_DATA=(SID=lhoms)(SERVER=DEDICATED)(CID=(PROGRAM=oracle)(HOST=omstestdb)(USER=oraoms))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.69.1.11)(PORT=49434)) * establish * lhoms * 0
10-MAR-2009 08:51:03 * (CONNECT_DATA=(SID=lhoms)(SERVER=DEDICATED)(CID=(PROGRAM=oracle)(HOST=omstestdb)(USER=oraoms))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.69.1.11)(PORT=49435)) * establish * lhoms * 0
这样可知是上面10.69.1.11的ip尝试多次失败登陆造成的被锁
由于我这边没有如此便利条件,因此我是将所有可能链接该数据库的服务器上的进程逐条查看并查看每个应用的数据库配置才找到原因。
2.第二个原因是该用户过期,默认的用户过期时间为180天,如果用户时间超过180天,则也会锁定用户。
使用dba角色用户登录,处理该问题。
1)查看该用户的profile,一般为default
select username,profile from dba_users;2)查看指定概要文件找到用户的权限所代表的时间,如default
select * from dba_profiles where profile = 'DEFAULT' and resource_name = 'PASSWORD_LIFE_TIME';3)修改该字段为unlimited,将默认180天修改成‘无限制’
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;修改结束后不需要重启数据库直接生效。
4)之后需要将密码激活,使用dba角色登陆
alter user username identified by <原来的密码>。
相关文章推荐
- oracle终端基本命令
- Mysql,Oracle,Java数据类型对应
- 只读事务的理解
- Ora-12514:tns: 监听程序当前无法识别连接描叙符中请求的服务
- ORA-12541:TNS:无监听程序
- oracle 服务的开启 和 关闭
- oracle 数据泵 详解
- Oracle 查询并删除重复记录的SQL语句
- win32程序读写64位oracle数据库中的中文乱码问题
- Oracle使用Scott用户登录
- Oracle 基础 导入数据库 删除用户、删除表空间、删除表空间下所有表
- [转]oracle误删数据的恢复
- Oracle密码错误次数过多账号锁定的问题
- Oracle中 无法删除当前已经连接的用户 解决方法
- Oracle11g release2数据导出到Oracle10g release2方法
- Oracle-03-初次连接数据库
- Oracle-02-数据库概述
- oracle 学习笔记
- oracle编译存储过程提示表或视图不存在的问题分析
- ORACLE多表关联UPDATE 语句