Database Support Blog

Database Support Blog>【Oracle Database Cloud】10gR2以下のJDBC接続でORA-12650が発生する原因と対処

  • Oracle Database
2018.07.12

【Oracle Database Cloud】10gR2以下のJDBC接続でORA-12650が発生する原因と対処

【Oracle Database Cloud】10gR2以下のJDBC接続でORA-12650が発生する原因と対処

Oracle Databae Cloud Servce(DBCS)で作成されたデータベースはデフォルトで通信暗号化が設定されています。

オンプレミス環境からDBCSへの移行後、この設定に起因してJDBCによるOracle Databaseへの接続でORA-12650エラーが発生するというお問い合わせをいただくことがありますので、原因と対処方法を紹介します。

DBCSではsqlnet.oraに通信暗号化が設定される

DBCSでデータベースを作成した際、作成したデータベースのバージョンに関わらずsqlnet.oraには次のパラメータが設定されます。

 
 --$ORACLE_HOME/network/admin/sqlnet.ora
 SQLNET.ENCRYPTION_SERVER = required
 SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA1)
 SQLNET.CRYPTO_CHECKSUM_SERVER = required
 SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192, AES128)
 

クライアント側のSQLNET.ENCRYPTION_CLIENTのデフォルトは accepted(サーバ側で暗号化が有効なら暗号化通信する)ですので、 SQLNET.ENCRYPTION_SERVER=required のため暗号化が有効になります。

SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER では使用する暗号化アルゴリズムを指定します。デフォルトは利用可能なすべてのアルゴリズムですが、明示的に暗号化強度が高いアルゴリズムのみが指定されていることがわかります。

クライアント側が10gR2以下のJDBCを利用している環境ではサーバ側で定義されたアルゴリズム(AES256, AES192, AES128, SHA1)に対応しておらず、DBCSのデータベースに接続するとORA-12650エラーになります。

・Oracle Database JDBC開発者ガイドおよびリファレンス 10g リリース2(10.2)
 JDBC THINドライバによるデータ暗号化と整合性のサポート
 http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/clntsec.htm#i1022564

対処策1:JDBCを11gR1以降にバージョンアップ

クライアント側のJDBCを暗号化アルゴリズム(AES256, AES192, AES128, SHA1)に対応している11gR1以降にバージョンアップすることでエラーを回避できます。なお、JDBCのバージョンに応じてサポートしているJDKのバージョンも異なりますので以下を参考にご対応ください。

・Oracle Technology Network
 Oracle JDBC FAQ
 What are the Oracle JDBC releases versus JDK versions?
 http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#01_03_1

・My Oracle Support
 Oracle JDBC Driver スタート・ガイド - インストール、動作保証、その他 (ドキュメントID 1999901.1)
 どのJDBC driverがどのJDKバージョンに対応しているか教えてください。
 https://support.oracle.com/epmos/faces/DocumentDisplay?id=1999901.1

対処策2:sqlnet.oraから対象パラメータをコメントアウトする

サーバ(DBCS)側のsqlnet.oraよりエラーの原因となっているSQLNET.ENCRYPTION_TYPES_SERVER/SQLNET.CRYPTO_CHECKSUM_TYPES_SERVERをコメントアウトします。

 
 --$ORACLE_HOME/network/admin/sqlnet.ora
 SQLNET.ENCRYPTION_SERVER = required
 #SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA1)
 SQLNET.CRYPTO_CHECKSUM_SERVER = required
 #SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192, AES128)
 

SQLNET.ENCRYPTION_SERVER SQLNET.CRYPTO_CHECKSUM_SERVER は有効ですので暗号化は行われます。ただし、10gR2が使用できる範囲のアルゴリズムが用いられるため暗号化強度が低くなる点には注意が必要です。

まとめ

以前に SEC_CASE_SENSITIVE_LOGONとSQLNET.ALLOWED_LOGON_VERSION_SERVERに起因した接続エラー を紹介しましたが、Oracle Databaseはバージョンが上がるごとにセキュリティに関わる設定も強化されています。

移行後に接続ができない問題が発生した場合には初期化パラメータやsqlnet.oraを見直し、追加されている/デフォルト値が変更されているパラメータがないかを調べることで早期解決につながるかもしれません。

なお、2018年7月9日現在、DBCSで選択できるバージョンは11gR2、12cR1、12cR2、18cですが10.2.0クライアントからの接続が動作保証されてるのは 11.2のみです。

今回ご紹介した対処策でJDBCのバージョンアップを選択される場合、JDBCとJDK間のバージョンの互換性だけでなくOracle Databaseとの接続互換も意識する必要がありますので、こちらもご注意ください。

・Oracle Japan
 Oracle Client / Server Interoperability Support
 https://www.oracle.com/jp/system-requirement/interoperability-support-195844-ja.html

・My Oracle Support
 クライアント / サーバー 異なるバージョン間の互換性サポート・マトリクス(ドキュメントID 2127402.1)
 https://support.oracle.com/epmos/faces/DocumentDisplay?id=2127402.1

筆者情報

大野 高志

サービス事業部 付加価値創造部
カスタマーエンゲージメント・プランナー

2007年アシスト入社。Oracle Databaseのサポート業務を経て、現在は「 アシストの超サポ 」を広め、カスタマーエンゲージメントの構築を実現するための活動を行っている。でも、Oracleは好きなのでできる限りブログは続ける。


データベースのサポートならアシスト

関連している記事

  • Oracle Database
2018.09.11

【Oracle Database】実行計画の固定化方法まとめ

実行計画を固定する方法を4つご紹介します。Oracle Database 18cからStandard Editionでも実行計画固定のためにSQL Plan Management(SPM)の一部機能が利用できるようになりました。

  • Oracle Database
2018.08.08

【Oracle Database】18cで追加された手軽に使える便利な新機能3つ

Oracle Database 18c で追加された手軽に使える便利な新機能を3つご紹介します。

  • Oracle Database
2018.07.31

【Oracle Database】18c新機能:統合監査のData Pump EXPORT/IMPORT

Oracle Database 18cでは統合監査の情報をData Pumpを使ってEXPORT/IMPORTできるようになっています。注意事項と併せてご紹介します。

アシストサポートセンターのご紹介

ページの先頭へ戻る