Oracleのアカウント状態の整理

DBA_USERS ビューで確認できるACCOUNT_STATUSについて、以下の9状態があり得ると『リファレンス』には記載されている。

  • OPEN
  • EXPIRED
  • EXPIRED(GRACE)
  • LOCKED(TIMED)
  • LOCKED
  • EXPIRED & LOCKED(TIMED)
  • EXPIRED(GRACE) & LOCKED(TIMED)
  • EXPIRED & LOCKED
  • EXPIRED(GRACE) & LOCKED

アカウント状態の考え方

リストとして表記されると今一解りにくいのだが、実際には『パスワードの状態』と『ロック状態』のマトリックスで明快に整理できる。それぞれの要素は以下のとおり。

パスワードの状態
  • 有効
  • 期限切れ前(猶予期間) ※EXPIRED(GRACE)
  • 期限切れ ※EXPIRED

※プロファイルで PASSWORD_LIFE_TIME や PASSWORD_GRACE_TIME を指定している場合のみ期限の概念が発生してくる。

ロック状態
  • アンロック状態
  • ロック状態(ログイン試行の失敗による) ※LOCKED(TIMED)
  • ロック状態(明示的なロック) ※LOCKED

※プロファイルで FAILED_LOGIN_ATTEMPTS を指定している場合のみログイン試行の失敗によるロックが発生してくる。

状態一覧(マトリックス)

結局のところ次の通り。状態ごとにログイン試行時に発生するORAエラーを併せて記載。

留意事項

  • パスワードの状態が遷移するのはログイン試行時(成功しようと失敗しようと)
  • PASSWORD_GRACE_TIME の猶予期間は EXPIRED(GRACE) に遷移したときから起算される
    • PASSWORD_LIFE_TIME + PASSWORD_GRACE_TIME の期間が経過すると確実に EXPIRED になるかというとそうではなく、EXPIRED(GRACE)である可能性があるということ
  • DBA_USERS の EXPIRY_DATE の示す日時は、『その日時以降のログイン試行でパスワードの状態を遷移させる』ということを表す
    • ACCOUNT_STATUS=OPENなら(それ以降のログイン試行時に)EXPIRED(GRACE)に遷移させる日時をを表す
    • ACCOUNT_STATUS=EXPIRED(GRACE)なら(それ以降のログイン試行時に)EXPIREDに遷移させる日時を表す
  • EXPIREDはパスワードを変更すればログインできる。ロックされるわけではない。