次の方法で共有


TDS 8.0

適用対象: SQL Server 2022 (16.x) 以降のバージョン Azure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric の SQL Database

SQL Server 2022 (16.x)、Azure SQL Database、および Azure SQL Managed Instance では、表形式データ ストリーム (TDS) 8.0 がサポートされています。

表形式データ ストリーム (TDS) プロトコルは、クライアントが SQL Server に接続するために使用するアプリケーション レイヤー プロトコルです。 SQL Server では、トランスポート層セキュリティ (TLS) を使用して、SQL Server インスタンスとクライアント アプリケーション間のネットワークで送信されるデータを暗号化します。

TDS はセキュリティで保護されたプロトコルですが、以前のバージョンの SQL Server では、暗号化をオフにするか、無効にすることができます。 SQL Server を使用している間に必須となる暗号化の標準を満たすために、TDS プロトコルのイテレーション TDS 8.0 が導入されました。

TLS ハンドシェイクは、TDS メッセージの前に置き、TDS セッションを TLS でラップして暗号化を適用し、TDS 8.0 を HTTPS やその他の Web プロトコルに合わせます。 この機能強化は、標準のネットワーク アプライアンスで SQL クエリをフィルター処理し、安全にパススルーできるようになったので、TDS トラフィック管理の容易性に大きく貢献します。

TDS 8.0 の利点は、以前の TDS バージョンと比較して、TLS 1.3 との互換性と、将来の TLS 標準です。 TDS 8.0 は、TLS 1.2 とそれ以前の TLS バージョンとも完全に互換性があります。

TDS のしくみ

表形式データ ストリーム (TDS) プロトコルは、クライアントとデータベース サーバー システム間の要求と応答の転送に使用されるアプリケーション レベルのプロトコルです。 通常、クライアント システムは、サーバーとの有効期間が長い接続を確立します。 トランスポート レベルのプロトコルを使用して接続が確立されると、TDS メッセージはクライアントと SQL Server の間で通信するために交換されます。

TDS セッションの有効期間には、次の 3 つのフェーズがあります:

  • 初期化
  • 認証
  • データ交換

暗号化は初期フェーズ中にネゴシエートされますが、TDS ネゴシエーションは暗号化されていない接続を介して行われます。 TDS 8.0 以前のバージョンへの SQL Server 接続は次のようになります。

TCP ハンドシェイク ➡️ TDS ログイン前 (クリアテキスト) と応答 (クリアテキスト) ➡️ TLS ハンドシェイク ➡️ 認証 (暗号化) ➡️ データ交換 (暗号化されている場合も暗号化されていない場合もあります)

TDS 8.0 の導入により、SQL Server 接続は次のようになります:

TCP ハンドシェイク ➡️ TLS ハンドシェイク ➡️ TDS ログイン前 (暗号化) と応答 (暗号化) ➡️ 認証 (暗号化) ➡️ データ交換 (暗号化)

TDS、TLS、OS、暗号化オプションの互換性マトリックス

TLS 1.2 と TLS 1.3 の両方のバージョンを OS レベルで有効にできます。これにより、SQL Server へのクライアント接続で複数の TDS プロトコル バージョン (TDS 7.x と 8.0) を使用できます。 OS のバージョンによっては、TLS 1.2 と TLS 1.3 が既定で有効になっている場合があります。

TDS 7.x のみが暗号化されていない (省略可能な) 通信をサポートします。TDS 8.0 ではこれをサポートしていません。 TDS 7.x では、バージョン 1.2 までの TLS を使用した暗号化がサポートされています。 TDS 8.0 には暗号化が必要です。すべてが常に TDS 8.0 (Encrypt=Strict) で暗号化されます。 TDS 8.0 には TLS バージョンの最小要件がなく、TLS 1.3 がサポートされています。 TLS 1.3 のサポートは、オペレーティング システムのバージョンによって異なります。 次の表は、暗号化オプションと、対応する TLS と TDS のバージョンを含むさまざまなシナリオをまとめたものです。

Encrypt
オプション
TLS バージョンが有効 OS バージョン 期待
接続
結果
注記
TLS 1.3 のみ (またはそれ以降) ウィンドウズ11

Windows Server 2022 以降
Success TLS 1.3 がネゴシエートされました。TDS 8.0 がトリガーされました (Encrypt=Strict)
TLS 1.2 と TLS 1.3 ウィンドウズ11

Windows Server 2022 以降
Success TLS 1.3 がネゴシエートされました。TDS 8.0 がトリガーされました (Encrypt=Strict)
TLS 1.2 のみ (またはそれ以前) ウィンドウズ11

Windows Server 2022 以降
Success TLS 1.2 がネゴシエートされました。TDS 8.0 がトリガーされました (Encrypt=Strict)
TLS 1.2 のみ (またはそれ以前) ウィンドウズ10

Windows Server 2019 / 2016
Success TLS 1.2 がネゴシエートされました。TDS 8.0 がトリガーされました (TLS 1.3 は使用できません)
Mandatory TLS 1.3 のみ (またはそれ以降) ウィンドウズ11

Windows Server 2022 以降
Failure Encrypt=Mandatory は TDS 8.0 の TLS 1.3 と互換性がありません
Mandatory TLS 1.2 と TLS 1.3 ウィンドウズ11

Windows Server 2022 以降
Success TLS 1.2 がネゴシエートされました。TDS 8.0 がトリガーされない (Encrypt=Mandatory)
Mandatory TLS 1.2 のみ (またはそれ以前) ウィンドウズ11

Windows Server 2022 以降
Success TLS 1.2 がネゴシエートされました。TDS 8.0 がトリガーされない (Encrypt=Mandatory)
Mandatory TLS 1.2 のみ (またはそれ以前) ウィンドウズ10

Windows Server 2019 / 2016
Success TLS 1.2 がネゴシエートされました。この OS では TDS 8.0 はサポートされていません (TDS 7.x を使用)
オプション TLS 1.3 のみ (またはそれ以降) ウィンドウズ11

Windows Server 2022 以降
Failure Encrypt=Optional (false) は TDS 7.x であり、TLS 1.3 と互換性がありません。
オプション TLS 1.2 と TLS 1.3 ウィンドウズ11

Windows Server 2022 以降
Success TLS 1.3 がネゴシエートされました。TDS 8.0 がトリガーされない (Encrypt=Optional)
オプション TLS 1.2 のみ (またはそれ以前) ウィンドウズ11

Windows Server 2022 以降
Success TLS 1.2 がネゴシエートされました。TDS 8.0 がトリガーされない (Encrypt=Optional)
オプション TLS 1.2 のみ (またはそれ以前) ウィンドウズ10

Windows Server 2019 / 2016
Success TLS 1.2 がネゴシエートされました。暗号化は任意です。接続はできます。
暗号化なしで成功する
[任意] TLS 1.3 のみ (またはそれ以降) ウィンドウズ10

Windows Server 2019 / 2016
Failure TLS 1.3 は、この OS ではサポートされていません

クライアントが異なる TDS バージョンを使用する方法の詳細については、「 接続文字列暗号化プロパティの変更 」セクションのキーワードの使用法を参照してください。

SQL Server 2025 のサポート

SQL Server 2025 (17.x) では、次のコマンド ライン ツールと SQL Server 機能に TDS 8.0 のサポートが導入されています。

1TDS 8.0 のサポートでは、これらの機能 に破壊的変更 が導入されています。

厳密な接続暗号化

TDS 8.0 を使用するために、SQL Server 2022 (16.x) は、SQL Server ドライバー (strict) への追加の接続暗号化オプションとしてEncrypt=strictを追加しました。 strict接続暗号化の種類を使用するには、最新バージョンの .NET、ODBC、OLE DB、JDBC、PHP、Python ドライバーをダウンロードします。

ユーザーは、 strict 接続暗号化による中間者攻撃を防ぐために、 TrustServerCertificate オプションを true し、サーバーが提供する証明書を許可することはできません。 代わりに、HostNameInCertificate オプションを使用して信頼する必要がある証明書 ServerName を指定します。 サーバーによって提供される証明書は、証明書の検証に合格する必要があります。 証明書の検証の詳細については、「SQL Server の証明書の要件」を参照してください。

接続文字列の暗号化プロパティに対するその他の変更

通信を暗号化するために、接続文字列に次のオプションが追加されます。

キーワード 既定値 説明
Encrypt 以前の接続文字列オプション

有効なオプションは次のとおりです。
- true又は yes
- false、または no
詳細については、「接続文字列の構文」を参照してください。 trueすると、SQL Server は、サーバーに証明書がインストールされている場合に、クライアントとサーバーの間で交換されるすべてのデータに TLS 1.2 暗号化を使用します。

最新の接続文字列オプション

有効なオプションは次のとおりです。
- strict
- mandatory、または true、または yes
- optional、または false、または no

strictに設定すると、SQL Server は、クライアントとサーバー間で交換されるすべてのデータに TDS 8.0 を使用します。

mandatorytrue、または yes に設定すると、SQL Server に証明書がインストールされている場合に、クライアントとサーバー間で送信されるすべてのデータに TLS/SSL 暗号化による TDS 7.x を使用します。

optionalfalse、または no に設定すると、接続で TDS 7.x が使用され、SQL Server で必要な場合にのみ暗号化されます。
TrustServerCertificate 以前の接続文字列オプション

trueに設定すると (推奨されません)、ドライバーはサーバー TLS/SSL 証明書を検証しません。 true場合、通信層が TLS を使用して暗号化されている場合、サーバーの TLS/SSL 証明書は自動的に信頼されます (検証をバイパスします)。

false の場合、ドライバーによってサーバーの TLS/SSL 証明書が検証されます。 サーバー証明書の検証が失敗した場合は、ドライバーでエラーが発生して接続が終了します。 既定値は false です。 TLS/SSL 接続が成功するには、serverName に渡される値が、サーバー証明書に含まれる Common Name (CN)Subject Alternate Name または DNS 名と厳密に一致している必要があります。

Microsoft SQL Server ODBC Driver 18 以降の動作の変更

Encryptstrict に設定されている場合、この設定では、サーバー証明書の検証に使用する証明書の場所 (完全一致) を指定します。 ドライバーは PEM、DER、CER のファイル拡張子がサポートされます。

Encrypttrue または false に設定されていて、TrustServerCertificate プロパティが指定されていないか、nulltrue、またはfalseに設定されている場合、ドライバーは接続 URL の ServerName プロパティ値をホスト名として使用して、SQL Server TLS/SSL 証明書を検証します。
HostNameInCertificate null SQL Server TLS/SSL 証明書の検証に使われるホスト名。 HostNameInCertificate プロパティが指定されていないか、nullに設定されている場合、ドライバーはホスト名として ServerName プロパティの値を使用して、SQL Server TLS/SSL 証明書を検証します。