Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 381|回复: 0

Oracle用户密码过期问题解决

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-6-16 11:53:18 | 显示全部楼层 |阅读模式

    一、用户密码即将过期,导致autotrace无法打开

               如果用户密码即将过期,在登录数据库时会收到如下提示:
               ERROR:
                ORA-28002: the password will expire within 7 days
               当然,此时密码还未真正过期,用户在收到错误提示后依然可以登录数据库。但是,如果当收到密码即将过期的提示,想要开启autotrace就会有问题。

    1. SQL> conn darren/darren
    2.       ERROR:
    3.       ORA-28002: the password will expire within 7 days
    4.       Connected.
    5.       SQL> set autotrace on;
    6.       ERROR:
    7.       ORA-28002: the password will expire within 7 days
            SP2-0619: Error while connecting
           SP2-0611: Error enabling STATISTICS report

               既然出现了密码即将过期的提示,说明profile中的PASSWORD_LIFE_TIME参数肯定没有设置成unlimited,可以查看dba_profiles进行验证:
               

    1. SQL> select profile,resource_name,limit from dba_profiles where resource_name='PASSWORD_LIFE_TIME';
    2. PROFILE RESOURCE_NAME         LIMIT
    3. ---------- -------------------------------- ----------
    4. DEFAULT PASSWORD_LIFE_TIME         1

                如果生产环境没有对密码过期的特殊限制,可以把该参数修改为unlimitd:

    1. ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED

                此时再尝试打开autotrace:

    1. SQL> select profile,resource_name,limit from dba_profiles where resource_name='PASSWORD_LIFE_TIME';
    2. PROFILE RESOURCE_NAME         LIMIT
    3. ---------- -------------------------------- ----------
    4. DEFAULT PASSWORD_LIFE_TIME         UNLIMITED
    5. SQL> conn darren/darren
    6. ERROR:
    7. ORA-28002: the password will expire within 7 days
    8. Connected.
    9. SQL> set autotrace on;
    10. ERROR:
    11. ORA-28002: the password will expire within 7 days
    12. SP2-0619: Error while connecting
    13. SP2-0611: Error enabling STATISTICS report

              还是同样的错误,说明在用户密码即将过期时,再修改profile是不会对密码即将过期的用户生效的。应该采用重设用户密码(密码可以与之前的密码一样)的方法。

    1. SQL> alter user darren identified by darren;
    2. User altered.
    3. SQL> conn darren/darren
    4. Connected.
    5. SQL> set autotrace on;

             此时成功开启autotrace功能。
            再尝试另外一种情景,在用户登录后修改用户密码,但不重新登录,尝试开启autotrace。

    1. SQL> alter user darren identified by darren
    2.   2 ;
    3. User altered.
    4. SQL> set autotrace on;
    5. ERROR:
    6. ORA-01017: invalid username/password; logon denied
    7. SP2-0619: Error while connecting
    8. SP2-0611: Error enabling STATISTICS report

            同样的错误又出现了。
           到此,我们得出一个结论,在开启autotrace功能的时候,数据库会再创建一个会话,用新创建的会话来跟踪当前会话。所以,当用户密码即将过期时,开启autotrace功能时,创建新的会话时会因为返回ORA-2802而产生异常。

         二、11g新特性,密码延迟认证

            11g中,加入了用户密码延迟认证的特性,即用户如果在登录是输入了错误的密码,那么这个用户的登录验证会随着输入错误密码的次数的增加而增加,直到正确登录后重新计数。如下:

    1. SQL> set time on
    2. 13:32:45 SQL> 
    3. conn darren/xxxxxx
    4. conn darren/xxxxxx
    5. conn darren/xxxxxx
    6. conn darren/xxxxxx
    7. conn darren/xxxxxx
    8. conn darren/xxxxxx
    9. conn darren/xxxxxx
    10. ERROR:
    11. ORA-01017: invalid username/password; logon denied
    12. Warning: You are no longer connected to ORACLE.
    13. 13:32:59 SQL> ERROR:
    14. ORA-01017: invalid username/password; logon denied
    15. 13:32:59 SQL> ERROR:
    16. ORA-01017: invalid username/password; logon denied
    17. 13:32:599 SQL> ERROR:
    18. ORA-01017: invalid username/password; logon denied
    19. 13:33:00 SQL> conn gyl/xxxxxx
    20. ERROR:
    21. ORA-01017: invalid username/password; logon denied
    22. 13:33:02 SQL> 
    23. ERROR:
    24. ORA-01017: invalid username/password; logon denied
    25. 13:33:05 SQL> 
    26. ERROR:
    27. ORA-01017: invalid username/password; logon denied
    28. 13:33:10 SQL> 
    29. ERROR:
    30. ORA-01017: invalid username/password; logon denied

           可以看到,验证的时间越来越长,如果继续增加错误的登录次数,验证的时间还会继续加长。如果是多个会话同时不断的用错误的密码来连接数据库,那么将会导致该用户的登录HANG住。如果想关闭这个特性,可以设置如下事件:

    1. SQL> ALTER SYSTEM SET EVENT = ‘28401 TRACE NAME CONTEXT FOREVER, LEVEL 1’ SCOPE = SPFILE;

            三、sys用户是不受PASSWORD_LIFE_TIME参数限制的
            四、在用户密码过期后,用户的状态(dba_user.account_status)不会立即更新为expired,只有当用户尝试连接到数据库的时候,才会对用户状态进行更新
            五、用户密码相关的一些参数

    1. SQL> select * from dba_profiles where resource_name like '%PASSWORD%';
    2. PROFILE RESOURCE_NAME              RESOURCE      LIMIT
    3. ---------- -------------------------------- -------- ----------
    4. DEFAULT PASSWORD_LIFE_TIME         PASSWORD    UNLIMITED
    5. DEFAULT PASSWORD_REUSE_TIME         PASSWORD   UNLIMITED
    6. DEFAULT PASSWORD_REUSE_MAX          PASSWORD   UNLIMITED
    7. DEFAULT PASSWORD_VERIFY_FUNCTION     PASSWORD  NULL
    8. DEFAULT PASSWORD_LOCK_TIME          PASSWORD   1
    9. DEFAULT PASSWORD_GRACE_TIME         PASSWORD   7

                   PASSWORD_LIFE_TIME:
                   设定口令的有效时间(天数),一旦超过这一时间,必须重新设口令。缺省为180天(11g,10gUNLIMITED).
                   PASSWORD_REUSE_TIME:
                   许多系统不许用户重新启用过去用过的口令。该资源项设定了一个失效口令要经过多少天,用户才可以重新使用该口令。缺省为UNLIMITED.
                   PASSWORD_REUSE_MAX:
                   重新启用一个先前用过的口令前必须对该口令进行重新设置的次数(重复用的次数)。
                   PASSWORD_LOCK_TIME:
                   设定帐户被锁定的天数(当登录失败达到FAILED_LOGIN_ATTEMPTS时)。
                   PASSWORD_GRACE_TIME:
                   设定在口令失效前,给予的重新设该口令的宽限天。当口令失效之后回,在登录时会出现警告信息显示该天数。如果没有在宽限天内修改口令,口令将失效。
                   PASSWORD_VERITY_FUNCTION:
                   该资源项允许调用一个PL/SQL 来验证口令。Oracle公司已提供该应用 的脚本,但是只要愿意的话,用户可以制定自己的验证脚本。该参数的设定就是PL/SQL函数的名称。缺省为NULL.
                   FAILED_LOGIN_ATTEMPTS:
                   设定登录到Oracle 数据库时可以失败的次数。一旦某用户尝试登录数据库的达到该值时,该用户的帐户就被锁定,只能由DBA能解锁。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-23 05:01 , Processed in 0.056625 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表