2022年8月9日火曜日

Oracle11gクライアントから12cへの接続エラー

Oracle11gのクライアントから、12cのサーバに接続するための手順です。

1.サーバのファイアウォールで、ポート1521の受信を許可する。

確認方法は、クライアントからコマンドで
tnsping [ip address]
OK と出力されること。

2.クライアントから接続試行、認証できない

接続試行したエラーメッセージ
ORA-28040: 一致する認証プロトコルがありません

これは11gからサーバに接続できる設定になっていない。サーバの sqlnet.ora にパスワード検証機能の設定を追加する。
SQLNET.ALLOWED_LOGON_VERSION_SERVER=11
(SQLNET.ALLOWED_LOGON_VERSION は非推奨、上記の _SERVER を使用する)
(リスナーの再起動は不要)

3.クライアントから接続試行、パスワードが無効

接続試行したエラーメッセージ
ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました

パスワードが正しくても、改めてパスワード・バージョンを再構成すると解消した。これは ALLOWED_LOGON_VERSION_SERVER の設定変更後に実施する。

SELECT USERNAME, PASSWORD_VERSIONS FROM DBA_USERS;
現在の PASSWORD_VERSIONS は [11G 12C] となっており、11G が含まれるので問題ないと思われたが、[11G 12C] というのは、上記の ALLOWED_LOGON_VERSION_SERVER のパラメータ値だと 12 に該当し、Oracle11gリリース2(11.2.0.3以上)に該当するので要注意。

ALTER USER user IDENTIFIED BY password;
同じパスワードで再設定すると、[10G 11G 12C] (同じくパラメータ値 11 相当)となり、11gのリモートから認証できるようになった。


SQLNET.ALLOWED_LOGON_VERSION_SERVER リファレンス
https://docs.oracle.com/cd/E96517_01/netrf/parameters-for-the-sqlnet-ora-file.html#GUID-1FA9D26C-4D97-4D1C-AB47-1EC234D924AA