Oracleエラー対応(ORA-01017):ORA-01017発生時の対応について
現役DBAが解説-Oracleエラー対応
データベース接続時にORA-01017が発生する可能性があります。
本記事ではORA-01017発生時の対応方法を解説します。
1. エラーメッセージ
ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。 ユーザー名を入力してください:
ユーザー名/パスワードのどちらか、または両方が無効の場合に本エラーが発生します。
2. 対応方法
エラーが発生したら、まずは原因解明のための調査および対応を実施します。
① ユーザー名/パスワードが正しいかを確認
まずはユーザー名/パスワードが正しいか確認しましょう。
単純にユーザー名やパスワードが間違っている場合に本エラーが発生します。
【補足情報】
SEC_CASE_SENSITIVE_LOGON パラメータと
SQLNET.ALLOWED_LOGON_VERSION_SERVERパラメータの競合
下記は、12cより前のバージョンから12c以降にバージョンアップする場合に、よくある事例です。
<事象>
SEC_CASE_SENSITIVE_LOGON = falseでSQLNET.ALLOWED_LOGON_VERSION_SERVER = 12 の設定を行っている環境では競合が起き、ORA-01017によりログオンできなくなります。
<パラメータ説明>
SEC_CASE_SENSITIVE_LOGON
データベースにおけるパスワードの大/小文字の区別を有効または無効にするパラメータです。
しかし、12cより非推奨となっており、デフォルト値はtrueで下位互換性のために現在残されています。
バージョン | 大文字/小文字の区別 | パラメータ変更 |
---|---|---|
10g以前 | 無し | – |
11g以降 | 有り(デフォルト=TRUE) | 可 |
12c以降 | 有り(デフォルト=TRUE) | 可 ※非推奨 |
SQLNET.ALLOWED_LOGON_VERSION_SERVER
DB接続時に認められる最小の認証プロトコルを設定します。
12cでは、SQLNET.ALLOWED_LOGON_VERSION_SERVERパラメータのデフォルト値が12であり、大文字/小文字を区別する11gおよび12cのパスワードバージョンのみ使用可能な設定です。
<対処方法>
競合が発生しないようにどちらかの方式に統一します。
SEC_CASE_SENSITIVE_LOGON=TRUE、SQLNET.ALLOWED_LOGON_VERSION_SERVER=12
SEC_CASE_SENSITIVE_LOGON=FALSE、SQLNET. ALLOWED_LOGON_VERSION_SERVER=11以下
② 接続先DBの確認
ローカル接続の場合は環境変数のORACLE_SIDを確認してください。
リモート(リスナー)接続の場合はtnsnames.oraの定義を確認してください。
●tnsnames.oraの記載例(デフォルトの配置先:{環境変数 ORACLE_HOME}/network/admin)
接続文字列 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ホスト名)(PORT = ポート番号)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = サービス名) ) )
【補足情報】
プラガブル・データベースへの接続方法
12cからマルチテナント・アーキテクチャという機能で、コンテナ・データベース(CDB)とプラガブル・データベース(PDB)が登場しました。
プラガブル・データベースへの接続方法の間違いで本エラーに遭遇する方も多いようです。
PDBへの接続はTNS経由の接続しか受け付けられないため、ローカル接続の場合にはORA-01017が発生します。
●PDBへの接続
×(ORA-01017) | sqlplus <ユーザー名>/<パスワード> |
〇 | sqlplus <ユーザー名>/<パスワード>@<tnsnames.oraに記載したPDBへの接続文字列> |
3. 最後に
ORA-01017に関する解説は以上となります。
ローカル接続かリモート接続かにより、確認対象が異なります。
また、ユーザーが存在しない場合にも本エラーが発生します。
ORA-01017が発生した場合にはユーザー名/パスワードおよび接続先DBを確認しましょう。