Oracleエラー対応(ORA-28040):ORA-28040の対処方法について

現役DBAが解説-Oracleエラー対応
OracleデータベースとOracleクライアントのバージョンが異なる環境の場合、Oracleクライアントから接続した際、認証プロトコルでエラーとなりORA-28040が発生するケースがあります。
Oracleのバージョンを統一する事が困難な状況もあると思いますので、今回は、ORA-28040発生時の原因および解決策をご説明します。
1. エラーメッセージ
ORA-28040: 一致する認証プロトコルがありません
2. 事象
12cデータベースに、低いバージョンのOracleクライアントから接続した場合、認証プロトコルでエラーとなりORA-28040が発生します。
※本記載では、Oracleクライアントのバージョンは11gを使用しています。
C:¥>sqlplus TEST_USER/********@TEST_DB SQL*Plus: Release 11.2.0.1.0 Production on Thu Mar 18 15:37:13 2021 ←クライアントのバージョンは11g Copyright (c) 1982, 2010, Oracle. All rights reserved. ERROR: ORA-28040: 一致する認証プロトコルがありません
3. 原因と解決策
接続時に認められる認証プロトコル設定が、セキュリティ強化により値が変更された事に起因しています。
対象パラメータ名は「SQLNET.ALLOWED_LOGON_VERSION_SERVER」となっており、設定のデフォルトは、12.1から11、12.2から12へと変更されました。
そのため、設定値より低いバージョンのクライアント接続では認証で失敗します。
解決策ですが、対象パラメータ名は「SQLNET.ALLOWED_LOGON_VERSION_SERVER」の設定値変更を行うことで解決します。
まずsqlnet.ora ファイルを開いて、「SQLNET.ALLOWED_LOGON_VERSION_SERVER」の設定値を確認します。
以下の例では、設定値が12になっていることが分かります。
①sqlnet.oraファイルの確認
[oracle@admin]$ cat sqlnet.ora SQLNET.ALLOWED_LOGON_VERSION_SERVER=12 ←設定値が12 [oracle@ admin]
本記載では、Oracleクライアントのバージョンが11なので、設定値を11に変更します。
※sqlnet.ora ファイルにSQLNET.ALLOWED_LOGON_VERSION_SERVERの記載が無い場合、追記します。
②変更後のsqlnet.oraファイル
[oracle@admin]$ cat sqlnet.ora SQLNET.ALLOWED_LOGON_VERSION_SERVER=11 ←設定値を11で追加または変更 [oracle@ admin]
変更後に接続確認をおこないます。
C:¥>sqlplus TEST_USER/********@TEST_DB SQL*Plus: Release 11.2.0.1.0 Production on Thu Mar 18 17:44:19 2021 ←クライアントのバージョンは11g Copyright (c) 1982, 2010, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production ←データベースのバージョンは12c SQL>
4. 注意事項
データベースを10Gから12.2にアップグレードした後のケースでは、ユーザがログインできない可能性があります。
10Gで作成されたユーザーは、認証プロトコルが10Gのパスワード・バージョンになるため、大文字と小文字を区別しないパスワードバージョンを使用します。
12.2にアップグレードした後は、大文字と小文字が区別されるパスワードバージョン設定になるため、旧バージョンのパスワード認証を受け付けなくなり、ログインに失敗する可能性があります。
対応として、ユーザーパスワードを再度変更する必要があります。
5. 最後に
今回のORA-28040が発生するケースについて説明は以上となります。
クライアントのバージョンを上げる事が出来れば問題無いと思いますが、要件などにより以前のバージョンを使用する場合は、12cで強化されたセキュリティ機能に注意しながら、記載内容の解決策を検討してもらえればと思います。