前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一次ORA-28000: the account is locked用户锁定的问题排查

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

作者头像
bisal
发布2019-01-29 11:57:45
2.1K0
发布2019-01-29 11:57:45
举报
文章被收录于专栏:bisal的个人杂货铺

今天同事反映一个问题,某个测试库修改了密码,并改了相关应用使用的密码后,仍出现一会账户就被锁住,报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表示连续登录失败的次数

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014年08月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档