おらくるのいる生活

OracleのDBAとしての、障害対応やらパフォーマンス・チューニングやらの日々を綴っています

ORA -12638が発生してDBに接続できない

本番リリースを控えてテスト中の環境で、DBリンク経由の接続ができないので調査して欲しいとの連絡がありました。

環境は以下の通りです。

Oracle Database SE2 19.17.0.0
Microsoft Windows

[rakuten:book:15723662:detail]

初めに聞いた話ではWindows上のDBからLinux上のDBへの接続はできるが逆はできないという話でしたが、切り分けの為、色々と試してみてもらった結果、DBリンクを経由せずにsqlplusから直接接続しようとした場合も含め、Windows上のDBへの接続時にORA -12638が発生するという事象でした。   

別のWindowsサーバ上にあるDBへの接続でもやはり同じエラーが発生し、Linuxサーバ上のDBへの接続では問題が発生しません。

 

早速MOS(MyOracleSupport)で調べたところ、以下のドキュメントがヒットしました。

Windows : While Connect to Database Getting ORA-12638 After Applying Jan 2021 WINDBBP 19.10.0.0.210119 On Windows 64/32 Bit Database Client (ドキュメントID 2757734.1)

これは19.10以降でSQLNET.AUTHENTICATION_SERVICES=(NTS) 設定時に発生する現象で、セキュリティバグの修正により、SQLNET.NO_NTLM のデフォルト値が TRUE に変更され、デフォルトで NTLM が無効になった事が原因です。

 

19.10以降とそれ以前の認証方式の違いは以下の通りです。

 

RU 19.9 以前:
 まず Kerberos 認証が実行され、認証できない場合に自動的に NTLM 認証に切り替わります。
 NTLM 認証で接続できれば、エラーは発生しません。
 
RU 19.10 以降:
 まず Kerberos 認証が実行され、認証できない場合の動作は sqlnet.ora のSQLNET.NO_NTLM パラメータによって制御されます。
 デフォルト(SQLNET.NO_NTLM=TRUE)の場合、自動的に NTLM 認証への切り替えは行われず、ORA-12638 が発生します。
 sqlnet.ora に SQLNET.NO_NTLM=FALSE が設定されている場合は、19.9 以前と同様の
動作となり、自動的に NTLM 認証への切替が行われます。

 

つまりsqlnet.ora に SQLNET.NO_NTLM=FALSE を設定すれば良い訳で、設定後、無事接続できるようになりました。   

なお、18.13以降でも同様の現象が発生します。

 

また、以下のドキュメントも見つけました。

ORA-28545 - Unable To Connect To Remote Database Using Database Link After Apply latest Windows Bundle Patch (ドキュメントID 2766848.1)

こちらはエラーコードがORA-28545で、対象が19.13以降なのですが、同様のセキュリティ上の修正により接続時にエラーが発生するというもので、対処法は上記と同じです。