今天我的同事们反映的问题,测试库的变化password,并改变相关的应用程序中使用password后,其中一个仍然会出现在帐户被锁定,报告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次了。



初步结论:

可能有应用仍使用旧的password登陆。登陆失败后反复尝试,直到10次为止。



但问题就来了:

1. FAILED_LOGIN_ATTEMPTS设置为10次。但未启动resource_limit。为什么还受到10次的限制呢?

2. 怎么知道还有哪些应用因为未改动password导致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分成管理password和资源两大类,尽管没有明说,但结合以上两段參考。以及上述实际碰到的问题。有理由相信口令管理方面的限制并不受RESOURCE_LIMIT參数的影响。

问题2:怎么知道还有哪些应用因为未改动password导致ORA错误呢

上面尝试了UNLOCK账户后不到一分钟LCOUNT登录失败次数就到了10次,说明这段时间有应用频繁重试password,进一步。假设我们能找到这段时间訪问库的IP,再筛选可能的IP和password改动的应用,就可能找到“罪魁祸首”。

要想找到訪问库的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表示连续登录失败的次数

一旦ORA-28000: the account is locked用户锁定故障排除的更多相关文章

  1. 登录plsql 报错 the account is locked --用户被锁

    登录数据库服务器,进入oracle用户下: [root@uumsnormal-oracle admin]# su - oracle [oracle@uumsnormal-oracle ~]$ sqlp ...

  2. 问题:ORA-28000: the account is locked 用户锁住了。

    打开cmd: 执行 sqlplus /nolog 执行conn / as sysdba 执行 ALTER USER  username  ACCOUNT UNLOCK;

  3. Oracle 数据库用户锁定与解锁,用户锁定最大密码失败次数设置方法,ORA-28000: the account is locked问题解决方法

    转至:https://blog.csdn.net/qq_38161040/article/details/108274161 用户多次密码输入错误达到一定值就会被锁定. -- 用户锁定方法 alter ...

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

    好几个月前安装的Oracle软件忽然想用就忘记了当初设置的口令了,今天查了下怎么找回. 以一个用户jqz/jqz(曾经建立的一个用户.幸亏还记得)的身份登录后: SQL> connect/as ...

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

    查系统默认的策略,连续验证10次错误帐户即会被锁 SQL> select resource_name, limit from dba_profiles where profile='DEFAUL ...

  6. oracle报错:ORA-28000: the account is locked

    连接数据库的时候报: ORA-28000: the account is locked 解决方法: cmd-进入命令行 C:\Users\0>sqlplus /nolog SQL*Plus: R ...

  7. The account is locked

    SQL> select * from v$version where rownum=1; BANNER --------------------------------------------- ...

  8. 解决ORA-28000: the account is locked

    原文地址:http://yanwushu.sinaapp.com/ora-28000-the-account-is-locked/ 在oracle中.连续十次尝试登陆不成功.那么此账户将会被锁定(lo ...

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

    一.触发这个错误的原因及相关因素 是因为oracle11g中默认在default概要文件里设置了"PASSWORD_LIFE_TIME=180天"所导致.在Oracle 11g中是 ...

随机推荐

  1. RobotFrameWork(十一)AutoItLibrary测试库在win7(64bit)下安装及简单使用

    最近安装AutoItLibrary,发现在win7 x64下无法安装成功,后来经过定位,发现是3rdPartyTools\AutoIt目录下面AutoItX3.dll的问题.因为AutoItX3.dl ...

  2. linux—select具体解释

    linux—select具体解释 select系统调用时用来让我们的程序监视多个文件句柄的状态变化的.程序会停在select这里等待,直到被监视的文件句柄有一个或多个发生了状态改变. 关于文件句柄,事 ...

  3. JSP/Servlet-----charset 、pageEncoding差别

    一.JSP/Servlet中的几个编码的作用         在JSP/Servlet中有4个地方可设置编码(例如以下).当中前两个仅仅能用于JSP中,后两个可用于JSP和Servlet 中.    ...

  4. Python天天美味(25) - 深入理解yield

    Python天天美味(25) - 深入理解yield - CoderZh - 博客园 Python天天美味(25) - 深入理解yield   yield的英文单词意思是生产,刚接触Python的时候 ...

  5. hdu2647解题报告

    题意:有个工厂的老板给工人发奖金,每人基础都是888,工人们有自己的想法,如:a 工人想要比 b 工人的奖金高,老板想要使花的钱最少 那么就可以 给b 888,给a 889 ,但是如果在此基础上,b也 ...

  6. 随想录(关于ucore)

    [ 声明:版权全部,欢迎转载.请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 之前用过一段时间skyeye,也对开发skyeye的陈渝有一些了解.近期在github上闲逛的 ...

  7. Delphi Windows API判断文件共享锁定状态(使用OpenFile来判断)

    一.概述 锁是操作系统为实现数据共享而提供的一种安全机制,它使得不同的应用程序,不同的计算机之间可以安全有效地共享和交换数据.要保证安全有效地操作共享数据,必须在相应的操作前判断锁的类型,然后才能确定 ...

  8. [Android学习笔记]startActivityForResult和onActivityResult的使用

    发开过程中,免不了多个页面之间相互交互通信. Android中使用startActivityForResult方法和onActivityResult配合完成任务 startActivityForRes ...

  9. jvm调优经验分享

    当Java程序申请内存,超出VM可分配内纯的时候,VM首先可能会GC,假设GC完还是不够,或者申请的直接超够VM可能有的,就会抛出内 存溢出异常.从VM规范中我们能够得到,一下几种异常. java.l ...

  10. JavaScript实战

    JavaScript之单例实战 一.概述 所谓单例模式,顾名思义即一个类只有一个实例. 所以,当我们创建一个实例时,就必须判断其是否已经存在了这个实例,如果已经存在了这个实例,那么就返回这个已经存在的 ...