zoukankan      html  css  js  c++  java
  • 一旦ORA-28000: the account is locked用户锁定故障排除

    今天我的同事们反映的问题,测试库的变化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表示连续登录失败的次数

  • 相关阅读:
    eyou通用标签的调取
    eyou头部相关标签的调用
    自增标签循环+1的方法
    文章内容页相关的标签
    当前栏目有多少文章
    指定栏目最顶级栏目名称
    当前单页正文
    Python-pandas常用函数
    监控在线平台
    网页爬虫---音乐
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5044548.html
Copyright © 2011-2022 走看看