CompatibilityJDBCSQLNET

ORA-28040: 一致する認証プロトコルがありませんの解決方法

ORA-28040: 一致する認証プロトコルがありません

Oracleクライアント9.2から12.1データベースに接続しようとしましたが、ORA-28040: 一致する認証プロトコルがありません

私は、バージョン間にいくつかの相互運用性の問題がある可能性があることを知っていました、特にこのケースのようにバージョンギャップが大きい場合、Oracle 9iクライアントは12cデータベースに接続します。しかし、ORA-28040が登場するとは思っていませんでした。

12cデータベースに接続するためにojdbc14.jar以下など、古いOracle JDBCドライバを使用しているときにも同じエラーが発生する可能性があります。この記事の後半で、Oracle JDBCドライバについて、ORA-28040を使用して詳細に説明します。

ORA-28040の内容を見てみましょう。

  • 説明
  • ORA-28040: 一致する認証プロトコルがありません

  • 原因
  • クライアントとサーバーの両方で有効な認証プロトコルがありません。

  • アクション
  • 管理者は、クライアントとサーバーの両方で、SQLNET.ALLOWED_LOGON_VERSION_SERVERおよびSQLNET.ALLOWED_LOGON_VERSION_CLIENTパラメータの値を、システムでサポートされている最小バージョンのソフトウェアと一致する値に設定する必要があります。このエラーORA-28040は、クライアントソフトウェアのバージョンに適した検証機能なしで作成されたユーザーアカウントに対してクライアントが認証を行っているときにも発生します。この状況では、必要な検証者が生成され、認証が正常に続行されるようにするために、そのアカウントのパスワードをリセットする必要があります。

サーバーかクライアントか

ORA-28040に関する上記の説明によると、クライアントまたはサーバーのどちらかが受け入れる互換性のある認証プロトコルを提供する必要があります。しかし、ここでの問題は、サーバー構成を変更するのか、それともOracle クライアントをアップグレードするのかということです。

実際、それはあなたが持っている特権によって異なります。データベース管理者は、すべてのユーザーの問題を一度に解決するようにサーバー構成を変更できます。開発者にとっては、Oracle 12cデータベースの認証済みプロトコルと一致させるために、Oracleクライアントを修正またはアップグレードすることしかできません。

さまざまな適用可能な状況をよりよく理解するために、この記事ではORA-28040に対する解決策を2つの主要部分に分けます。最初の部分はサーバー側、もう1つはクライアント側です。

  1. サーバーサイドソリューション
  2. クライアントサイドソリューション

ORA-28040のサーバー側ソリューション

サーバー側でネットワーク構成を変更する権限がある場合は、すべてのユーザーのORA-28040を数分で解決する可能性があります。 実際のところ、ほとんどの開発者は権利を持っていません。

シナリオ1:新しいデータベースがサーバーとして機能している

Oracle 9iクライアントから12cサーバー
Oracle 9iクライアントから12cサーバー

12cなど、より古いバージョンのデータベースに接続するためにユーザーが古いクライアントのアップグレードを拒否した場合、ORA-28040は日常業務で頻繁に発生する一般的なエラーになります。

前記クライアントは、以下のようにOracle 12cデータベースサーバに接続するためのクライアントとして機能するOracle 9iサーバであり得る。ORA-28040が通常どおりsqlplusによってスローされました。

ORA-28040:SQL * Plus 9iから12cへの接続
ORA-28040:SQL * Plus 9iから12cへの接続

他の解決策を探したところ、ORA-28040を説明するのに非常に役立つsqlnet.oraファイルのパラメータ」に関するOracleのドキュメントが見つかりました。その中で、認証プロトコルの両端との互換性を保つためにどのような状況でSQLNET.ALLOWED_LOGON_VERSION_SERVERを使用するべきかを説明します。

目的

Oracle Databaseインスタンスに接続するときに許可される最小認証プロトコルを設定します。

使用上の注意

パラメータ名のVERSIONという用語は、Oracle Databaseのリリースではなく、認証プロトコルのバージョンを表します。

クライアントのバージョンがこのパラメータで定義された値を満たさない、または超えない場合、認証はORA-28040: 一致する認証プロトコルがありません、またはORA-03134:このサーバーバージョンへの接続はサポートされなくなりました。

これは私のORA-28040に対する解決策です:12.1データベースサーバーのsqlnet.oraSQLNET.ALLOWED_LOGON_VERSION_SERVER=8を追加します(古いクライアントではありません)。

[oracle@test ~]$ vi $ORACLE_HOME/network/admin/sqlnet.ora
...
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8

MOS Doc ID 562589.1に従ってRAC環境にいる場合は、グリッドレベルではなくデータベースレベルでsqlnet.oraを使用する必要があります。そして私はそれを確認しました。

有効にするためには、リスナーを再起動する必要はありません。新しい着信接続は新しい値を適用します。設定が正しいことを確認してください。

今回は、予想どおりORA-28040は表示されませんでした。

シナリオ2:新しいデータベースがクライアントとして機能している

Oracle 12cクライアントから9iサーバーへ
Oracle 12cクライアントから9iサーバーへ

反対の方向から、12.1から9.2データベースに接続する場合は、データベースリンク接続と言いますが 、sqlnet.oraには、認証されていない認証プロトコルエラーORA-28040を設定する必要があります 。 SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

ご参考までに、以下にSQLNET.ALLOWED_LOGON_VERSION_CLIENTに関する説明を引用します。ORA-28040と同じ理由で、これは互換性のある問題です。

目的

クライアントに許可されている最小認証プロトコルを設定し、Oracleデータベースインスタンスに接続するときに、サーバーがクライアントとして機能しているとき(データベースリンクを介した接続など)を設定します。

続きを読む:DBリンクができることとできないこと

9iから12cへの接続はこの記事で提供される解決策によって回避することができます。対照的に、12cから9iは通常、ORA-28040ではなくORA-03134が原因で失敗します。

ORA-03134: Connections to this server version are no longer supported.

ORA-03134の解決方法については別の投稿で説明しました。ORA-03134の解決方法:このサーバーバージョンへの接続はサポートされなくなりました。.

ORA-28040のクライアント側ソリューション

DBAとして機能しない開発者は、サーバー上のSQLNET.ORAを変更する権限を持たない可能性があります。そのため、自分自身のクライアントを変更またはアップグレードすることが、おそらくORA-28040に対する唯一の解決策です:一致する認証プロトコルがありません。これから、私達は顧客に焦点を合わせ始めます。特にOracle JDBCドライバを使用している人のために。

Oracle JDBCドライバ

以来、オラクル12.1データベースはそれに対応していると主張してojdbc6.jar JDK 6またはojdbc7.jar JDK 7のために、ojdbc14.jarを 12.1データベースの認証プロトコルを介して接続するJDK 1.4または以下もはやクライアントのためにマッチングされます。そのため、java.sql.SQLExceptionエラースタックにORA-28040が表示されます。

JDBC開発者向けの詳細な情報はで見つけることができるのOracle JDBCドライバのバージョン互換性:Oracle Database JDBC開発者ガイド。

それでは、ORA-28040を生成するクライアントツールとその処理方法を見てみましょう。

  1. SQL Developer
  2. PL/SQL Developer
  3. TOAD for Oracle
  4. SQuirreL SQL Client

SQL Developer

このように古いSQL開発者を使用していた場合は、12.1データベースに接続するたびにORA-28040が表示されます。

SQL開発者 - 接続テストでORA-28040が見つかりました:一致する認証プロトコルがありません
SQL開発者 – 接続テストでORA-28040が見つかりました:一致する認証プロトコルがありません

基本的に、SQL開発者は自己完結型のソフトウェアです、あなたはソフトウェアを解凍してそれを使い始めることができます。つまり、SQL開発者は通常、JDBCドライバを含む独自のJDKを使用して自分自身を実行します。

解決

同じJDBC開発者とOracle JDBCドライバを交換することはできませんでしたが、最新のSQL開発者とOracle Webサイトから新しいOracle JDBCドライバをいつでもダウンロードできます。ORA-28040を解決するために。

接続設定については心配しないでください。新しいSQL開発者は、初めて開いたときに移行オプションを選択するように求めます。

続きを読む:SQL DeveloperからMySQLに接続する方法

PL/SQL Developer

PL/SQL開発者はインストールベースのソフトウェアです。通常、ネイティブのOracleクライアントを利用して必要な設定ファイルを見つけます。さらに、ネイティブのOracleクライアントのOracle Call Interface(OCI)を使用してOracleデータベースに接続します。

つまり、ネイティブのOracleクライアントが十分に古い場合は、次のようにORA-28040が表示されます。

PL/SQL DeveloperでのORA-28040
PL/SQL DeveloperでのORA-28040

解決

PL/SQL開発者におけるORA-28040の解決策は、古いOCIを新しいOCIに置き換えることです。まず最初に、対応するOCIライブラリを含むOracleインスタントクライアントをダウンロードする必要があります。正しいバージョンは少なくとも11gです。

この例では、Windows用32ビットOracleインスタントクライアントの基本パッケージをC:\oracleにダウンロードして解凍しました。ファイル名は、たとえばinstantclient-basic-nt-11.2.0.4.0.zipです。

Oracle Instant Client 11.2を使用する前に、少なくともMicrosoft Visual Studio 2005 Redistributableがマシンにインストールされていることを確認してください。

ステップ1:環境設定ダイアログを開く

機能メニューをクリックし、Tools -> Preferencesを検索してダイアログを開きます。

PL/SQL開発者 - 機能メニュー - ツール - ><figcaption id=設定” width=”800″ height=”480″ class=”size-full wp-image-4072″ /> PL/SQL開発者 – 機能メニュー – ツール – >設定

ステップ2:CONNECTIONセクションへ

Oracle -> Connectionをクリックして、現在のOracleホームを確認します。

PL/SQL開発者 - 設定 - 接続
PL / SQL開発者 – 設定 – 接続

ステップ3:OCIライブラリを変更する

新しい解凍したインスタントクライアントのOCIを指定します。ディレクトリだけでなく、ファイル名を含む絶対パス全体を指定する必要があります。

PL/SQL開発者 - 設定 - 接続 - OCIライブラリの場所の変更
PL/SQL開発者 – 設定 – 接続 – OCIライブラリの場所の変更

ステップ4:接続をテストする

PL/SQL開発者を再起動し、Oracle 12cデータベースにログオンします。

PL/SQL開発者 - Oracle 12cデータベースへのログオン
PL / SQL開発者 – Oracle 12cデータベースへのログオン

それが、PL/SQL DeveloperのORA-28040との戦いです。

Toad for Oracle

Toad for Oracleは、主にデータベース管理や時には開発に使用されるインストーラベースのソフトウェアです。基礎となるネットワークサブストレートが古いOracle 9.2と同じ場合、Toad for Oracleで同じエラーORA-28040が発生することがあります。

ORA-28040 Toad for Oracle - From 9i to 12c
ORA-28040 Toad for Oracle – From 9i to 12c

ご覧のとおり、このツールは12cデータベースに接続するために基礎となるOracleクライアント9.2を利用しました。そのため、Toad for Oracle 9.7でORA-28040の警告が表示されました。

解決

Toad for OracleでのORA-28040の解決策は非常に簡単です。Toadが利用するために少なくとも11gの新しいOracleクライアントをインストールするだけです。

「Oracleクライアント」と「Oracleインスタントクライアント」は異なり、前者はインストールベースで本格的なソフトウェアであり、後者は移植性があり部分的に機能するパッケージです。

この場合、Oracle WebサイトからOracleクライアント11.2.0.1 for windows 32-bitをダウンロードしてインストールしました。 その結果、新しくインストールされたOracleクライアントは、Toadなどのツールが認識するための環境変数として、ORACLE_HOMETNS_ADMINなどのレジストリパラメータをいくつか作成します。そのため、再起動されたToadは自動的に新しいOracleクライアントを検出します。

Toad for Oracleによって検出された新しいOracleクライアント
Toad for Oracleによって検出された新しいOracleクライアント

ご覧のとおり、新しいOracleクライアントはToadによって発見され、Oracle 12cデータベースの認証プロトコルと一致させるために使用する準備が整いました。

新しいOracleクライアントが検出されずに選択されていない場合は、ドロップダウンリストを使用して適切なものを選択してください。それでも、ドロップダウンリストに新しいOracleクライアントがない場合は、WindowsのORACLE_HOMETNS_ADMINなど、新しいOracleクライアントに必要なレジストリパラメータを確認する必要があります。

SQuirreL SQL Client

SQuirreL SQL Clientは、適切なJDBCドライバが与えられたデータベースにアクセスできる純粋なJavaベースのソフトウェアです。このツールでは、12cデータベースに接続するためにojdbc14.jarを使用しました。エラーは同じです。ORA-28040: 一致する認証プロトコルがありません。

SQuirreL SQL Client - ORA-28040: 一致する認証プロトコルがありません
SQuirreL SQL Client – ORA-28040: 一致する認証プロトコルがありません

解決

それをどう扱うか?今回は、ORA-28040を解決するためにSQL開発者のようなソフトウェアをアップグレードする必要はありません。このツールを使用すると、Oracle JDBC Driverを新しいバージョンに置き換えることができるためです。この場合、古いドライバojdbc14.jarを新しいojdbc7.jarに置き換えます。

まず最初に、Oracle JDBCとUCPのダウンロードページで、認証された12cデータベースのプロトコルと一致する適切なJDBCドライバを選択してダウンロードする必要があります。12cデータベースでは、ojdbc6.jarまたはojdbc7.jarのいずれかのOracle JDBCドライバがORA-28040を解決するのに適しています。

ステップ1:古いドライバを削除する

ojdbc14.jarである古いドライバを削除します。

SQuirreL SQL Client - ojdbc14.jar Oracle JDBCドライバの削除
SQuirreL SQL Client – ojdbc14.jar Oracle JDBCドライバの削除

ステップ2:新しいドライバを追加する

ボタンをクリックしてくださいAdd

SQuirreL SQL Client - ドライバの追加
SQuirreL SQL Client – ドライバの追加

ファイルブラウザでojdbc7.jarを選択します。

SQuirreL SQL Client - ojdbc7.jar Oracle JDBCドライバの追加
SQuirreL SQL Client – ojdbc7.jar Oracle JDBCドライバの追加

以下のように新しいドライバが選択されます。

SQuirreL SQLクライアント - ojdbc7.jar Oracle JDBCドライバが追加されました
SQuirreL SQLクライアント – ojdbc7.jar Oracle JDBCドライバが追加されました

ステップ3:接続をテストする

古いOracle JDBCドライバを新しいドライバに置き換えた後、接続をもう一度テストできます。

SQuirreL SQL Client - 12.1への接続に成功
SQuirreL SQL Client – 12.1への接続に成功

接続は成功し、ORA-28040は終了しました。

Leave a Reply

Your email address will not be published. Required fields are marked *