【Oracle】ユーザーアカウントのロック解除手順完全解説|原因確認・EXPIRED対処・パスワードポリシーまで

Oracleでログインに失敗し続けたり、パスワードが期限切れになるとアカウントがロックされます。本記事ではロック状態の確認・解除・原因調査・パスワードポリシーの見直しまで一連の手順を体系的に解説します。

スポンサーリンク

ACCOUNT_STATUSの種類

DBA_USERSACCOUNT_STATUS列は以下の値をとります。

ACCOUNT_STATUS 意味と対処
OPEN 正常。ログイン可能
LOCKED ロック中。ACCOUNT UNLOCKで解除
LOCKED(TIMED) 一定時間後に自動解除されるロック(PASSWORD_LOCK_TIME経過後)
EXPIRED パスワード期限切れ。次回ログイン時にパスワード変更を求められる
EXPIRED & LOCKED 期限切れ+ロックの複合状態。UNLOCK後にパスワード変更が必要
EXPIRED(GRACE) 猶予期間中。まだログイン可能だがパスワード変更を促される

ロック状態のユーザーを確認する

SQL — ロック・期限切れユーザーを一覧確認
-- ロックまたはEXPIREDのユーザーを一覧表示
SELECT username,
       account_status,
       lock_date,
       expiry_date
  FROM dba_users
 WHERE account_status NOT IN ('OPEN')
 ORDER BY account_status, username;

-- 特定ユーザーのステータスを確認
SELECT username, account_status, lock_date, expiry_date
  FROM dba_users
 WHERE username = 'HR';

アカウントのロックを解除する

SQL — ACCOUNT UNLOCK でロック解除
-- ロック解除(DBA権限が必要)
ALTER USER hr ACCOUNT UNLOCK;

-- 解除後にOPENになったか確認
SELECT username, account_status
  FROM dba_users
 WHERE username = 'HR';
接続方法: ロック解除には ALTER USER 権限または DBA権限が必要です。SQL*Plus で接続する場合は sqlplus / as sysdba(OS認証)または sqlplus sys/パスワード as sysdba で接続します。

パスワード期限切れ(EXPIRED)の場合

ステータスが EXPIRED または EXPIRED & LOCKED の場合は、ロック解除に加えてパスワードの再設定が必要です。

SQL — ロック解除+パスワード再設定を同時に行う
-- パスワード再設定(EXPIREDを解除)
ALTER USER hr IDENTIFIED BY "NewP@ssword2024";

-- ロック解除とパスワード変更を1文で
ALTER USER hr
  IDENTIFIED BY "NewP@ssword2024"
  ACCOUNT UNLOCK;

-- パスワードを期限切れにして次回ログイン時に変更を強制
ALTER USER hr PASSWORD EXPIRE;

ロックの原因を調査する

失敗ログイン回数の上限を確認する

ユーザーに適用されているプロファイルの FAILED_LOGIN_ATTEMPTS 設定を確認します。

SQL — プロファイルの失敗回数上限とロック時間を確認
-- ユーザーが使用しているプロファイルを確認
SELECT username, profile
  FROM dba_users
 WHERE username = 'HR';

-- プロファイルのパスワードポリシーを確認
SELECT profile, resource_name, limit
  FROM dba_profiles
 WHERE resource_type = 'PASSWORD'
   AND  profile = 'DEFAULT'
 ORDER BY resource_name;
RESOURCE_NAME 意味
FAILED_LOGIN_ATTEMPTS 連続失敗でロックされるまでの回数(Oracleデフォルト: 10)
PASSWORD_LOCK_TIME ロック継続時間(UNLIMITED の場合は手動解除が必要)
PASSWORD_LIFE_TIME パスワードの有効期限(日数。デフォルト: 180日)
PASSWORD_GRACE_TIME 期限切れ後の猶予期間(日数)
PASSWORD_REUSE_TIME 同じパスワードを再使用できるまでの日数

プロファイルのポリシーを変更する

SQL — FAILED_LOGIN_ATTEMPTS と PASSWORD_LOCK_TIME の変更
-- DEFAULTプロファイルの失敗許容回数を変更
ALTER PROFILE DEFAULT LIMIT
  FAILED_LOGIN_ATTEMPTS 5         -- 5回失敗でロック
  PASSWORD_LOCK_TIME    1/24;       -- 1時間後に自動解除

-- パスワード有効期限を無制限に(変更不要な環境向け)
ALTER PROFILE DEFAULT LIMIT
  PASSWORD_LIFE_TIME UNLIMITED;

-- 失敗回数上限を無制限(ロックしない設定)
ALTER PROFILE DEFAULT LIMIT
  FAILED_LOGIN_ATTEMPTS UNLIMITED;
注意: FAILED_LOGIN_ATTEMPTS UNLIMITEDPASSWORD_LIFE_TIME UNLIMITED は管理の簡便さのために使われますが、セキュリティポリシーに反する場合があります。本番環境では組織のセキュリティ基準に従って設定してください。

ロック解除の全体フロー

手順 操作 コマンド
1 SYSDBAで接続 sqlplus / as sysdba
2 ステータスを確認 SELECT username, account_status FROM dba_users WHERE username = ‘対象’;
3 ロック解除 ALTER USER 対象 ACCOUNT UNLOCK;
4 EXPIRED の場合はPW変更 ALTER USER 対象 IDENTIFIED BY "新パスワード";
5 解除確認 SELECT username, account_status FROM dba_users WHERE username = ‘対象’;
❓ よくある質問(FAQ)  ▲ クリックで開閉

Q. ACCOUNT UNLOCKしたのにすぐまたロックされる。なぜか?
A. アプリケーションが古いパスワードで自動接続を試み続けているケースが多いです。アプリ側の接続設定(DataSource, connection pool等)のパスワードを更新してから再試行してください。それでも繰り返す場合は FAILED_LOGIN_ATTEMPTS の値を増やすか、UNLIMITED に変更することも検討します。

Q. SYSDBAに接続できない場合はどうすればよいか?
A. OS認証(sqlplus / as sysdba)が利用できない場合は、oracleOS ユーザーでログインしてから試みるか、リスナーが起動しているか確認してください。また REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE 設定があれば sqlplus sys/パスワード@接続文字列 as sysdba で接続できます。

Q. LOCKED(TIMED)は手動解除不要か?
A. PASSWORD_LOCK_TIME で設定した時間が経過すれば自動的に解除されます。ただし、自動解除を待たずに今すぐアクセスさせたい場合は ALTER USER ユーザー名 ACCOUNT UNLOCK で手動解除できます。