Différences majeures de version du pilote Microsoft ODBC pour SQL Server

Cet article décrit les changements marquants entre le pilote ODBC 18 de Microsoft pour SQL Server et la version 17. Utilisez-le lorsque vous choisissez une version de pilote, que vous mettez à jour une application de la version 17 à la version 18, ou que vous devez faire fonctionner une chaîne de connexion de façon cohérente sur les deux versions.

La plupart des applications qui passent de la version 17 à la version 18 sont affectées par un seul changement : les connexions sont chiffrées par défaut. Si votre application cesse de se connecter après la mise à jour, lisez d’abord « Comportement de chiffrement par défaut ».

Choisissez la version 17 ou la version 18

Le pilote 18 est la version majeure actuelle. Le pilote 17 reste pris en charge, mais les applications qui l’utilisent ont toujours besoin de la dernière version mineure de la gamme Driver 17 pour recevoir des correctifs. Pour les dates de support et les règles de maintenance, voir Cycle de vie du support.

Scenario Chemin recommandé
Nouvelle application Commencez par le Driver 18. Configurez le chiffrement et la validation des certificats avant la production.
Application existante du Driver 17 Installez le pilote 18 en même temps que le pilote 17, changez le nom du pilote dans la chaîne de connexion ou le DSN, et définissez Encrypt explicitement. Si la validation du certificat échoue, corrigez le certificat serveur ou le magasin de confiance du client.
Application qui nécessite Encrypt=Strict, HostnameInCertificate, RetryExec, ou un autre mot-clé Driver 18 Utilisez une version Driver 18 qui prend en charge ce paramètre. Le pilote 17 n’accepte pas la Strict valeur de Encrypt et ne reconnaît pas les nouveaux mots-clés.
Application nécessitant l’épinglage du fichier de certificat avec ServerCertificate Utilisez le pilote 18.1 ou une version ultérieure avec Encrypt=Strict. Le pilote 17 ne prend pas en charge ce réglage.

Changer de version majeure signifie généralement changer le nom du pilote ou le package que vous sélectionnez :

Platform Pilote 17 Pilote 18
Nom du pilote de chaîne de connexion ODBC Driver 17 for SQL Server ODBC Driver 18 for SQL Server
Nom du paquet Linux msodbcsql17 msodbcsql18

Récapitulatif des modifications

Les lignes par défaut et de validation décrivent des connexions distantes ordinaires sans réglage DSNEncrypt, l’attribut SQL_COPT_SS_ENCRYPT ou la dérogation du Chiffrement du protocole Windows Force Protocol. LocalDB n’est pas une cible TLS distante.

Area Version 17 Version 18 et versions ultérieures
Réglage par défaut Encrypt no, sauf si Authentication est défini à une valeur autre que none ou l’application définit SQL_COPT_SS_ACCESS_TOKEN; alors yes yes (18.0.1 et ultérieurs)
Encrypt Valeurs acceptées yes, no yes, no, Mandatory, Optional, Strict
Modes de chiffrement De temps en temps Éteint, allumé ou strict
Validation de certificat de serveur Avec Encrypt=yes;TrustServerCertificate=no, valide le certificat. Le chiffrement requis par le serveur seul ne sélectionne pas la validation. Valide par défaut. En modes non stricts, on TrustServerCertificate=yes saute la validation normale, y compris lorsque le serveur nécessite un chiffrement.
Mots-clés de chaîne de connexion Ensemble de base Ensemble de base plus nouveaux mots-clés

Modifications du chiffrement

Comportement de chiffrement par défaut

Le pilote 17 est par défaut Encrypt=no à moins que le Authentication mot-clé ne soit défini à une valeur autre que none ou que l’application ne définisse l’attribut SQL_COPT_SS_ACCESS_TOKEN . L’un ou l’autre change la valeur par défaut en yes. Un déclic explicite Encrypt=no désactive le chiffrement. Le pilote 18.0.1 et les versions ultérieures sont par défaut sur Encrypt=yes. Définissez-le Encrypt explicitement lors de la comparaison des versions.

Le chiffrement de la connexion complète protège le texte de requête et les résultats ainsi que la connexion. Avec , le serveur peut toujours nécessiter un Encrypt=nochiffrement de connexion complète. Lorsque le client et le serveur désactivent le chiffrement, la négociation non stricte utilise un chiffrement uniquement de connexion ; cela ne protège pas les données d’application ultérieures.

Avec , les deux pilotes sélectionnent Encrypt=yes;TrustServerCertificate=nola validation normale des certificats serveur. Si seul le serveur nécessite un chiffrement de la connexion complète et TrustServerCertificate=no (par défaut), le pilote 18 valide le certificat. Avec TrustServerCertificate=yes le mode Strict hors champ, le Driver 18 saute cette validation. Le pilote 17 ne valide pas uniquement à cause de cette exigence serveur. Le chiffrement du protocole Windows Force Protocol et les chemins internes de validation de certificat ne sont pas couverts par cette comparaison.

Avec les paramètres de chiffrement par défaut, passer de la version 17 à la version 18 peut exposer un certificat serveur non fiable. Si la version 18 rejette le certificat, diagnostiquez la chaîne de certificats et le nom avant de modifier les paramètres d’authentification.

Gardez le chiffrement et la validation de l’identité des serveurs activés :

  • Configurez un certificat serveur valide et le magasin de confiance du client afin que le client fasse confiance à son autorité de certification émettrice. Connectez-vous en utilisant un nom dans le certificat.
  • Si vous vous connectez via un alias, mettez HostnameInCertificate un nom valide dans le certificat serveur. Ce réglage ne répare pas une chaîne de certificats non fiable.
  • Pour Encrypt=Strict, le pilote 18.1 et les versions ultérieures supportent ServerCertificate également la correspondance du certificat serveur avec un fichier de certificat. Ce paramètre épingle un certificat ; il ne spécifie pas de nom d’hôte. Examinez ses restrictions dans ODBC DSN et les mots-clés de chaîne de connexion avant de l’utiliser.

Avertissement

Pour un environnement de test isolé, demande Encrypt=yes;TrustServerCertificate=yes le chiffrement mais saute la validation de l’identité du serveur, laissant la connexion ouverte à des attaques adversaires intermédiaires. Ne l’utilisez pas comme réparation de confiance en production. En mode strict, TrustServerCertificate est ignoré.

Si une application existante nécessite la norme par défaut de la version 17 lors d’un test de compatibilité contrôlé, voir Restaurer le comportement de chiffrement de la version 17. Encrypt=no Et Encrypt=optional ne pas réparer la confiance des certificats et peut laisser les données de l’application non chiffrées.

Chiffrer les valeurs

La version 17 n’accepte que yes et no. La version 18 et les versions ultérieures acceptent ces valeurs et en ajoutent trois autres :

Value Équivalent à Comportement
Mandatory yes La connexion est chiffrée.
Optional no Ne demande pas de chiffrement de connexion complète. Le serveur peut toujours en avoir besoin ; le chiffrement uniquement de connexion n’est pas une protection complète de la session.
Strict None La connexion utilise le chiffrement TDS 8.0. Le serveur doit prendre en charge TDS 8.0, comme SQL Server 2022 et versions ultérieures.

Strict il n’existe pas d’équivalent version 17. C’est la seule valeur qui sélectionne TDS 8.0, où le chiffrement est négocié avant l’échange de connexion plutôt que pendant celui-ci.

Restaurez le comportement de chiffrement de la version 17

Après avoir examiné les correctifs de confiance, utilisez le paramètre suivant uniquement pour un test de compatibilité contrôlé qui permet des données d’application non chiffrées :

Encrypt=no

Le pilote 18 accepte Encrypt=optional également ce réglage. Aucune des deux valeurs n’empêche le serveur de nécessiter un chiffrement. Restaurez la configuration chiffrée prévue après le test ; n’utilisez pas le chiffrement désactivé comme solution de confiance au certificat.

Liste de contrôle de mise à niveau

  1. Chaînes de connexion d’inventaire, DSN, références de paquets et scripts de déploiement qui sélectionnent le pilote 17.
  2. Installez le pilote 18 dans un environnement de test qui correspond à la production.
  3. Changez le Driver mot-clé dans chaque chaîne de connexion par ODBC Driver 18 for SQL Server, et mettez à jour ou recréez chaque DSN pour utiliser le pilote 18. L’installation du pilote 18 ne change pas les connexions existantes, car les connexions qui nomment le pilote 17 continuent d’utiliser le pilote 17.
  4. Définissez Encrypt explicitement. À utiliser Encrypt=Mandatory avec une validation normale des certificats. À utiliser Encrypt=Strict uniquement lorsque le serveur prend en charge TDS 8.0, comme SQL Server 2022 et versions ultérieures. Pour les serveurs qui ne supportent pas TDS 8.0, utilisez Encrypt=Mandatory.
  5. Pour une validation normale, connectez-vous et TrustServerCertificate=no vérifiez la chaîne de confiance et le nom du serveur accepté. Pour le pilote 18.1 et versions ultérieures avec épinglement strict des fichiers, il faut vérifier la correspondance exacte des certificats et les dates de validité ; TrustServerCertificate est ignoré en mode strict.
  6. Exécutez les chemins d’authentification, requête, transaction, copie en masse, basculement et retentative de l’application.
  7. Examinez les diagnostics pour détecter les erreurs de validation des certificats avant de considérer les défaillances comme authentification ou erreurs réseau.
  8. Gardez le pilote 17 installé et conservez l’inventaire de l’étape 1 jusqu’à la validation terminée, afin de pouvoir revenir à la version 17.

Revenir à la version 17

Les pilotes 17 et 18 s’installent côte à côte, vous pouvez donc revenir en arrière sans désinstaller le pilote 18. Pour les détails de téléchargement et d’installation, voir Download ODBC Driver for SQL Server.

  1. Confirmez que le pilote 17 est toujours installé sur chaque client.
  2. En utilisant l’inventaire de la checklist de mise à niveau, remettez le Driver mot-clé dans chaque chaîne de connexion en ODBC Driver 17 for SQL Server.
  3. Mettez à jour ou recréez chaque DSN pour utiliser le pilote 17.
  4. Restaurez les références de paquets et les scripts de déploiement vers le paquet Driver 17, comme msodbcsql17 sous Linux.
  5. Restaurez les Encrypt valeurs et TrustServerCertificate utilisées par l’application avec le pilote 17. Le Pilote 17 n’accepte que yes et no pour Encrypt et ne reconnaît pas les mots-clés du Pilote 18 tels que HostnameInCertificate ou ServerCertificate, donc supprimez les valeurs et mots-clés ajoutés pour le Pilote 18. Changez les mots-clés des alias pour revenir à leurs noms de Driver 17, et remplacez-les ConnectTimeout par un SQLSetConnectAttr appel qui définit SQL_ATTR_LOGIN_TIMEOUT. Pour la correspondance, voir Nouveaux mots-clés de chaîne de connexion.

Validez le retour en arrière avant de le considérer comme terminé :

  • Chaque connexion signale le Pilote 17. Appelez SQLGetInfo avec SQL_DRIVER_VER; la version majeure est 17.
  • Les chemins d’authentification, requête, transaction, copie en masse, basculement et retentative de l’application réussissent.
  • Les chaînes de connexion et les DSN ne contiennent aucune Encrypt valeur ni mot-clé ajouté pour le pilote 18.

Nouveaux mots-clés pour chaîne de connexion

La version 18 ajoute les mots-clés suivants pour chaîne de connexion, que la version 17 ne reconnaît pas. Certains d’entre eux sont de nouveaux noms pour des paramètres pris en charge par la version 17 sous un mot-clé ou un attribut différent, listés dans la colonne équivalente de la version 17 .

Mot clé Version minimale Purpose Équivalent version 17
ConcatNullYieldsNull 18.6 Contrôle si concaténer une valeur nulle donne nulle. None
ConnectTimeout 18,7 Ça règle le délai de connexion en quelques secondes. Si l’application définit SQL_ATTR_LOGIN_TIMEOUTégalement , l’attribut a la priorité. SQL_ATTR_LOGIN_TIMEOUT attribut, défini par SQLSetConnectAttr
FailoverPartner 18,7 Spécifie le partenaire de basculement pour le miroir de base de données. Windows uniquement. Failover_Partner mot-clé
GetDataExtensions 18,0 Contrôle quelles SQLGetData extensions le pilote permet. None
HostnameInCertificate 18,0 Spécifie le nom d’hôte à valider dans le certificat TLS du serveur. None
IpAddressPreference 18.1 Spécifie la famille d’adresses IP que le pilote essaie en premier. None
LongAsMax 18,0 Associe les types de données longs à leurs max équivalents. None
MultipleActiveResultSets 18,7 Permet de multiplier les ensembles de résultats actifs (MARS). Accepte Yes ou No. MARS_Connection mot-clé
RetryExec 18.1 Configure les règles de réessai pour les requêtes échouées. None
ServerCertificate 18.1 Spécifie le fichier de certificat pour correspondre au certificat serveur lors de l’utilisation Encrypt=Strictde . None
WorkstationID 18,7 Précise le nom de la station de travail envoyé au serveur. WSID mot-clé

MultipleActiveResultSets, WorkstationID, et FailoverPartner sont des alias qui alignent les noms de mots-clés ODBC avec Microsoft.Data.SqlClient les noms de propriétés. La version 18 accepte également les anciens noms. Pour plus de détails, voir Unification de chaînes de connexion et mot-cléConnectTimeout.

Pour la référence complète des mots-clés, voir ODBC DSN et mots-clés de chaîne de connexion.