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

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で強化されたセキュリティ機能に注意しながら、記載内容の解決策を検討してもらえればと思います。