一次ORA-28000: the account is locked用户锁定的问题排查

今天同事反映一个问题,某个测试库修改了密码,并改了相关应用使用的密码后,仍出现一会账户就被锁住,报ORA-28000: the account is locked的错误。

检查过程:
1. 查看资源限制生效参数
SQL> show parameter resource
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
resource_limit                       boolean     FALSE
FALSE表示未启动资源限制。

2. 查看该用户所用的PROFILE
SQL> select resource_name, limit from dba_profiles where profile='DEFAULT';
RESOURCE_NAME                    LIMIT
-------------------------------- ----------------------------------------
COMPOSITE_LIMIT                  UNLIMITED
SESSIONS_PER_USER                UNLIMITED
CPU_PER_SESSION                  UNLIMITED
CPU_PER_CALL                     UNLIMITED
LOGICAL_READS_PER_SESSION        UNLIMITED
LOGICAL_READS_PER_CALL           UNLIMITED
IDLE_TIME                        UNLIMITED
CONNECT_TIME                     UNLIMITED
PRIVATE_SGA                      UNLIMITED
FAILED_LOGIN_ATTEMPTS            10
PASSWORD_LIFE_TIME               UNLIMITED
PASSWORD_REUSE_TIME              UNLIMITED
PASSWORD_REUSE_MAX               UNLIMITED
PASSWORD_VERIFY_FUNCTION         NULL
PASSWORD_LOCK_TIME               1
PASSWORD_GRACE_TIME              7
其中FAILED_LOGIN_ATTEMPTS表示连续登陆失败的次数,这里表示连续登陆10次失败则锁定用户。

3. 解除用户锁定ALTER USER pss3 ACCOUNT UNLOCK;后观察现象
SQL> select name, lcount from user$ where name='PSS3';
NAME                               LCOUNT
------------------------------ ----------
PSS3                                   10
不到一分钟,登陆失败次数就到10次了。

初步结论:
可能有应用仍使用旧的密码登陆,登陆失败后重复尝试,直到10次为止。

但问题就来了:
1. FAILED_LOGIN_ATTEMPTS设置为10次,但未启动resource_limit,为什么还受到10次的限制呢?
2. 怎么知道还有哪些应用由于未修改密码导致ORA错误呢?

问题1:FAILED_LOGIN_ATTEMPTS设置为10次,但未启动resource_limit,为什么还受到10次的限制呢
这篇MOS文章160528.1(Profile Limits (Resource Parameter(s)) Are Not Enforced / Do Not Work)文章说了一些:
After creating a new profile or altering an old one to limit the following profile resources there is no change: 
SESSIONS_PER_USER
CPU_PER_SESSION
CPU_PER_CALL
CONNECT_TIME
IDLE_TIME
LOGICAL_READS_PER_SESSION
COMPOSITE_LIMIT
PRIVATE_SGA
The resource usage limits are not enforced and the users that are assigned the profile continue to use resources beyond profile's limits.
CAUSE

The initialization parameter RESOURCE_LIMIT is set to FALSE (default).

由于未设置RESOURCE_LIMIT为TRUE,以上变量修改后不会生效。

这里没有提到FAILED_LOGIN_ATTEMPTS,换句话说,像FAILED_LOGIN_ATTEMPTS这些变量是不受RESOURCE_LIMIT参数限制的,再看FAILED_LOGIN_ATTEMPTS这种变量属于用户口令管理方面的,像上面这些变量则属于资源管理方面的,猜测Oracle对于资源管理的限制则需要RESOURCE_LIMIT为TRUE,对于口令管理方面的限制并不受RESOURCE_LIMIT的影响。

OCP教材中正好说了:“Profiles are a useful way of managing passwords and resources but can really only apply in an environment where every
application user has their own database user account.”注意到这里他将profile分成管理密码和资源两大类,虽然没有明说,但结合以上两段参考,以及上述实际碰到的问题,有理由相信口令管理方面的限制并不受RESOURCE_LIMIT参数的影响。

问题2:怎么知道还有哪些应用由于未修改密码导致ORA错误呢
上面尝试了UNLOCK账户后不到一分钟LCOUNT登录失败次数就到了10次,说明这段时间有应用频繁重试密码,进一步,如果我们能找到这段时间访问库的IP,再筛选可能的IP和密码修改的应用,就可能找到“罪魁祸首”。
要想找到访问库的IP,可以通过设置监听日志,查找IP。
监听器的日志类似于alert日志,帖子中说日志默认路径是$ORACLE_HOME/network/log/listener.log,但我用的11g,不知道是否修改过,并没有找到这个目录。至于怎么找到的,接下来会说到。
按照@secooler的教程,开启监听器日志的方式有两种:
1. 不需要重启监听器的情况下通过设置log_status参数为off来实现。
2. listener.ora文件中增加LOGGING_<listener_name>=OFF参数,然后重启监听器实现
可以根据不同需要选择不同的方式。
这里我选择第一种,执行lsnrctl后执行set log_status on,然后需要找到日志路径:
ora11g@vm-kvm-ora$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 20-AUG-2014 11:56:27
Copyright (c) 1991, 2011, Oracle.  All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                 TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date             30-APR-2014 15:22:19
Uptime                 111 days 20 hr. 34 min. 8 sec
Trace Level            off
Security                ON: Local OS Authentication
SNMP                   OFF
Listener Parameter File   /oracle/ora11g/product/11.2.0/network/admin/listener.ora
Listener Log File         /oracle/ora11g/diag/tnslsnr/vm-kvm-ora/listener/alert/log.xml
这里我们看到有个信息Listener Log File,后面就是对应的日志路径和日志文件名。
11g中使用了log.xml这种xml格式记录监听日志。
内容类似于:
<txt>20-AUG-2014 10:07:30 * (CONNECT_DATA=(SERVICE_NAME=pss3)(CID=(PROGRAM=dcs_data_sync)(HOST=v490h4-tux-t)(USER=dcsopen))) * (ADDRESS=(PROTOCOL=tcp)(HOST=x.x.x.x)(PORT=37339)) * establish * pss3 * 0
</txt>
因此只需要找到解锁用户后仍登录的IP,然后再筛选可能的应用就行了。

这里还有个知识点,就是FAILED_LOGIN_ATTEMPTS设置的是连续登录失败的次数,还是累计登录失败的次数?
FAILED_LOGIN_ATTEMPTS表示连续登录失败的次数

时间: 2025-01-30 15:48:46

一次ORA-28000: the account is locked用户锁定的问题排查的相关文章

Oracle 11g 报错 ORA-28000 the account is locked

                                                                     Oracle 11g 报错 ORA-28000 the account is locked 一.触发这个错误的原因及相关因素    是由于oracle11g中默认在default概要文件中设置了"PASSWORD_LIFE_TIME=180天"所导致,在Oracle 11g中是 存在密码过期问题的.   二.错误现象:     用户被锁定之后会报OR

Oracle 11g 密码过期被锁报 ORA-28000 the account is locked

一.触发这个错误的原因及相关因素    是由于oracle11g中默认在default概要文件中设置了"PASSWORD_LIFE_TIME=180天"所导致,在Oracle 11g中是 存在密码过期问题的. 二.错误现象: 用户被锁定之后会报ORA-28000的错误,并提示无法登录到数据库 SQL> conn system/oracle ERROR: ORA-28000: the account is locked Warning: You are no longer conn

【DG】DG备库报ORA-28000: the account is locked的解决办法

[DG]DG备库报ORA-28000: the account is locked的解决办法 测试用户为lhr现象:主备库的lhr用户的状态都是OPEN,但是,备库连接的时候报ORA-28000: the account is locked错误.在主库执行"alter user lhr identified by lhr account unlock;"同步到备库也不能解决,在备库该命令不能执行. 解决:重启DG环境的备库实例即可 参考:ORA-28000 On Active Data

Oracle 错误总结及问题解决 ORA

参考地址 ORA-00001: 违反唯一约束条件 (.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常.ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数ORA-00019: 超出最大会话许可数ORA-00020: 超出最大进程数 ()ORA-00021: 会话附属于其它某些进程:无法转换会话ORA-00022: 无效的会话 ID:访问被拒绝ORA-00023: 会话引用进程私用内存:无法分离会话ORA-00024: 单一进程模式下不允许从多个进程注册

m1上 配置OEM 怎样配置oracle oem

m1上 配置OEM [oracle@m1 ~]$ emca -config dbcontrol db STARTED EMCA at Oct 23, 2013 11:55:28 AM EM Configuration Assistant, Version 11.2.0.3.0 Production Copyright (c) 2003, 2011, Oracle.  All rights reserved. Enter the following information: Database SI

oracle安装成功之后检查简单命令

此篇文章来看下如果进入oracle的数据库. [oracle@oracle01 tools]$ ps -elf | grep ora_ | grep orcl   #查看进程 0 S oracle    12438      1  0  80   0 - 185418 semtim 12:50 ?       00:00:00 ora_pmon_orcl 0 S oracle    12440      1  0  80   0 - 185418 semtim 12:50 ?       00:

使用oracle的大数据工具ODCH访问HDFS数据文件

软件下载 Oracle Big Data Connectors:ODCH 下载地址: http://www.oracle.com/technetwork/bdc/big-data-connectors/downloads/index.html Jave SE 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk6u38-downloads-1877406.html Oracle11g下载地址: Oracle Enter

【密码】Oracle用户密码系列

[ 密码 ] Oracle 用户密码系列 1.1   BLOG 文档结构图   1.2   前言部分 1.2.1   导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ~O(∩_∩)O~ : ① 用户的 9 种状态含义 (重点) ② 如何解锁账户 ③ 如何修改密码无效状态 ④ 如何获取密码的密文,如何利用密文修改用户的密码 (重点) ⑤ 如何查询失败的登陆次数 ⑥ 11g 密码大小写问题 ⑦ 11g 密码延迟验证 ⑧ 密码复杂性校验   Ti

sqlplus / as sysdba无法登录的奇怪报错

最近看了一个问题,看问题的表现着实比较奇怪,困扰了我好一会儿. 问题的背景是帮助开发的同学解决一个数据库问题,最后问题解决之后,我想做一个操作系统级的检查,帮他们看看还有什么需要注意的地方.然后在命令行中国登陆到了这台数据库服务器,切换到oracle用户之后,查看到数据库实例为cytj,然后准备做一番检查. #ps -ef|grep smon root      3657 32596  0 17:37 pts/2    00:00:00 grep smon oracle    5433