【完全版】ORA-01017: invalid username/password エラーの原因と対処法|Oracleログイン失敗の全パターン徹底解説

  • 作成日 2026.06.12
  • 更新日 2026.06.17
  • ubuntu
【完全版】ORA-01017: invalid username/password エラーの原因と対処法|Oracleログイン失敗の全パターン徹底解説

Oracle Databaseに接続しようとした時に、以下のエラーで弾かれた経験はありませんか?

ORA-01017: invalid username/password; logon denied

「ユーザー名かパスワードが違います」というシンプルなメッセージですが、実際の原因は10種類以上あり、単純なタイプミスだけではありません。

  • パスワードは合っているはずなのにエラーが出る
  • 昨日まで繋がっていたのに今日突然失敗する
  • SQL*Plusでは繋がるのにJDBC/SQL Developerでは繋がらない
  • SYSアカウントだけ繋がらない
  • 開発環境では成功するが本番環境で失敗する

本記事では、ORA-01017エラーのすべての原因と対処法を、現場で即使えるトラブルシューティング手順として整理します。基本的な確認事項から、大文字小文字問題、アカウントロック・期限切れ、CDB/PDB切り替え、JDBCドライバ互換性、SYS認証の特殊事情、各プログラム言語からの接続まで完全網羅。この1本でORA-01017の悩みが全て解決します。


目次

結論:今すぐ試すべき3ステップ

時間がない方向けに、まず試すべき手順を示します。

ステップ1:パスワードを再入力(タイプミスチェック)

sqlplus username/password@dbname

⚠️ パスワードに @ / " ( などの記号が含まれる場合はダブルクォートで囲む:

sqlplus 'username/"P@ssw0rd!"@dbname'

ステップ2:アカウント状態を確認(要DBA権限)

SELECT USERNAME, ACCOUNT_STATUS, LOCK_DATE, EXPIRY_DATE 
FROM DBA_USERS 
WHERE USERNAME = 'YOUR_USER';

ステップ3:パスワードをリセット(DBAが必要)

ALTER USER your_user IDENTIFIED BY new_password ACCOUNT UNLOCK;

それでも解決しない場合は、以下の詳細な原因分析へ進んでください。


まず押さえる:ORA-01017エラーの全体像

ORA-01017は、Oracleの認証ステップで失敗したことを示します。原因は大きく以下のカテゴリに分けられます。

カテゴリ原因例頻度
入力ミス系パスワード誤り、特殊文字エスケープ、コピペミス最多
アカウント状態系ロック、期限切れ、ユーザー削除済み
接続先間違い系別DBに接続、PDB誤り、CDBルート誤接続
大小文字感度系12c以降の大小文字区別、引用符問題
ドライバ互換性系古いJDBC、暗号化方式の不一致
SYS特殊系SYSDBA接続、パスワードファイル問題
設定系sec_case_sensitive_logon、PROFILE設定

これらを順番にチェックしていくのが効率的な切り分け方法です。


【原因①】パスワード・ユーザー名の入力ミス(最頻出)

最も多いケースです。意外な落とし穴を含めて整理します。

ありがちなタイプミス

  • スペースが含まれている(前後・中間)
  • 全角文字が混じっている(特に英字 O0l1
  • Caps Lockが有効
  • 日本語キーボードで記号が想定と違う(@[ になる等)

コピペ時の見えない文字に注意

メールやチャットからパスワードをコピーすると、改行コードやゼロ幅スペースが混入することがあります。一度メモ帳で開いて余計な文字がないか確認してください。

パスワードに特殊文字が含まれる場合

シェル経由(sqlplus、bash)で接続する場合、@ $ ! " ' などはシェルの特殊文字として解釈される可能性があります。シングルクォートまたはダブルクォートで囲むのが安全です。

# パスワード = MyP@ss!2025 の場合
sqlplus 'scott/"MyP@ss!2025"@orcl'

Linux/Mac の bash の場合のエスケープ例

# シングルクォートで全体を囲む(推奨)
sqlplus 'scott/MyP@ss!2025@orcl'

# あるいは特殊文字をバックスラッシュでエスケープ
sqlplus scott/MyP\@ss\!2025@orcl

Windows のコマンドプロンプト

sqlplus scott/"MyP@ss!2025"@orcl

ダブルクォートを使うのが標準です。


【原因②】大文字・小文字の問題(12c以降の重要ポイント)

Oracle 12c(11g R2の一部設定でも)以降、パスワードはデフォルトで大文字小文字を区別します。

CASE_SENSITIVE_LOGON 設定の確認

SHOW PARAMETER sec_case_sensitive_logon;
動作
TRUE(デフォルト)パスワードの大小文字を区別する
FALSE区別しない(11g以前の挙動)

⚠️ Oracle 19c以降では、SEC_CASE_SENSITIVE_LOGON非推奨かつ後続バージョンで削除予定です。FALSE設定は移行措置としてのみ使ってください。

引用符付きユーザー名の罠

CREATE USER "MyUser" IDENTIFIED BY ... のように二重引用符で作成すると、ユーザー名が大文字小文字を区別する状態で登録されます。接続時も完全一致する必要があります。

-- 大文字小文字を含むユーザーは引用符が必須
SELECT USERNAME FROM ALL_USERS WHERE USERNAME LIKE 'My%';

接続:

sqlplus '"MyUser"/password@orcl'

パスワード ベリファイア関数による制約

PASSWORD_VERIFY_FUNCTION で大文字・小文字・記号の混在を強制している環境では、ポリシーに違反するパスワードは設定できません。

SELECT * FROM DBA_PROFILES WHERE RESOURCE_NAME = 'PASSWORD_VERIFY_FUNCTION';

【原因③】アカウントがロック・期限切れ

しばらく繋いでいなかったり、パスワードを連続で間違えると、アカウントが自動的にロック・期限切れ状態になります。

アカウント状態の確認

SELECT USERNAME, ACCOUNT_STATUS, LOCK_DATE, EXPIRY_DATE, PROFILE 
FROM DBA_USERS 
WHERE USERNAME = 'SCOTT';

ACCOUNT_STATUS の主な値

ステータス意味解決方法
OPEN正常(他の原因を疑う)
LOCKED管理者がロックしたALTER USER ... ACCOUNT UNLOCK
LOCKED(TIMED)パスワード連続誤入力で自動ロック同上
EXPIREDパスワード期限切れパスワード変更 or 期限延長
EXPIRED(GRACE)期限切れ猶予期間中パスワード変更を促される
EXPIRED & LOCKED期限切れ+ロック両方対処

ロックを解除する

ALTER USER scott ACCOUNT UNLOCK;

パスワード期限切れの解決

期限切れアカウントに接続を試みると、SQL*Plusでは以下のような対話が出ます:

ORA-28001: パスワードが期限切れです
古いパスワードを入力してください: 
新しいパスワードを入力してください: 
新しいパスワードを再入力してください: 
パスワードが変更されました。

スクリプトから一括変更する場合:

ALTER USER scott IDENTIFIED BY new_password;

期限を無期限にする(セキュリティ的に非推奨)

-- 専用プロファイルを作成
CREATE PROFILE NO_EXPIRY LIMIT PASSWORD_LIFE_TIME UNLIMITED;
ALTER USER scott PROFILE NO_EXPIRY;

または既存プロファイルを変更:

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

⚠️ パスワード無期限化はセキュリティリスクを生むため、業務要件と照らし合わせてご判断ください。

ロック・期限切れの状態を一覧で確認

SELECT USERNAME, ACCOUNT_STATUS 
FROM DBA_USERS 
WHERE ACCOUNT_STATUS != 'OPEN'
ORDER BY USERNAME;

詳細なユーザー一覧確認方法は[Oracleユーザー一覧取得の解説記事]も併せて参照してください。


【原因④】CDB/PDB環境の接続先間違い(12c以降の重要原因)

12c以降のマルチテナント環境では、接続先のコンテナを間違えることでORA-01017が発生します。

CDBルートとPDBの違い

  • CDBルート: コモンユーザー(C##プレフィックス)のみ存在
  • PDB: ローカルユーザー(通常のユーザー)が存在

CDBルートに対して通常のユーザー(例: HR)で接続しようとすると、ユーザーが存在しないため ORA-01017 になります。

現在の接続先を確認

SHOW CON_NAME
-- または
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM DUAL;

PDB一覧を確認

SELECT NAME, OPEN_MODE FROM V$PDBS;

接続先PDBを明示する

サービス名で接続する形に変更します:

# CDBルートではなくPDBサービスに接続
sqlplus hr/hr@//localhost:1521/ORCLPDB1

tnsnames.oraで名前解決している場合:

sqlplus hr/hr@ORCLPDB1

よくあるパターン:環境変数 ORACLE_SID だけ設定して接続失敗

ORACLE_SID=orclだけ設定してsqlplus hr/hrとすると、CDBルートに接続してしまい、PDBのユーザー(HR等)では認証失敗します。サービス名指定が必要です。

コモンユーザーで接続する場合

CDBルートのユーザー(C##で始まる)にPDBから接続したい場合:

ALTER SESSION SET CONTAINER = ORCLPDB1;
-- 通常のC##ユーザーで接続を試みる

または接続文字列でPDBサービスを指定するのが標準です。


【原因⑤】そもそもユーザーが存在しない

ユーザー名のスペルミスや、別環境からコピーした接続情報をそのまま使った場合に発生します。

ユーザーの存在確認

SELECT USERNAME FROM ALL_USERS WHERE USERNAME = 'SCOTT';

⚠️ 大文字で検索してください。Oracleではユーザー名は内部的に大文字管理が原則です。

ユーザーが存在しない場合

DBA権限のあるユーザーで作成:

CREATE USER scott IDENTIFIED BY tiger;
GRANT CONNECT, RESOURCE TO scott;

【原因⑥】接続文字列の指定ミス(別のDBに繋いでいる)

tnsnames.oraの設定や@dbnameの指定で別のDBに繋ぎに行ってしまい、そちらに存在しないユーザーで認証失敗するケースです。

接続先を確認

-- 現在のインスタンス名
SELECT INSTANCE_NAME FROM V$INSTANCE;

-- DB名
SELECT NAME FROM V$DATABASE;

-- ホスト名
SELECT HOST_NAME FROM V$INSTANCE;

tnsnames.ora の場所と内容

# Linux
echo $ORACLE_HOME/network/admin/tnsnames.ora
cat $ORACLE_HOME/network/admin/tnsnames.ora

# Windows
echo %ORACLE_HOME%\network\admin\tnsnames.ora
type %ORACLE_HOME%\network\admin\tnsnames.ora

接続文字列を直接指定して確認

tnsnames.oraを使わずEasy Connect形式で接続することで、設定問題を切り分けられます:

sqlplus scott/tiger@//hostname:1521/service_name

エラーが ORA-12541 / ORA-12154 に変わったら?

接続先指定を変えて「ORA-01017」ではなく接続エラー(ORA-12541、ORA-12154等)が出る場合は、そもそも接続先が間違っていたことを意味します。本記事のシリーズの[ORA-12541解説記事]・[ORA-12154解説記事]を参照してください。


【原因⑦】JDBC接続でのORA-01017

JavaアプリケーションからJDBC経由でORA-01017が発生する場合、追加の原因があります。

ドライバのバージョン互換性

12c以降のサーバーに対して、古いJDBC ドライバ(ojdbc6など)を使うと、新しい認証方式に未対応で接続失敗することがあります。

java -classpath ojdbc8.jar:. YourApp

推奨ドライバ:

  • Oracle 12c接続 → ojdbc8.jar(JDK 8+)
  • Oracle 19c接続 → ojdbc8.jar または ojdbc10.jar
  • Oracle 21c / 23ai / 26ai接続 → ojdbc11.jar(JDK 11+)または ojdbc17.jar(JDK 17+)

最新ドライバはOracle Database JDBC ドライバ公式ダウンロードページから取得できます。

認証アルゴリズムの不一致

Oracle 12c以降ではデフォルトで強力なパスワードベリファイア(12C verifier)が使われます。古いクライアントが対応していない場合、サーバー側で互換性設定を変更します:

-- 互換認証方式を許可(一時的・推奨されない)
ALTER SYSTEM SET SQLNET.ALLOWED_LOGON_VERSION_SERVER = 11 SCOPE=SPFILE;
-- DB再起動が必要

恒久的な解決はクライアントドライバを新しくすることです。

接続URL での記述

// 推奨:サービス名形式
String url = "jdbc:oracle:thin:@//hostname:1521/service_name";

// 旧来:SID形式
String url = "jdbc:oracle:thin:@hostname:1521:SID";

// TNSエイリアス形式(tnsnames.oraが必要)
String url = "jdbc:oracle:thin:@TNS_ALIAS";

パスワードに特殊文字がある場合のJDBC接続

getConnection(url, user, password) 方式なら通常エスケープ不要ですが、URL内に直接書く場合はURLエンコードが必要です。

// 安全
Connection conn = DriverManager.getConnection(url, "scott", "Tig@r!");

// URLに含める場合
String url = "jdbc:oracle:thin:scott/Tig%40r%21@//host:1521/svc";

【原因⑧】SYS / SYSTEM アカウントでの ORA-01017

管理者アカウント(特にSYS)には、通常ユーザーと異なる特殊事情があります。

SYS には AS SYSDBA が必須

SYSは特権ユーザーで、通常認証ではなく AS SYSDBA 句が必要です:

# 正しい
sqlplus sys/password@orcl AS SYSDBA

# 失敗(ORA-01017 または ORA-28009)
sqlplus sys/password@orcl

パスワードファイル(orapw)の問題

リモートから SYS AS SYSDBA で接続するには、サーバー上にパスワードファイルが必要です。

パスワードファイルの場所

# Linux
ls -l $ORACLE_HOME/dbs/orapw*

# Windows  
dir %ORACLE_HOME%\database\PWD*.ora

パスワードファイル再作成

# Linux
orapwd file=$ORACLE_HOME/dbs/orapwORCL password=new_password force=y

# Windows
orapwd file=%ORACLE_HOME%\database\PWDORCL.ora password=new_password force=y

REMOTE_LOGIN_PASSWORDFILE の確認

SHOW PARAMETER remote_login_passwordfile
意味
NONEパスワードファイル認証無効
EXCLUSIVE単一DBで使用(標準)
SHARED複数DB共有

NONEになっているとリモートSYS接続できないため、EXCLUSIVEに変更してDB再起動が必要です。

OS認証で接続を試す(最終手段)

SYSパスワードを忘れた場合、サーバー上で dba グループに属するOSユーザーで:

sqlplus / AS SYSDBA

これでログインできれば、SYSパスワードをリセット可能:

ALTER USER sys IDENTIFIED BY new_password;

【原因⑨】SQL*Plusでは繋がるが他ツールで繋がらない

「sqlplusでは認証OK・SQL Developerでは失敗」というケースもあります。

よくある原因

  • クライアントの暗号化設定 の違い
  • 接続文字列の解釈の違い(特にパスワードの特殊文字)
  • SSL/TLS要件 の不一致
  • JDBCドライバ のバージョン違い

SQL Developer での接続ミス

  • 「接続タイプ」が「TNS」になっていないか確認
  • 「ロール」プルダウンが間違ってないか(SYSDBA選択忘れ)
  • パスワードに特殊文字がある場合、入力欄に直接入力して**「テスト」ボタン**で確認

別ツールで同じ接続情報を試す

切り分けには、複数ツールで同じ情報を試すのが有効です:

  • SQL*Plus(CLI)
  • SQL Developer(GUI)
  • A5:SQL Mk-2(GUI)
  • 自作プログラム(JDBC/Python)

一部のみ失敗するなら、そのツール側の設定問題と切り分けられます。


【原因⑩】DataGuard / Standby DBへの接続

DataGuard環境で、**スタンバイDB(Read-Only)**に接続しようとして失敗するケースです。スタンバイは認証情報の更新が反映されないため:

  • プライマリでパスワードを変更した直後、スタンバイには未同期
  • スタンバイにはパスワードファイル同期が必要

確認

-- スタンバイかどうか
SELECT DATABASE_ROLE FROM V$DATABASE;
-- 結果: PHYSICAL STANDBY / PRIMARY

対処

プライマリ側で:

ALTER USER scott IDENTIFIED BY new_password;

パスワードファイルが同期されている場合は数秒で反映されます。同期されていない場合は、パスワードファイルを手動コピーする必要があります。


プログラム言語別 ORA-01017 対処

Python(python-oracledb)

import oracledb

try:
    conn = oracledb.connect(
        user="scott",
        password="tiger",
        dsn="localhost:1521/ORCLPDB1"
    )
except oracledb.DatabaseError as e:
    error, = e.args
    if error.code == 1017:
        print("認証エラー: ユーザー名・パスワードを確認")
        print(f"接続先: localhost:1521/ORCLPDB1")

oracledbpython-oracledb公式ドキュメントを参照。

Java(JDBC)

import java.sql.*;

try {
    Connection conn = DriverManager.getConnection(
        "jdbc:oracle:thin:@//localhost:1521/ORCLPDB1",
        "scott",
        "tiger"
    );
} catch (SQLException e) {
    if (e.getErrorCode() == 1017) {
        System.err.println("ORA-01017: 認証失敗");
        System.err.println("ユーザー名・パスワード・接続先を確認してください");
    }
}

Node.js(node-oracledb)

const oracledb = require('oracledb');

try {
    const conn = await oracledb.getConnection({
        user: 'scott',
        password: 'tiger',
        connectString: 'localhost:1521/ORCLPDB1'
    });
} catch (err) {
    if (err.errorNum === 1017) {
        console.error('認証失敗 - ユーザー/パスワードを確認');
    }
}

.NET(ODP.NET)

using Oracle.ManagedDataAccess.Client;

string connStr = "User Id=scott;Password=tiger;Data Source=ORCLPDB1;";
try {
    using var conn = new OracleConnection(connStr);
    conn.Open();
} catch (OracleException ex) when (ex.Number == 1017) {
    Console.WriteLine("認証失敗");
}

関連エラーと違い

ORA-01017と混同しやすいエラーを整理します。

ORA-28000: アカウントがロックされています

明示的にロックされた場合のエラー。ORA-01017とは別に出ることがあります。

対処:

ALTER USER scott ACCOUNT UNLOCK;

ORA-28001: パスワードが期限切れです

期限切れアカウントに接続した場合。ORA-01017ではなくこちらが出ることが多いです。

対処: パスワード変更で解決

ORA-28009: SYSへの接続にはAS SYSDBAが必要

SYSに通常認証で接続しようとした場合。

対処: AS SYSDBA を付ける

ORA-12541 / ORA-12154

そもそも接続文字列で指定したDBに到達できていない場合。認証以前の問題です。本シリーズの該当記事を参照してください。

ORA-01005: パスワードが指定されていません

パスワードが空文字で渡された場合。

対処: パスワードを明示的に指定


セキュリティ視点での注意

ロック解除の前に監査ログ確認

LOCKED(TIMED)不正アクセス試行が原因の可能性があります。ロック解除する前に、誰がいつ失敗したかを確認しましょう。

SELECT 
    USERNAME, 
    USERHOST, 
    TERMINAL, 
    TIMESTAMP, 
    RETURNCODE
FROM DBA_AUDIT_SESSION
WHERE USERNAME = 'SCOTT'
  AND ACTION_NAME = 'LOGON'
  AND RETURNCODE = 1017
ORDER BY TIMESTAMP DESC
FETCH FIRST 20 ROWS ONLY;

Unified Auditing(12c以降推奨)の場合:

SELECT 
    DBUSERNAME, 
    USERHOST, 
    TERMINAL,
    EVENT_TIMESTAMP,
    RETURN_CODE
FROM UNIFIED_AUDIT_TRAIL
WHERE DBUSERNAME = 'SCOTT'
  AND ACTION_NAME = 'LOGON'
  AND RETURN_CODE = 1017
ORDER BY EVENT_TIMESTAMP DESC
FETCH FIRST 20 ROWS ONLY;

予期せぬホスト・時刻からの失敗が続いている場合は、ブルートフォース攻撃の可能性も検討してください。

パスワード失敗回数のしきい値設定

-- 5回失敗で60分ロック
ALTER PROFILE DEFAULT LIMIT 
    FAILED_LOGIN_ATTEMPTS 5 
    PASSWORD_LOCK_TIME 1/24;

トラブルシューティング・チェックリスト

ORA-01017が出た時に上から順にチェックする手順です。

  1. パスワードのタイプミス・コピペミスがないか → 再入力
  2. 特殊文字のエスケープ・引用符が正しいか → クォート見直し
  3. 大文字小文字を正しく入力したか → 大小確認
  4. ユーザーが存在するかSELECT FROM ALL_USERS
  5. アカウントがロックされていないかDBA_USERS.ACCOUNT_STATUS
  6. パスワードが期限切れでないかDBA_USERS.EXPIRY_DATE
  7. 接続先のCDB/PDBが正しいか → サービス名指定
  8. SYS接続なら AS SYSDBA を付けたか
  9. クライアントドライバが対応バージョンか → ojdbcバージョン確認
  10. パスワードを再設定できる権限が手元にあるか → DBA経由でリセット

これでも解決しないなら、Oracleサポートに問い合わせるべきレアケースです。


よくある質問(FAQ)

Q1. 昨日まで繋がっていたのに今日突然 ORA-01017 になります

主な原因:

  • パスワードが期限切れになった → DBA_USERS.EXPIRY_DATEを確認
  • 連続失敗で自動ロックされた → LOCKED(TIMED) 状態
  • 管理者がパスワードを変更した
  • パスワードを他人がリセットした

まずはDBA_USERSでアカウント状態を確認してください。

Q2. パスワードに @ を含んでいて接続できません

シェルが @ を区切り文字として誤解釈しています。引用符で囲んでください:

sqlplus 'scott/"P@ssw0rd"@orcl'

Q3. SYS / SYSTEM のパスワードを忘れました

サーバーにOSログインできるなら:

sqlplus / AS SYSDBA
SQL> ALTER USER sys IDENTIFIED BY new_password;
SQL> ALTER USER system IDENTIFIED BY new_password;

OSログイン権限もない場合は、サーバー管理者・クラウドベンダーへ依頼が必要です。

Q4. 同じ情報で開発環境では繋がるのに本番では繋がりません

ありがちな原因:

  • PDB名が違う(dev=DEVPDB、本番=PRDPDB
  • パスワード ポリシーが本番のほうが厳格で期限切れ
  • 本番では同じユーザー名で別のスキーマとして存在
  • 本番ではSSL/TLS必須でクライアント設定不足

各環境のtnsnames.oraと接続文字列を比較してください。

Q5. JDBC で接続すると「ORA-01017」、SQL*Plus では成功します

ドライバのバージョン互換性問題の可能性が高いです。最新のojdbc11.jar / ojdbc17.jarを使ってください。oracle.jdbc.thinLogonCapability プロパティでの調整も可能です:

Properties props = new Properties();
props.put("user", "scott");
props.put("password", "tiger");
props.put("oracle.jdbc.thinLogonCapability", "o3");  // 古いサーバー互換
Connection conn = DriverManager.getConnection(url, props);

ただし将来的にはドライバ更新が必須です。

Q6. 「SEC_CASE_SENSITIVE_LOGON を FALSE にしたら繋がりました」と言われましたが?

短期的な解決策としては機能しますが、Oracle 19c以降で非推奨パラメータであり、将来削除されます。本来は正しい大小文字でパスワードを入力するのが解です。FALSE設定はセキュリティを著しく弱体化させるため、本番環境では絶対に避けてください。

Q7. パスワードが正しいのに失敗します。何度確認しても

以下を試してください:

  1. パスワードに改行・空白が含まれていないかメモ帳で確認
  2. 全角文字が混入していないか
  3. ユーザー名・パスワード両方を新しいシンプルな値にリセットして再確認
  4. OS言語環境(LANG変数)の違いをチェック
  5. クライアントの文字コード(NLS_LANG)が正しいか

Q8. SQL Developer の接続テストだけ失敗します

  • 接続タイプ」がBasicTNSAdvancedのどれかを確認
  • TNS選択時はtnsnames.oraのパス設定が必要
  • 接続ロール」がDefaultになっているか(SYSDBA選択忘れに注意)
  • パスワードを再入力してから「接続テスト

Q9. リモートからの接続だけ失敗します

ローカルでは成功するなら、ネットワーク経路またはリスナー設定の問題の可能性。

  1. sqlplusローカルでパスワード確認
  2. リモートからは別エラー(ORA-12541等)が出ていないか確認
  3. リスナー稼働確認: lsnrctl status

ORA-12541が真の原因なら、本シリーズの該当記事を参照してください。

Q10. プロファイルでFAILED_LOGIN_ATTEMPTS=UNLIMITEDにすれば永久にロックされませんか?

技術的には可能ですが、ブルートフォース攻撃に対して無防備になるため強く非推奨です。標準の 10回 または 5回 設定を維持してください。


参考リンク・関連資料

Oracle公式ドキュメント

JDBCドライバ

プログラム言語ドライバ


まとめ

ORA-01017は単純な認証エラーに見えて、実は10種類以上の原因があります。トラブルシューティングの要点を再整理します。

  • 入力ミスチェックを最優先: タイプミス・特殊文字エスケープ・大文字小文字
  • アカウント状態を確認: DBA_USERS.ACCOUNT_STATUSで LOCKED / EXPIRED を判別
  • CDB/PDB環境では接続先確認: サービス名で明示的にPDB指定
  • SYS接続は特殊: AS SYSDBA 句とパスワードファイル
  • JDBCはドライババージョン要確認: 12c+サーバーにはojdbc8以降
  • セキュリティ視点も忘れずに: ロック解除前に監査ログ確認

これらの知識は、開発環境のセットアップ・本番運用・ユーザー管理・セキュリティ監査などあらゆる場面で必須です。本記事をブックマークしておけば、ORA-01017に遭遇した時にすぐ参照できます。


本記事は2026年6月時点の情報をもとに、Oracle Database 19c / 21c / 23ai / 26ai での動作確認・公式ドキュメントに基づき作成しています。バージョンによってパラメータや認証方式が異なる場合があるため、最新の情報はOracle公式ドキュメントもあわせてご確認ください。