TDS 8.0
適用対象: SQL Server 2022 (16.x) Azure SQL データベース Azure SQL Managed Instance
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 トラフィックの管理のしやすさが大きく改善します。
TDS8.0が以前のTDSバージョンと比較したもう一つのベネフィットは、TLS1.3や今後登場するTLS Standardとの互換性である。 TDS 8.0 は、TLS 1.2 とそれ以前の TLS バージョンとも完全に互換性があります。
TDS のしくみ
表形式データ ストリーム (TDS) プロトコルは、クライアントとデータベース サーバー システム間の要求と応答の転送に使用されるアプリケーション レベルのプロトコルです。 このようなシステムでは、通常、クライアントはサーバーと有効期間が長い接続を確立します。 トランスポート レベルのプロトコルを使用して接続が確立されると、TDS メッセージがクライアントとサーバー間の通信に使用されます。
TDS セッションの有効期間には、次の 3 つのフェーズがあります:
- 初期化
- 認証
- データ交換
暗号化は初期フェーズ中にネゴシエートされますが、TDS ネゴシエーションは暗号化されていない接続を介して行われます。 TDS 8.0 以前のバージョンへの SQL Server 接続は次のようになります。
TCP ハンドシェイク ➡️ TDS ログイン前 (クリアテキスト) と応答 (クリアテキスト) ➡️ TLS ハンドシェイク ➡️ 認証 (暗号化) ➡️ データ交換 (暗号化されている場合も暗号化されていない場合もあります)
TDS 8.0 の導入により、SQL Server 接続は次のようになります:
TCP ハンドシェイク ➡️ TLS ハンドシェイク ➡️ TDS ログイン前 (暗号化) と応答 (暗号化) ➡️ 認証 (暗号化) ➡️ データ交換 (暗号化)
厳密な接続暗号化
TDS 8.0 を活用するために、SQL Server 2022 (16.x) では strict
を SQL Server ドライバー (Encrypt=strict
) への新しい接続暗号化の種類として追加しました。 strict
接続暗号化タイプを使用するために、.NET、ODBC、OLE DB、JDBC、PHP、Python ドライバーの最新バージョンをダウンロードしてください。
- Microsoft ADO.NET for SQL ServerおよびAzure SQL Databaseバージョン5.1以上
- SQL Server 用 ODBC ドライバー バージョン 18.1.2.1 以上
- OLE DB Driver for SQL Server バージョン 19.2.0 以上
- SQL Server 用 Microsoft JDBC ドライバー バージョン 11.2.0 以上
- PHP 用 Microsoft ドライバと SQL Server バージョン 5.10 以上
- Python SQL ドライバー - pyodbc
strict
の接続暗号化による中間者攻撃を防ぐため、ユーザーは TrustServerCertificate
オプションを true
に設定して、サーバーが提供する証明書を信頼することは許可されていません。 代わりに、HostNameInCertificate
オプションを使用して信頼する必要がある証明書 ServerName
を指定します。 サーバーによって提供される証明書は、証明書の検証に合格する必要があります。
厳密な暗号化の強制をサポートしない機能
SQL Server ネットワーク構成に TDS 8.0 で追加された Force Strict Encryption
オプションは、すべてのクライアントが暗号化の種類として strict
を使用するように強制します。 strict
接続暗号化を使用しないクライアントおよび機能は、SQL Server に接続できません。
以下は、TDS 8.0 をサポートしておらず、以前のバージョンのドライバーを引き続き使用する機能またはツールの一覧です。strict
接続暗号化では機能しない可能性があります。
- Always On 可用性グループ
- Always On フェールオーバー クラスター インスタンス (FCI)
- SQL Server のレプリケーション
- ログ配布
- sqlcmd ユーティリティ
- bcp ユーティリティ
- SQL Server の CEIP サービス
- SQL Server エージェント
- データベース メール
- リンク サーバー
- SQL Server への Polybase コネクタ
接続文字列の暗号化プロパティに対するその他の変更
接続文字列の暗号化のために次が追加されています:
Keyword | 既定値 | 説明 |
---|---|---|
Encrypt | false | 既存の動作true の場合、SQL Server は、サーバーに証明書がインストールされている場合、クライアントとサーバー間で送信されるすべてのデータに TLS 暗号化を使用します。 認識される値は true 、false 、yes および no です。 詳細については、「接続文字列の構文」を参照してください。動作の変更 strict に設定すると、SQL Server は、クライアントとサーバーの間で送信されるすべてのデータに TDS 8.0 を使用します。mandatory 、true 、または yes に設定すると、SQL Server に証明書がインストールされている場合に、クライアントとサーバー間で送信されるすべてのデータに TLS/SSL 暗号化による TDS 7.x を使用します。optional 、false 、または no に設定すると、接続で TDS 7.x が使用され、SQL Server で必要な場合にのみ暗号化されます。 |
TrustServerCertificate | false | 既存の動作 ドライバーによってサーバーの TLS/SSL 証明書が検証されないようにするには、 true に設定します。 true の場合、通信レイヤーが TLS で暗号化されていると、サーバーの TLS/SSL 証明書は自動的に信頼されます。false の場合、ドライバーによってサーバーの TLS/SSL 証明書が検証されます。 サーバー証明書の検証が失敗した場合は、ドライバーでエラーが発生して接続が終了します。 既定値は false です。 TLS/SSL 接続が成功するには、serverName に渡される値が、サーバー証明書に含まれる Subject Alternate Name の Common Name (CN) または DNS 名と厳密に一致している必要があります。Microsoft ODBC ドライバー 18 for SQL Serverの動作変更について [暗号化]が strict に設定されている場合、この設定により、サーバー証明書の検証に使用する証明書の場所が指定されます (完全一致)。 ドライバーは PEM、DER、CER のファイル拡張子がサポートされます。[暗号化] が true または false に設定され、TrustServerCertificate プロパティが指定されていないか、または null 、true 、または false に設定されている場合、ドライバーは接続 URL の ServerName のプロパティ値をホスト名として使用して、SQL Server の TLS/SSL 証明書を検証します。 |
HostNameInCertificate | [Null] | SQL Server TLS/SSL 証明書の検証に使われるホスト名。 HostNameInCertificate プロパティが指定されていないか、null に設定されている場合、ドライバーはServerName のプロパティ値をホスト名として使用して、SQL Server の TLS/SSL 証明書を検証します。 |