オーロラさんの勉強帳

IT企業勤務。データベース、Excel、Excel VBA、ネットワーク、LinuxなどIT関連のことを主に書いていきます。少しでもお役に立てたら幸いです。

【Oracle Database】『ORA-28001:パスワードが期限切れです。』エラーの原因、対処・解決方法

 

久しぶりに勉強用のOracle Database12cに接続しようとしたところ「ORA-28001:パスワードが期限切れです。」エラーでログインできなくなっていました。

今回は「ORA-28001:パスワードが期限切れです。」エラーの対処・解決方法を記事にします。

 

f:id:auroralights:20201121002344p:plain

 

「ORA-28001:パスワードが期限切れです。」エラーの原因

Oracle12cのパスワードポリシーは以下のようになっています。

  • パスワードは180日で自動的に期限切れとなります
  • パスワードは期限切れの7日後にユーザー・アカウントがロックされます
  • 10回ログインに失敗すると、ユーザーが1日ロックされます

 

※11gも180日でデフォルトはパスワードが期限切れとなります。

 

私も180日、パスワードを変更しなかったことが原因でユーザー・アカウントがロックされてしまいました。

 

ロックされたユーザー・アカウントの現状確認

勉強もかねて、現在のユーザーの状態を確認します。

 

管理者で接続し、dba_usersテーブルを確認する 

1.コマンドプロンプトで以下を入力して、SQLPLUSで管理者として接続します。
sqlplus / as sysdba

 

2.以下SQLを入力してEnterを押下

SELECT USERNAME, ACCOUNT_STATUS, LOCK_DATE from dba_users;

もしくは、以下のようにWHEREでユーザー名に絞って

SELECT USERNAME, ACCOUNT_STATUS, LOCK_DATE FROM DBA_USERS WHERE USERNAME = 'ユーザー名';
※ユーザー名は大文字で入力。

 f:id:auroralights:20201121010720p:plain

ユーザー名はTESTUSERで、『ACCOUNT_STATUS』はパスワード期限切れの「EXPIRED」になっています。LOCK_DATEは空でした。

 

DBA_USERSテーブルのACCOUNT_STATUSの説明

f:id:auroralights:20201121011610p:plain

 

dba_usersの詳細情報の確認、対象ユーザのProfileの確認

以下SQLでカラムを絞らずに*(アスタリスク)でdba_usersの情報を確認してみる。

select * from dba_users;

f:id:auroralights:20201121011713p:plain

f:id:auroralights:20201121011722p:plain

アカウント期限切れの日付が入る『EXPIRY_DATE』は「2020-10-30」。

ユーザー作成日の『CREATED』は「2020-02-24」。

ProfileがDefaultであることが確認できます。

ユーザーの最終ログインの『LAST_LOGIN』は「2020-10-23」。

 

単純計算で「2020-02-24」の180日後は「2020-08-22」ごろだと思うのですが、最終ログインが「2020-10-23」なので180日前の「2020-04-26」ごろに、パスワードを変更しているようです。全く覚えてませんが。。。

最終ログイン(2020-10-23)の7日後(2020-10-30)にアカウント期限切れ(EXPIRY_DATE)になっていることも分かります。

LOCK_DATEが空なのは、「ACCOUNT_STATUS」が「EXPIRED & LOCKED」ではなく「EXPIRED」だからだと思います。アカウント自体はロックされておらず、あくまでも期限切れのステータスって状態のようです。

 

パスワードの有効期限の確認

SELECT * FROM DBA_PROFILES
WHERE RESOURCE_NAME = 'PASSWORD_LIFE_TIME';

DEFAULTのプロファイルの「RESOURCE_LIMIT」をみると「180」となっており、パスワードの有効期限は180日であることが確認できました。

 

「ORA-28001:パスワードが期限切れです。」エラーの対処・解決方法

対処・解決方法としては、以下のような方法があります。

【1】ユーザーのパスワードを再設定し、アカウントのロックを解除する方法

【2】デフォルトプロファイルのパスワード有効期限を無期限や180日より長い日に設定し、パスワードを再設定、アカウントのロックを解除する方法

【3】ユーザーのパスワードを再設定する

 ※今回の私の状態は期限きれでユーザー・アカウントはロックされていなかったので、パスワードの変更だけで解決しました。(EXPIRED & LOCKEDではなく、EXPIREDのみの状態はパスワード再設定のみで良い)

 

では、対処・解決方法の手順を以下に記載します。

 

1.コマンドプロンプトで以下を入力して、SQLPLUSで管理者として接続します。
sqlplus / as sysdba

 

2.パスワードの有効期限を変更する (やってもやらなくても良いです)

--パスワードの有効期限を無期限にするSQL
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

 

UNLIMITEDを日数に変更するだけで、有効期限の日数を変更するSQLになります。

--パスワードの有効期限を300日にするSQL
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 300;

 

3.パスワードを変更する

ALTER USER ユーザ名 IDENTIFIED BY 新パスワード

 

※今回の私の状態では、パスワードを変更するだけで接続できるようになりました。パスワード再設定により、DBA_USERSテーブルのACCOUNT_STATUSも「OPEN」となり接続可能でした。

 

4.ユーザーアカウントのロックの解除

ALTER USER ユーザ名 ACCOUNT UNLOCK

 

以下SQLで

SELECT USERNAME, ACCOUNT_STATUS, LOCK_DATE from dba_users;

対象ユーザの「ACCOUNT_STATUS」が「OPEN」であれば接続ができます。

 

「ORA-28001:パスワードが期限切れです。」について学んだこと

「ACCOUNT_STATUS」が「EXPIRED」の場合はパスワードの再設定のみで解決します。

「ACCOUNT_STATUS」が「EXPIRED & LOCKED」の場合は、パスワードの再設定とロックの解除が必要です。