Troubleshooting
Problem
Db2 クライアントはデータベース・カタログで AUTHENTICATION オプションを明示しない場合、暗号化ライブラリーの初期化による CPU の使用や、認証タイプの交渉による追加の通信が発生し、パフォーマンスに影響を与えることがあります。
Cause
Db2 クライアントは認証オプションを明示指定しない場合、デフォルトの認証タイプとして SERVER_ENCRYPT を使用します。
Authentication considerations for remote clients
> The authentication type is not required. If it is not specified the client will try to connect using the SERVER_ENCRYPT authentication type first.
デフォルトでは無条件に暗号化を試行するため、cryptContextRealInit などによって暗号化ライブラリーの初期化が行われ、セキュリティ・メカニズムの交渉で SECMEC=SERVER_ENCRYPT (9) を指定します。ここでたとえば Db2 サーバー側の認証タイプが SERVER (デフォルト) の場合、SERVER_ENCRYPT は SECMEC_MISMATCH で拒否され、SECMEC=SERVER (3) で再認証が行われます。
デフォルトの認証設定 (クライアント:SERVER_ENCRYPT、サーバー:SERVER) における認証例は以下の通りです。
TIME DRDA_FLOW FUNCTION
------------ ------------------------------- ----------------------------------------------------------------
15.640842000 sqljrDrdaArConnect entry
15.641530000 | | | | | cryptContextRealInit entry
15.813805000 | | | | | cryptContextRealInit exit
15.813946000 | | sqljrDrdaArAuthenticate entry
15.816658000 EXCSAT/ACCSEC SECMEC(9) -> | | | sqljcSend entry
15.816701000 | | | sqljcSend exit
15.816702000 <- EXCSATRD/ACCSECRD SECMEC(3) | | | sqljcReceive entry
15.819114000 | | | sqljcReceive exit
15.819195000 | | sqljrDrdaArAuthenticate exit [rc = SQLJR_SECMEC_MISMATCH]
15.819260000 | | sqljrDrdaArAuthenticate entry
15.819386000 ACCSEC SECMEC(3)/ACCRDB -> | | | sqljcSend entry
15.819432000 | | | sqljcSend exit
15.819433000 <- ACCSECRD/ACCRDBRM | | | sqljcReceive entry
16.272792000 | | | sqljcReceive exit
16.273686000 | | sqljrDrdaArAuthenticate exit
16.274679000 sqljrDrdaArConnect exit
Environment
- すべてのバージョンおよびフィックスパックの非 Java クライアント
- Db2 11.5.9 以降の Java クライアント (Jcc 4.33 以降)
Db2 11.5.9 で変更された機能
> IBM Data Server Driver for JDBC and SQLJ securityMechanism 構成キーワードおよびプロパティーの新しいデフォルト設定
Resolving The Problem
サーバーの認証タイプが SERVER の場合、クライアントの認証タイプを明示的に SERVER (3) と設定する運用を検討してください。
例1:Data Server Client のデータベース・カタログで認証タイプを明示指定。
- Data Server Client にインスタンス・オーナーとしてログインします。
- 既存のデータベース・カタログを確認後にアンカタログし、認証タイプを明示して再カタログします。
$ db2 list db direstory Database 1 entry: Database alias = TESTDB Database name = TESTDB Node name = DB2SRV $ db2 uncatalog db TESTDB $ db2 catalog db TESTDB at node DB2SRV authentication SERVER
例2:DriverManager インターフェースを使用する JDBC アプリケーションで、securityMechanism を明示指定
- 接続 URL に securityMechanism=3 を指定します。
jdbc:db2:<host>:<port>/<db_name>:securityMechanism=3;
運用上の考慮点
- SERVER_ENCRYPT や DATA_ENCRYPT などの DRDA による暗号化は非推奨です。通信の暗号化が必要な場合は TLS を使用してください。詳細は以下のページを参照してください。
authentication - 認証タイプ構成パラメーター - TLS による通信の暗号化を行うには以下のページを参照してください。なお、TLS を使用する場合 DRDA の暗号化は使用しないでください。
[Db2] SSL によってクライアント/サーバー間の通信を暗号化する方法
関連情報
Document Location
Worldwide
[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PmmAAE","label":"Security and Plug-Ins-\u003EAuthentication"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]
Was this topic helpful?
Document Information
Modified date:
18 December 2023
UID
ibm17095459