TDS 8.0

S’applique à : SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

SQL Server 2022 (16.x), Azure SQL Database et Azure SQL Managed Instance prennent en charge Tabular Data Stream (TDS) 8.0.

Le protocole TDS (Tabular Data Stream) est un protocole de couche application utilisé par les clients pour se connecter à SQL Server. SQL Server utilise le protocole TLS pour chiffrer des données transmises sur un réseau entre une application cliente et une instance de SQL Server.

TDS est un protocole sécurisé, mais dans les versions précédentes de SQL Server, le chiffrement peut être désactivé. Pour répondre aux normes de chiffrement obligatoire en cas d’utilisation de SQL Server, une itération du protocole TDS a été introduite : TDS 8.0.

La liaison TLS précède désormais tous les messages TDS, encapsulant la session TDS dans TLS pour appliquer le chiffrement, ce qui aligne TDS 8.0 sur HTTPS et d’autres protocoles web. Cela contribue considérablement à faciliter la gestion du trafic TDS, car les appliances réseau standard sont désormais capable de filtrer et de passer directement les requêtes SQL de manière sécurisée.

Un autre avantage de TDS 8.0 par rapport aux versions précédentes de TDS est la meilleure compatibilité avec TLS 1.3 et les normes TLS à venir. TDS 8.0 est également entièrement compatible avec les versions TLS 1.2 et antérieures.

Fonctionnement de TDS

Le protocole TDS (Tabular Data Stream) est un protocole de niveau application utilisé pour le transfert des demandes et des réponses entre les clients et les systèmes serveurs de base de données. Dans ces systèmes, le client établit généralement une connexion longue avec le serveur. Une fois la connexion établie avec un protocole au niveau du transport, les messages TDS sont utilisés pour la communication entre le client et le serveur.

La durée de vie de la session TDS se décompose en trois phases :

  • Initialisation
  • Authentification
  • Échange de données

Le chiffrement est négocié pendant la phase initiale, mais la négociation TDS se produit sur une connexion non chiffrée. La connexion SQL Server ressemble à ceci pour les versions antérieures à TDS 8.0 :

Liaison TCP ➡️ préconnexion TDS (texte en clair) et réponse (texte en clair) ➡️ Liaison TLS ➡️ authentification (chiffrée) ➡️ échange de données (peut être chiffré ou non chiffré)

Avec l’introduction de TDS 8.0, les connexions SQL Server sont les suivantes :

Liaison TCP ➡️ négociation TLS ➡️ préconnexion TDS (chiffrée) et réponse (chiffrée) ➡️ authentification (chiffrée) ➡️ échange de données (chiffré)

Chiffrement de connexion strict

Pour utiliser TDS 8.0, SQL Server 2022 (16.x) a ajouté strict comme type de chiffrement de connexion supplémentaire aux pilotes SQL Server (Encrypt=strict). Pour utiliser le type de chiffrement de connexion strict, téléchargez la dernière version des pilotes .NET, ODBC ou OLE DB, JDBC, PHP et Python.

Pour empêcher une attaque de l’intercepteur (man-in-the-middle) avec le chiffrement de connexion strict, les utilisateurs ne peuvent pas définir l’option TrustServerCertificate sur true et approuver n’importe quel certificat fourni par le serveur. À la place, les utilisateurs utilisent l’option HostNameInCertificate pour spécifier le certificat ServerName qui doit être approuvé. Le certificat fourni par le serveur doit réussir la phase de validation.

Fonctionnalités qui ne prennent pas en charge le forçage du chiffrement strict

L’option Force Strict Encryption ajoutée avec TDS 8.0 dans la configuration du réseau SQL Server force tous les clients à utiliser strict comme type de chiffrement. Tous les clients ou fonctionnalités sans chiffrement strict des connexions seront empêchés de se connecter à SQL Server.

Les fonctionnalités ou outils suivants utilisent toujours la version précédente des pilotes qui ne prennent pas en charge TDS 8.0 et, par conséquent, peuvent ne pas fonctionner avec le chiffrement de connexion strict :

  • Groupes de disponibilité Always On
  • Instances de cluster de basculement (FCI) Always On
  • Réplication SQL Server
  • Copie des journaux de transactions
  • Utilitaire sqlcmd
  • Utilitaire bcp
  • Service de programme d’amélioration du produit SQL Server
  • SQL Server Agent
  • Messagerie de base de données
  • Serveurs liés
  • Connecteur Polybase à SQL Server

Changements supplémentaires des propriétés de chiffrement de chaîne de connexion

Les ajouts suivants concernent les chaînes de connexion pour le chiffrement :

Mot clé Default Description
Encrypt false Comportement existant
Quand la valeur est true, SQL Server utilise le chiffrement TLS pour toutes les données envoyées entre le client et le serveur, si le serveur a un certificat installé. Les valeurs reconnues sont true, false, yes et no. Pour plus d’informations, consultez Syntaxe de la chaîne de connexion.

Changement de comportement
Quand la valeur est strict, SQL Server utilise TDS 8.0 pour toutes les données envoyées entre le client et le serveur.

Quand la valeur est mandatory, true ou yes, SQL Server utilise TDS 7.x avec le chiffrement TLS/SSL pour toutes les données envoyées entre le client et le serveur, si le serveur a un certificat installé.

Quand la valeur est optional, false ou no, la connexion utilise TDS 7.x et est chiffrée uniquement si le serveur SQL le demande.
TrustServerCertificate false Comportement existant
Définissez la valeur sur true pour spécifier que le pilote ne valide pas le certificat TLS/SSL du serveur. Si la valeur est true, le certificat TLS/SSL du serveur est approuvé automatiquement quand la couche de communication est chiffrée avec TLS.

Si la valeur est false, le pilote valide le certificat TLS/SSL du serveur. Si la validation du certificat de serveur échoue, le pilote génère une erreur et ferme la connexion. La valeur par défaut est false. Vérifiez que la valeur passée à serverName correspond exactement au Common Name (CN) ou au nom DNS dans le Subject Alternate Name du certificat de serveur pour que la connexion TLS/SSL réussisse.

Changement de comportement pour le pilote ODBC Microsoft 18 pour SQL Server
Si Chiffrement est défini sur strict, ce paramètre spécifie l’emplacement du certificat à utiliser pour la validation de certificat du serveur (correspondance exacte). Le pilote prend en charge les extensions de fichier PEM, DER et CER.

Si le chiffrement est défini sur true ou false, et que la propriété TrustServerCertificate n’est pas spécifiée ou est définie sur null, true ou false, le pilote utilise la valeur de propriété ServerName sur l’URL de connexion comme nom d’hôte pour valider le certificat TLS/SSL du serveur SQL.
HostNameInCertificate null Nom d’hôte à utiliser pour valider le certificat SQL Server TLS/SSL. Si la propriété HostNameInCertificate n’est pas spécifiée ou est définie sur null, le pilote utilise la valeur de propriété ServerName comme nom d’hôte pour valider le certificat TLS/SSL du serveur SQL.