Oracle用戶密碼過期問題解決


一、用戶密碼即將過期,導致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能解鎖。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM