本番環境で突然 ORA-28000 が発生し、アプリケーションが接続できなくなったことがあります。原因は単純で、パスワード入力失敗回数の超過によるアカウントロックでした。
結論から言うと、ALTER USER ユーザー名 ACCOUNT UNLOCK; で即時解除できます。ただし、ロックの根本原因を確認せずに解除だけを繰り返すと再発します。まずはプロファイル設定と失敗ログの確認が重要です。

ORA-28000とは何か
ORA-28000 は、Oracle Database においてユーザーアカウントがロックされている場合に発生するエラーです。
エラーメッセージ
ORA-28000: the account is locked
(アカウントがロックされています)
SQL*Plus、アプリケーション接続、JDBC接続など、あらゆる認証処理で発生します。
ORA-28000が発生する主な原因
代表的な原因は以下の通りです。
| 原因 | 内容 | 確認方法 |
|---|---|---|
| パスワード入力失敗回数超過 | PASSWORD_LOCK_TIME が設定されたプロファイルによりロック | DBA_USERS |
| 手動ロック | DBAが ALTER USER ACCOUNT LOCK を実行 | DBA_USERS |
| プロファイル設定 | FAILED_LOGIN_ATTEMPTS の制限超過 | DBA_PROFILES |
| 有効期限切れ後のロック | パスワード期限切れ後の状態遷移 | DBA_USERS |
最も多いのは FAILED_LOGIN_ATTEMPTS の超過です。
※ログイン時に
「ORA-01017:ユーザー名/パスワードが無効です。ログオンは拒否されました。」
と表示される場合は、認証情報そのものが誤っている可能性があります。詳しくは以下の記事で解説しています。

アカウントロック状態の確認方法
まずは現在の状態を確認します。
|
1 2 3 |
SELECT username, account_status FROM dba_users WHERE username = '対象ユーザー名'; |
ACCOUNT_STATUS の主な値
| ACCOUNT_STATUS | 意味 |
|---|---|
| OPEN | 正常 |
| LOCKED | ロック中 |
| LOCKED(TIMED) | 一時的ロック |
| EXPIRED & LOCKED | 期限切れ+ロック |
LOCKED(TIMED) の場合は PASSWORD_LOCK_TIME の時間経過で自動解除されます。
アカウントロックの解除方法
即時解除する場合は以下を実行します。
|
1 |
ALTER USER 対象ユーザー名 ACCOUNT UNLOCK; |
パスワード変更も同時に行う場合
ALTER USER 対象ユーザー名 IDENTIFIED BY 新パスワード ACCOUNT UNLOCK;
本番環境では、パスワード変更を同時に行うほうが安全です。
プロファイル設定の確認方法
ロックの根本原因を確認するには、ユーザーに紐づくプロファイルを確認します。
|
1 2 3 |
SELECT username, profile FROM dba_users WHERE username = '対象ユーザー名'; |
次にプロファイル詳細を確認します。
|
1 2 3 4 |
SELECT resource_name, limit FROM dba_profiles WHERE profile = 'プロファイル名' AND resource_name IN ('FAILED_LOGIN_ATTEMPTS','PASSWORD_LOCK_TIME'); |
主な設定項目
| 項目 | 意味 |
|---|---|
| FAILED_LOGIN_ATTEMPTS | ロックまでの失敗回数 |
| PASSWORD_LOCK_TIME | ロック継続時間(日単位) |
例:PASSWORD_LOCK_TIME = 1 の場合、1日間ロックされます。
プロファイル設定を変更する方法
制限が厳しすぎる場合は調整できます。
ALTER PROFILE プロファイル名 LIMIT FAILED_LOGIN_ATTEMPTS 10;
無期限ロック解除にする場合
ALTER PROFILE プロファイル名 LIMIT PASSWORD_LOCK_TIME UNLIMITED;
ただし、セキュリティポリシーに従って設定してください。
アプリケーション側が原因の場合
実務では以下のケースが多いです。
・接続文字列のパスワードが古い
・バッチ処理で誤ったパスワードが固定されている
・複数サーバーから同時接続している
解除後にすぐ再ロックされる場合は、アプリケーション側ログを必ず確認してください。
再発防止策
・接続情報の一元管理
・パスワード変更時の設定反映確認
・FAILED_LOGIN_ATTEMPTS の適切な見直し
・監査ログの確認
ロックは症状であり、原因ではありません。必ず失敗原因を特定してください。
よくある質問(Q & A)
- LOCKED(TIMED) は待てば解除されますか?
-
はい。PASSWORD_LOCK_TIME の設定時間経過後に自動解除されます。
- SYS ユーザーも ORA-28000 になりますか?
-
通常の運用では発生しませんが、プロファイル設定によっては発生する可能性があります。
- 解除後すぐ再ロックされます。なぜですか?
-
誤ったパスワードで自動接続しているアプリケーションやバッチが原因の可能性が高いです。
まとめ
ORA-28000 はアカウントロックによって発生します。解除自体は ALTER USER ACCOUNT UNLOCK で簡単に行えますが、FAILED_LOGIN_ATTEMPTS や PASSWORD_LOCK_TIME の設定確認が重要です。解除だけで終わらせず、必ず原因を特定してください。特に本番環境では、再ロック防止策まで実施することが安定運用につながります。



