検証を伴わない暗号化の使用
SQL Server は、常に、ログインに関連するネットワーク パケットを暗号化します。 サーバーの起動時に証明書がサーバーにプロビジョニングされていない場合、SQL Server は、ログイン パケットの暗号化に使用される自己署名証明書を生成します。
アプリケーションでは、接続文字列キーワードまたは接続プロパティを使用して、すべてのネットワーク トラフィックの暗号化を要求することもできます。 IDbInitialize::Initialize でプロバイダー文字列を使用する場合、ODBC と OLE DB のキーワードは "Encrypt" であり、IDataInitialize で初期化文字列を使用する場合は ADO と OLE DB の場合は "Use Encryption for Data" です。 これは、[プロトコル暗号化の強制] オプションを使用SQL Server 構成マネージャーによって構成することもできます。 既定では、接続のネットワーク トラフィックをすべて暗号化するには、証明書をサーバーに提供する必要があります。
接続文字列キーワードの詳細については、「SQL Server Native Clientでの接続文字列キーワードの使用」を参照してください。
証明書がサーバーにプロビジョニングされていないときに暗号化を使用できるようにするには、SQL Server 構成マネージャーを使用して、[プロトコル暗号化の強制] オプションと [信頼サーバー証明書] オプションの両方を設定できます。 このように、検証可能なサーバー証明書がプロビジョニングされていない場合、暗号化には検証を伴わない自己署名入りのサーバー証明書が使用されます。
アプリケーションでは、暗号化が行われることを保証するために "TrustServerCertificate" キーワードまたはそれに関連する接続属性も使用できます。 アプリケーションの設定によって、SQL Server クライアント構成マネージャーで設定されるセキュリティのレベルを緩和することはできません。ただし、厳密にすることはできます。 たとえば、クライアントに [Force Protocol Encryption] オプションが設定されていない場合、アプリケーションから暗号化自体を要求することができます。 サーバー証明書が提供されなかった場合でも暗号化を保証するには、アプリケーションから暗号化と "TrustServerCertificate" を要求できます。 ただし、クライアントの構成で "TrustServerCertificate" が有効になっていない場合は、サーバー証明書を提供する必要があります。 次の表ですべてのケースを説明します。
[プロトコルの暗号化を設定する] クライアント設定 | [サーバー証明書を信頼する] クライアント設定 | 接続文字列/接続属性 Encrypt/Use Encryption for Data | 接続文字列/接続属性 Trust Server Certificate | 結果 |
---|---|---|---|---|
いいえ | 該当なし | 無効 (既定値) | 無視 | 暗号化は行われません。 |
いいえ | 該当なし | はい | 無効 (既定値) | 暗号化は、検証可能なサーバー証明書が提供されている場合にのみ行われます。それ以外の場合は、接続試行が失敗します。 |
いいえ | 該当なし | はい | はい | 暗号化は常に行われますが、自己署名入りのサーバー証明書を使用することがあります。 |
はい | いいえ | 無視 | 無視 | 暗号化は、検証可能なサーバー証明書が提供されている場合にのみ行われます。それ以外の場合は、接続試行が失敗します。 |
はい | はい | 無効 (既定値) | 無視 | 暗号化は常に行われますが、自己署名入りのサーバー証明書を使用することがあります。 |
はい | はい | はい | 無効 (既定値) | 暗号化は、検証可能なサーバー証明書が提供されている場合にのみ行われます。それ以外の場合は、接続試行が失敗します。 |
はい | はい | はい | はい | 暗号化は常に行われますが、自己署名入りのサーバー証明書を使用することがあります。 |
SQL Server Native Client OLE DB プロバイダー
SQL Server Native Client OLE DB プロバイダーは、DBPROPSET_SQLSERVERDBINIT プロパティ セットに実装されている SSPROP_INIT_TRUST_SERVER_CERTIFICATE データ ソース初期化プロパティを追加して、検証なしで暗号化をサポートします。 また、新しい接続文字列のキーワードとして "TrustServerCertificate" が追加されました。 "TrustServerCertificate" は、yes または no を値として受け取ります。既定値は no です。 サービス コンポーネントを使用しているときは、"TrustServerCertificate" は true または false を値として受け取ります。既定値は false です。
DBPROPSET_SQLSERVERDBINIT プロパティ セットに行われた機能強化の詳細については、「初期化プロパティと承認プロパティ」を参照してください。
SQL Server Native Client ODBC ドライバー
SQL Server Native Client ODBC ドライバーでは、SQLSetConnectAttr 関数と SQLGetConnectAttr 関数を追加して検証せずに暗号化をサポートしています。 SQL_TRUST_SERVER_CERTIFICATE_YES または SQL_TRUST_SERVER_CERTIFICATE_NO を受け取る、SQL_COPT_SS_TRUST_SERVER_CERTIFICATE が追加されました。既定値は SQL_TRUST_SERVER_CERTIFICATE_NO です。 また、新しい接続文字列のキーワードとして "TrustServerCertificate" が追加されました。 "TrustServerCertificate" は、"yes" または "no" を値として受け取ります。既定値は "no" です。