この記事ではORA-12638のエラーが発生した際の対処法を解説します。
ORA-12638: 資格証明の取出しに失敗しました。
SQL*PlusにてOS認証にてDBに接続しようとしたところ、ORA-12638のエラーが発生し、DBに接続できませんでした。
C:\Users\XXXXX>sqlplus / as sysdba
SQL*Plus: Release 21.0.0.0.0 - Production on X X月 X XX:XX:XX XXXX
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
ERROR:
ORA-12638: 資格証明の取出しに失敗しました。
ユーザー名を入力してください:
この現象はWindowsのDBサーバへOS認証を使ってDBに接続しようとすると発生します。
原因はNTLM認証が無効化されたことによって認証ができなくなったためです。
Windowsにバンドルパッチを適用したことによるセキュリティバグ修正によって、NTLM認証が無効化されることがあるようです。
NTLM認証を使用したい場合は明示的に設定する必要があります。
対処法
sqlnet.oraを編集することによって対処可能です。
OS認証自体を無効化してしまう方法と、NTLM認証を有効化する2つの方法があります。
①OS認証を無効化する
sqlnet.oraのSQLNET.AUTHENTICATION_SERVICES の値を (NONE)に変更します。
変更後はDBサーバの再起動が必要です。
この方法だとOS認証自体が使えなくなります。
OS認証を使わなくても大丈夫な場合はこの設定で問題ありません。
SQLNET.AUTHENTICATION_SERVICES= (NONE)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
②NTLM認証を有効化する
sqlnet.oraにSQLNET.NO_NTLM=FALSEを追記します。
変更後はDBサーバの再起動が必要です。
この方法であればOS認証が使用できます。
ちなみにNTLM認証は12cからはサポート対象外になっているそうです。
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.NO_NTLM=FALSE
実際の対処
OS認証はやはり便利なので使いたいということで②の方法を選択しました。
sqlnet.oraを追記しDBサーバを再起動後に再度接続したところ無事に接続できました。
C:\Users\XXXXX>sqlplus / as sysdba
SQL*Plus: Release 21.0.0.0.0 - Production on X X月 X XX:XX:XX XXXX
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
に接続されました。
SQL>