OLE DB での暗号化と証明書の検証

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

OLE DB ドライバーのダウンロード

SQL Server は、常に、ログインに関連するネットワーク パケットを暗号化します。 サーバーの起動時にそれに証明書がプロビジョニングされていない場合は、ログイン パケットの暗号化に使用される自己署名入りの証明書が SQL Server によって生成されます。

自己署名証明書では、セキュリティは保証されません。 暗号化されたハンドシェイクは、NT LAN Manager (NTLM) に基づいています。 セキュリティで保護された接続を実現するには、SQL Server 上に検証可能な証明書をプロビジョニングすることを強くお勧めします。 トランスポート層セキュリティ (TLS) は、証明書の検証によってのみセキュリティで保護することができます。

アプリケーションでは、接続文字列キーワードまたは接続プロパティを使用して、すべてのネットワーク トラフィックの暗号化を要求することもできます。 OLE DB で IDbInitialize::Initialize にプロバイダー文字列を使用する場合、キーワードは "Encrypt" です。また、ADO と OLE DB で IDataInitialize に初期化文字列を使用する場合、キーワードは "Use Encryption for Data" です。 暗号化は、[プロトコルの暗号化を設定する] オプションを使用して、レジストリ内のクライアント マシンで構成することもできます。 詳細については、レジストリの設定に関する記事を参照してください。 既定では、接続のネットワーク トラフィックをすべて暗号化するには、証明書をサーバーにプロビジョニングする必要があります。 クライアントがサーバー上の証明書を信頼するように設定すると、中間者攻撃に対して脆弱になる可能性があります。 検証可能な証明書をサーバーに展開する場合は、証明書の信頼に関するクライアント設定を確実に FALSE に変更してください。

接続文字列キーワードについて詳しくは、「OLE DB Driver for SQL Server での接続文字列キーワードの使用」をご覧ください。

証明書がサーバーでプロビジョニングされていないときに暗号化の使用を有効にするには、Force Protocol EncryptionTrust Server Certificate のクライアント レジストリ設定を設定できます。 この場合、検証可能な証明書がサーバーに提供されなかった場合、暗号化には検証を伴わない自己署名入りのサーバー証明書を使用します。

暗号化と証明書の検証の動作

アプリケーションの設定によって、レジストリ内で設定されているセキュリティのレベルを上げることはできても、下げることはできません。 詳細については、レジストリの設定に関する記事を参照してください。 たとえば、クライアントに [Force Protocol Encryption] が設定されていない場合、アプリケーションから暗号化自体を要求することができます。 サーバー証明書がプロビジョニングされていない場合でも暗号化が行われるように、アプリケーションで暗号化を要求して TrustServerCertificate を有効にすることができます。 ただし、クライアントの構成内で TrustServerCertificate が有効になっていない場合は、プロビジョニングされたサーバー証明書が引き続き必要です。

OLE DB Driver for SQL Server のバージョン 19 では、暗号化関連の API で破壊的変更が行われています。 詳しくは、「暗号化のプロパティの変更」をご覧ください。

メジャー バージョン 19

次の表では、暗号化設定の評価について説明します。

[プロトコルの暗号化を設定する] クライアント設定 接続文字列/接続属性 Encrypt/Use Encryption for Data 結果の暗号化
0 No/Optional オプション
0 Yes/Mandatory (既定値) Mandatory
0
1 No/Optional Mandatory
1 Yes/Mandatory (既定値) Mandatory
1
2 無視

次の表では、結果の暗号化と検証について説明します。

暗号化 [サーバー証明書を信頼する] クライアント設定 接続文字列/接続属性 Trust Server Certificate 結果
オプション 該当なし 該当なし 暗号化は、LOGIN パケットに対してのみ行われます。
Mandatory 0 無視 暗号化が行われるのは、検証可能なサーバー証明書が存在する場合のみです。それ以外の場合、接続試行は失敗します。
Mandatory 1 無効 (既定値) 暗号化が行われるのは、検証可能なサーバー証明書が存在する場合のみです。それ以外の場合、接続試行は失敗します。
Mandatory 1 はい 暗号化は常に行われますが、自己署名入りのサーバー証明書を使用することがあります。
該当なし 該当なし 暗号化が行われるのは、検証可能なサーバー証明書が存在する場合のみです。それ以外の場合、接続試行は失敗します。

注意事項

上の表では、さまざまな構成でのシステムの動作についてのみ説明しています。 接続をセキュリティ保護するには、クライアントとサーバーの両方で暗号化が要求されていることを確認します (サーバー側の構成については、「SQL Server で暗号化設定を構成する」を参照)。 また、確実にサーバーに検証可能な証明書を用意し、クライアント上の TrustServerCertificate 設定を FALSE に設定します。

注意

OLE DB ドライバーのバージョン 19.2 以降では、TLS 1.3 を使うように TDS 8.0 接続を構成できます。 詳細については、TLS 1.3 サポートに関する記事を参照してください。

メジャー バージョン 18 と新しい認証方法

バージョン 18.x.x では、セキュリティを強化するため、新しい接続文字列キーワード Authentication または Access Token (またはそれに対応するプロパティ) が使われている場合、ドライバーは既定の暗号化の値を yes に設定することによってオーバーライドします。 オーバーライドが行われるのは、データ ソース オブジェクトの初期化時です。 初期化の前に何らかの方法で暗号化が設定されると、値は保持され、オーバーライドされません。

Note

ADO アプリケーション、および IDataInitialize::GetDataSource を介して IDBInitialize インターフェイスを取得するアプリケーションでは、このインターフェイスを実装するコア コンポーネントによって、暗号化が既定値の no に明示的に設定されます。 その結果、新しい認証プロパティ/キーワードではこの設定が保持され、暗号化の値はオーバーライドされません。 そのため、これらのアプリケーションで Use Encryption for Data=true を明示的に設定し、既定値をオーバーライドすることをお勧めします

セキュリティを強化するため、新しい認証方法では、クライアントの暗号化設定に関係なくTrustServerCertificate の設定 (およびそれに対応する接続文字列キーワードとプロパティ) が適用されます。 その結果、既定でサーバー証明書が検証されます。 ドライバーにより、次のようにサーバー証明書を検証するかどうかが決定されます。

[サーバー証明書を信頼する] クライアント設定 接続文字列/接続属性 Trust Server Certificate 証明書の検証
0 無効 (既定値) はい
0 はい 有効
1 無効 (既定値) はい
1 はい いいえ

次の表では、暗号化設定の評価について説明します。

[プロトコルの暗号化を設定する] クライアント設定 接続文字列/接続属性 Encrypt/Use Encryption for Data 結果の暗号化
0 無効 (既定値) いいえ
12 はい 有効
1 無効 (既定値) はい
1 はい はい

次の表では、結果の暗号化と検証について説明します。

結果の暗号化 証明書の検証 結果
いいえ いいえ 暗号化は、LOGIN パケットに対してのみ行われます。
いいえ はい LOGIN パケットの暗号化が行われるのは、検証可能なサーバー証明書が存在する場合のみです。それ以外の場合、接続試行は失敗します。
はい いいえ すべてのネットワーク トラフィックの暗号化が常に行われますが、自己署名入りのサーバー証明書を使用することがあります。
はい はい すべてのネットワーク トラフィックの暗号化は、検証可能なサーバー証明書が存在する場合のみ行われます。それ以外の場合、接続試行は失敗します。

メジャー バージョン 18 と従来の認証方法

次の表では、従来の認証方法についての暗号化と検証の結果について説明します。

[プロトコルの暗号化を設定する] クライアント設定 [サーバー証明書を信頼する] クライアント設定 接続文字列/接続属性 Encrypt/Use Encryption for Data 接続文字列/接続属性 Trust Server Certificate 結果
0 該当なし 無効 (既定値) 該当なし 暗号化は、LOGIN パケットに対してのみ行われます。
0 該当なし はい 無効 (既定値) すべてのネットワーク トラフィックの暗号化は、検証可能なサーバー証明書が存在する場合のみ行われます。それ以外の場合、接続試行は失敗します。
0 該当なし はい はい すべてのネットワーク トラフィックの暗号化が常に行われますが、自己署名入りのサーバー証明書を使用することがあります。
1 0 無視 無視 すべてのネットワーク トラフィックの暗号化は、検証可能なサーバー証明書が存在する場合のみ行われます。それ以外の場合、接続試行は失敗します。
1 1 無効 (既定値) 該当なし すべてのネットワーク トラフィックの暗号化が常に行われますが、自己署名入りのサーバー証明書を使用することがあります。
1 1 はい 無効 (既定値) すべてのネットワーク トラフィックの暗号化は、検証可能なサーバー証明書が存在する場合のみ行われます。それ以外の場合、接続試行は失敗します。
1 1 はい はい すべてのネットワーク トラフィックの暗号化が常に行われますが、自己署名入りのサーバー証明書を使用することがあります。

関連項目

OLE DB Driver for SQL Server の機能
初期化プロパティと承認プロパティ
接続文字列キーワード
メジャー バージョンの違い
レジストリの設定