oracle 技術情報

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

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

こんにちは、shimashima(しましま)です。

先日、Oracle19cでORA-28040のエラーが発生したので、その対処法を共有させてもらいます。

ORA-28040

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

No matching authentication protocol

このエラーは、僕の場合はOracle11gの環境をOracle19cに移行(バージョンアップ)させていたんですが、その際に11gや12cのOracleClientの環境から19cにアクセスした際に発生しました。

19cのサーバーで構築して、そこでsqlplusで接続して操作している分には問題なかったのです。

構築が終わったと思って、今まで11gや12cに接続していたクライアントから、19cの新環境にアクセスした際にエラーが発生したのです。

しましま
あれ、おなじコマンドで使っているのに、今までの環境から繋がらないなぁ。

と、ネットワークやファイヤーウォールの問題なのかと見ていましたが、全然違いました。

下位のクライアントのバージョンから接続しようとしていたのが原因でした。

 

対処方法は、簡単です。

Oracle19cが入っているサーバーの「sqlnet.ora」ファイルを修正するだけです。

「sqlnet.ora」ファイルは、%ORACLE_HOME%¥NETWORK¥ADMINにあります。

しましま
tnsnames.oraなどど同じ場所にありますよ。

sqlnet.oraファイルに以下の記述を追記します。

sqlnet.ora

SQLNET.ALLOWED_LOGON_VERSION=11

しましま
場所は最終行で良いと思いますよ。

ちなみに上記の例だと、「11」を指定していますが、接続するクライアントが8iであれば、「8」、10gであれば「10」とすれば良いでしょう。

10gと11gの両方のクライアントを使う場合には、低い方に合わせて「10」に設定すれば、良いと思います。

しましま
sqlnet.oraファイル編集後に、Oracleの再起動は不要でした。

 

これで11gからのクライアントから接続できた!と思ったら、今度は次のエラーが発生しました。

ORA-01017

ユーザー名/パスワードが無効です;ログオンは拒否されました

Invalid username/password; logon denied.

しましま
え?パスワードを間違えた!?

と思って、何度もパスワードを打ち直しましたが、同じエラーが出て、ついにはパスワードを規定回数間違えて、ユーザーがロックされました。

アカウントのロックの解除は、以下のSQLを実行すれば、すぐに直るのですが。

アカウントロックの解除

alter user XXXX account unlock;

※XXXXのところは、ユーザー名に置き換えて下さい。

そんなわけで、なんだろうと調べていたら、SQLNET.ALLOWED_LOGON_VERSIONを変えた場合には、再度パスワードを変更する必要があったみたいです。

たしかに19cでユーザーを作った時には、11gの認証ルールを許可していないので、19cの認証ルールしかユーザーに適用されていなかったわけです。

そこで、SQLで以下を実行します。

パスワードの変更

ALTER USER PASSWORD IDENTIFIED BY XXXX;

※XXXXのところは、ユーザー名に置き換えて下さい。

※PASSWORDのところは、パスワードに置き換えて下さい。

しましま
パスワードは前と同じパスワードでも問題なかったです。

そして、再度11gのクライアントから19cにアクセスすると、エラー無く、無事に接続できました!

 

-oracle, 技術情報

© 2020 shimashima.com