一次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,然后需要找到日志路径:

[email protected]$ 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-04 11:11:22

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

ORA-28000: the account is locked 查哪个具体ip地址造成

查系统默认的策略,连续验证10次错误帐户即会被锁 SQL> select resource_name, limit from dba_profiles where profile='DEFAULT'; RESOURCE_NAME LIMIT -------------------------------- ---------------------------------------- COMPOSITE_LIMIT UNLIMITED SESSIONS_PER_USER UNLIMITED C

The account is locked

SQL> select * from v$version where rownum=1; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production SQL> !cat /etc/issue Enterprise Linux Enterpr

ORA-28000: the account is locked 解决

第一步:使用PL/SQL,登录名system,数据库名称不变,选择类型的时候把Normal修改为Sysdba.登录成功... 第二步:执行下面的语句.... DECLare str VARCHAR2(1000); BEGIN FOR c1 in (SELECT username FROM dba_users /*+ filter */ ) LOOP str:='alter user '||c1.username||' account unlock'; EXECUTE IMMEDIATE str;

解决ORA-28000: the account is locked

在oracle中,连续十次尝试登陆不成功,那么此账户将会被锁定(lock).当使用被锁定的账户登录时,系统会报错:ORA-28000:the account is locked.本文描述次错误的解决思路. 1.       使用system或者sys账户登录,注意请以管理员身份登录.Sytem和sys的默认密码请在网上查找.本文以sys账户为例,sys的默认密码是:change_on_install  . 2.      使用命令解锁用户.命令为:alteruser usernameaccoun

oralce的系统用户system的输入口令怎么找回?遇见ORA-28000: the account is locked怎么解锁?

好几个月前安装的Oracle软件忽然想用就忘记了当初设置的口令了,今天查了下怎么找回. 以一个用户jqz/jqz(以前建立的一个用户,幸亏还记得)的身份登录后: SQL> connect/as sysdba 已连接. SQL> alter user system identified by system; 用户已更改. system的密码就是system了. 遇见下面的错误了怎么解决那: ORA-28000: the account is locked 第一步:使用PL/SQL,登录名为sys

Oracle登录报错ORA-28000: the account is locked

ORA-28000: the account is locked第一步:使用PL/SQL,登录名为system,数据库名称不变,选择类型的时候把Normal修改为Sysdba;第二步:选择myjob,查看users;第三步:选择system,右击点击“编辑”:第四步:修改密码,把“帐户被锁住”的勾去掉:第五步:点击“应用”再点击“关闭”:第六步:重新登录就可以通过验证了:第二种ALTER USER username ACCOUNT UNLOCK; 第三种 在plsql developer中要是以

Oracle account is locked or oracle user account logon denied

Following the below steps: Oracle account is locked 1. Type "Conn /as sysdba" in the sqlplus window; 2. Type "alter user AccountName unlocked. Try to logon again. Oracle user account logon denied 1. Type "Conn /as sysdba" in the s

Oracle 11g password过期被锁定报道 ORA-28000 the account is locked

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

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 connect