Oracle Databaseを利用していると、多くの人が一度は遭遇するエラーが 「ORA-01017: invalid username/password; logon denied」 です。
SQL*PlusやSQL Developerでのログイン、あるいはアプリケーションの起動時に表示され、作業がストップしてしまう厄介なエラーです。
本記事では、このエラーの 原因と解決方法を体系的に整理 し、実際の現場で役立つ対応手順を紹介します。
ORA-01017エラーとは?
このエラーは、Oracleが「入力されたユーザー名またはパスワードが正しくないため、ログオンを拒否した」と判断した際に表示されます。
主に以下のようなシーンで発生します。
- 
SQL*Plus で手動ログインするとき 
- 
SQL Developer などのGUIツールから接続するとき 
- 
Java/JDBCやPHP などのアプリケーションがDB接続を試みるとき 
- 
バッチ処理 や シェルスクリプト による自動接続 
単純にパスワードを打ち間違えただけでも発生しますが、実際の現場ではもっと複雑な原因が潜んでいることもあります。
ORA-01017が発生する主な原因
1. ユーザー名やパスワードの誤り
- 
スペルミス(大文字・小文字の違いも区別される) 
- 
コピペ時の不可視文字(空白や改行が含まれている) 
- 
ユーザー作成時に "USERNAME"のように ダブルクォーテーション付き で作成しており、大文字小文字が厳密に一致していない
2. アカウントがロックされている/パスワード期限切れ
Oracleではセキュリティのため、一定回数の失敗でアカウントがロックされたり、パスワードに有効期限が設定されている場合があります。
3. 認証方式の違い
- 
Oracle 12c以降では、古い認証方式(DESなど)が無効化されている 
- 
古いクライアント/JDBCドライバで接続すると認証エラーになる 
4. 接続先の設定ミス
- 
tnsnames.oraの設定が間違っている
- 
service_nameやSIDが異なる環境を参照している
- 
テスト環境と本番環境を取り違えている 
5. 外部認証の影響
- 
OS認証( / as sysdba)を利用しているが権限が不足している
- 
パスワードファイル( orapwd)が正しく作成されていない
ORA-01017エラーの解決方法
1. ユーザー名・パスワードを正確に確認する
まずは基本中の基本。
- 
コピー&ペーストではなく手入力 で試す 
- 
大文字小文字を区別することを意識する 
- 
ユーザー作成時に "USERNAME"のように指定していないか確認
2. アカウントの状態を確認する
管理者ユーザーで以下を実行します。
- 
LOCKED→ALTER USER ユーザー名 ACCOUNT UNLOCK;
- 
EXPIRED→ALTER USER ユーザー名 IDENTIFIED BY 新パスワード;
3. 認証方式を見直す
ユーザーごとのパスワードバージョンを確認:
| 1 | SELECT username, password_versions FROM dba_users; | 
- 
10Gのみ → 古い方式。新しいクライアントで接続不可の可能性あり
- 
11Gや12Cが含まれているか確認
- 
JDBCドライバやOCIクライアントを 最新化 する 
4. 接続文字列を確認する
誤接続が多いポイントです。
- 
hostnameやservice_nameが正しいか
- 
ローカルの tnsnames.oraが古い情報を持っていないか
5. 外部認証を確認する
- 
OSユーザーに必要な権限があるか 
- 
SYSDBA接続が可能な状態か 
- 
パスワードファイルが壊れていれば orapwdコマンドで再作成
現場でのチェックリスト
- 
入力の大文字・小文字を再確認する 
- 
コピペではなく手入力で試す 
- 
DBA_USERSを確認してアカウント状態を把握
- 
クライアントやJDBCドライバを最新化 
- 
接続先(サービス名/ホスト名)が正しいか見直す 
- 
OS認証やパスワードファイルに問題がないか確認 
まとめ
「ORA-01017」は、単純に「パスワード間違い」と片付けがちですが、実際には アカウントロック、認証方式、接続先設定の誤り など複数の要因が絡むことがあります。
対処の基本ステップは以下の通りです。
- 
入力の確認 → アカウント状態の確認 → 認証方式・接続設定の見直し 
これを押さえておけば、大半のケースで迅速に問題を解決できます。
