Belangrijke versieverschillen in de Microsoft ODBC Driver voor SQL Server

Dit artikel beschrijft brekende wijzigingen tussen Microsoft ODBC Driver 18 voor SQL Server en versie 17. Gebruik het als je een driverversie kiest, een applicatie upgradet van versie 17 naar versie 18, of een verbindingsreeks consistent moet laten functioneren op beide versies.

De meeste applicaties die upgraden van versie 17 naar versie 18 worden door één wijziging getroffen: verbindingen zijn standaard versleuteld. Als je applicatie na de upgrade stopt met verbinden, lees dan eerst het standaardversleutelingsgedrag.

Kies versie 17 of versie 18

Driver 18 is de huidige hoofdversie. Driver 17 blijft ondersteund, maar applicaties die het gebruiken hebben nog steeds de nieuwste minor versie in de Driver 17-lijn nodig om correcties te ontvangen. Voor ondersteuningsdata en serviceregels, zie Supportlevenscyclus.

Scenario Aanbevolen pad
Nieuwe toepassing Begin met Driver 18. Configureer encryptie en certificaatvalidatie vóór productie.
Bestaande Driver 17-toepassing Installeer Driver 18 naast Driver 17, verander de drivernaam in de verbindingsreeks of DSN, en stel het expliciet in.Encrypt Als certificaatvalidatie faalt, herstel dan het servercertificaat of de trustopslag van de client.
Applicatie die , HostnameInCertificate, , RetryExec, of een ander Driver 18-trefwoord nodig heeft Encrypt=Strict Gebruik een Driver 18-release die deze instelling ondersteunt. Driver 17 accepteert de Strict waarde voor Encrypt en herkent de nieuwe zoekwoorden niet.
Applicatie die certificaatbestand-pinning nodig heeft met ServerCertificate Gebruik Driver 18.1 of een latere versie met Encrypt=Strict. Driver 17 ondersteunt deze instelling niet.

Het wijzigen van hoofdversies betekent meestal het wijzigen van de drivernaam of het pakket dat je kiest:

Platform Bestuurder 17 Bestuurder 18
Naam van de drivernaam van de verbindingsstring ODBC Driver 17 for SQL Server ODBC Driver 18 for SQL Server
Linux-pakketnaam msodbcsql17 msodbcsql18

Overzicht van wijzigingen

De standaard- en validatierijen beschrijven gewone externe verbindingen zonder DSN-instellingEncrypt, het SQL_COPT_SS_ENCRYPT attribuut of de Windows Force Protocol Encryption override. LocalDB is geen externe TLS-target.

Area Versie 17 Versie 18 en latere versies
Standaardinstelling Encrypt no, tenzij Authentication is ingesteld op een andere waarde dan none of de toepassing stelt SQL_COPT_SS_ACCESS_TOKEN; dan yes yes (18.0.1 en later)
Encrypt Geaccepteerde waarden yes, no yes, no, Mandatory, Optional, , Strict
Versleutelingsmodi Aan of aan Uit, aan of strikt
Validatie van servercertificaat Met Encrypt=yes;TrustServerCertificate=novalideert het certificaat. Server-vereiste encryptie alleen selecteert validatie niet. Valideert standaard. In niet-Stricte-modi TrustServerCertificate=yes slaat hij normale validatie over, ook wanneer de server encryptie vereist.
Trefwoorden voor verbindingsreeks Basisset Basisset plus nieuwe trefwoorden

Versleutelingswijzigingen

Standaardgedrag voor versleuteling

Driver 17 staat standaard op Encrypt=no tenzij het Authentication trefwoord op een andere none waarde is gezet of de applicatie het SQL_COPT_SS_ACCESS_TOKEN attribuut instelt. Beide veranderen de standaard naar yes. Een expliciet Encrypt=no systeem schakelt nog steeds de encryptie uit. Driver 18.0.1 en later zijn standaard .Encrypt=yes Stel het expliciet in Encrypt wanneer je versies vergelijkt.

Volledige verbindingsversleuteling beschermt de zoektekst en -resultaten, evenals de login. Met Encrypt=no, kan de server nog steeds volledige verbindingsencryptie vereisen. Wanneer zowel client als server de encryptie uitschakelen, gebruikt de niet-Stricte-onderhandeling login-only encryptie; dit beschermt de daaropvolgende applicatiegegevens niet.

Met Encrypt=yes;TrustServerCertificate=no, kiezen beide drivers normale servercertificaatvalidatie. Als alleen de server volledige verbondencryptie vereist en TrustServerCertificate=no (de standaard), valideert Driver 18 het certificaat. Buiten TrustServerCertificate=yes de Stricte-modus slaat Driver 18 die validatie over. Driver 17 valideert niet alleen vanwege die serververeiste. Windows Force Protocol-encryptie en interne certificaatvalidatie-callbackpaden vallen niet onder deze vergelijking.

Met de standaard encryptie-instellingen kan een upgrade van versie 17 naar versie 18 een niet-vertrouwd servercertificaat blootstellen. Als versie 18 het certificaat afwijst, diagnoseer dan de certificaatketen en naam voordat je de authenticatie-instellingen aanpast.

Houd encryptie en validatie van serveridentiteit ingeschakeld:

  • Configureer een geldig servercertificaat en de trustopslag van de client zodat de client zijn uitgevende certificaatautoriteit vertrouwt. Maak verbinding met een naam in het certificaat.
  • Als je via een alias verbindt, stel HostnameInCertificate dan een geldige naam in het servercertificaat. Deze instelling herstelt geen onbetrouwbare certificaatketen.
  • Voor Encrypt=Strict, ondersteunen ServerCertificate Driver 18.1 en latere versies ook het vergelijken van het servercertificaat met een certificaatbestand. Deze instelling pint een certificaat; het specificeert geen hostnaam. Bekijk de beperkingen in ODBC DSN en verbindingsreeks keywords voordat je het gebruikt.

Caution

Voor een geïsoleerde testomgeving vraagt Encrypt=yes;TrustServerCertificate=yes het om encryptie maar slaat serveridentiteitsvalidatie over, waardoor de verbinding openstaat voor aanvallen van de tegenstander in het midden. Gebruik het niet als een reparatie van het productievertrouwen. In de strenge modus wordt genegeerd. TrustServerCertificate

Als een bestaande applicatie de standaard versie 17 vereist tijdens een gecontroleerde compatibiliteitstest, zie Herstel versie 17 encryptiegedrag. Encrypt=no En Encrypt=optional repareer het certificaatvertrouwen niet, waardoor applicatiegegevens onversleuteld kunnen blijven.

Versleutel waarden

Versie 17 accepteert alleen yes en no. Versie 18 en latere versies accepteren deze waarden en voegen er drie extra toe:

Value Gelijk aan Gedrag
Mandatory yes De verbinding is versleuteld.
Optional no Vraagt geen volledige verbindingsencryptie aan. De server kan het nog steeds eisen; inlog-only encryptie biedt geen bescherming tegen volledige sessies.
Strict Geen De verbinding gebruikt TDS 8.0-encryptie. De server moet TDS 8.0 ondersteunen, zoals SQL Server 2022 en latere versies.

Strict heeft geen equivalent van versie 17. Het is de enige waarde die TDS 8.0 selecteert, waarbij encryptie wordt onderhandeld vóór de login-uitwisseling in plaats van tijdens deze uitwisseling.

Herstel het encryptiegedrag van versie 17

Na het bekijken van de trustfixes kun je de volgende instelling gebruiken voor een gecontroleerde compatibiliteitstest die onversleutelde applicatiegegevens toestaat:

Encrypt=no

Driver 18 accepteert Encrypt=optional ook deze instelling. Geen van beide waarden voorkomt dat de server encryptie vereist. Herstel de beoogde versleutelde configuratie na de test; gebruik gedeactiveerde encryptie niet als oplossing voor certificaatvertrouwen.

Controlelijst voor upgraden

  1. Inventarisverbindingsstrings, DSN's, pakketreferenties en deploymentscripts die Driver 17 selecteren.
  2. Installeer Driver 18 in een testomgeving die overeenkomt met de productie.
  3. Verander het Driver trefwoord in elke verbindingsreeks naar ODBC Driver 18 for SQL Server, en werk elke DSN bij of maak opnieuw aan om Driver 18 te gebruiken. Het installeren van Driver 18 schakelt niet over bestaande verbindingen, omdat verbindingen met de naam Driver 17 steeds Driver 17 gebruiken.
  4. Stel Encrypt expliciet in. Gebruik Encrypt=Mandatory het met normale certificaatvalidatie. Encrypt=Strict Gebruik alleen wanneer de server TDS 8.0 ondersteunt, zoals SQL Server 2022 en latere versies. Voor servers die TDS 8.0 niet ondersteunen, gebruik Encrypt=Mandatory.
  5. Voor normale validatie maak je verbinding met TrustServerCertificate=no en verifieer je de vertrouwde keten en de geaccepteerde servernaam. Voor Driver 18.1 en latere versies met Strict file pinning, verifieer in plaats daarvan de exacte certificaatovereenkomst en geldigheidsdata; TrustServerCertificate wordt genegeerd in Strict-modus.
  6. Voer de authenticatie-, query-, transactie-, bulkkopie-, failover- en herkansingspaden van de applicatie uit.
  7. Bekijk diagnostiek op certificaatvalidatiefouten voordat je storingen behandelt als authenticatie- of netwerkfouten.
  8. Houd Driver 17 geïnstalleerd en houd de inventaris vanaf stap 1 totdat de validatie is voltooid, zodat je terug kunt naar versie 17.

Terugrol naar versie 17

Driver 17 en Driver 18 worden naast elkaar geïnstalleerd, zodat je kunt terugrollen zonder Driver 18 te verwijderen. Voor download- en installatiedetails, zie Download ODBC Driver voor SQL Server.

  1. Controleer of Driver 17 nog steeds op elke client is geïnstalleerd.
  2. Met behulp van de inventaris uit de upgrade-checklist verander je het Driver trefwoord in elke verbindingsreeks terug naar ODBC Driver 17 for SQL Server.
  3. Werk elke DSN bij of maak opnieuw aan om Driver 17 te gebruiken.
  4. Zet pakketreferenties en deploymentscripts terug naar het Driver 17-pakket, bijvoorbeeld msodbcsql17 op Linux.
  5. Herstel de Encrypt en TrustServerCertificate waarden die de applicatie met Driver 17 gebruikte. Driver 17 accepteert alleen yes en no voor Encrypt en herkent Driver 18-zoekwoorden zoals HostnameInCertificate of ServerCertificate, dus verwijder waarden en trefwoorden die voor Driver 18 zijn toegevoegd. Verander de alias-sleutelwoorden terug naar hun Driver 17-namen en vervang ConnectTimeout door een SQLSetConnectAttr aanroep die stelt SQL_ATTR_LOGIN_TIMEOUT. Voor de mapping, zie New verbindingsreeks keywords.

Valideer de rollback voordat je deze als voltooid behandelt:

  • Elke verbinding meldt Driver 17. Roep SQLGetInfo aan met SQL_DRIVER_VER; de hoofdversie is 17.
  • De authenticatie-, query-, transactie-, bulkkopie-, failover- en retry-paden van de applicatie slagen.
  • Verbindingsstrings en DSN's bevatten geen Encrypt waarden of trefwoorden die voor Driver 18 zijn toegevoegd.

Nieuwe verbindingsreeks-sleutelwoorden

Versie 18 voegt de volgende verbindingsreeks-sleutelwoorden toe, die door versie 17 niet worden herkend. Sommige daarvan zijn nieuwe namen voor instellingen die versie 17 ondersteunt onder een ander trefwoord of attribuut, vermeld in de kolom van versie 17 .

Keyword Minimumversie Purpose Equivalent van versie 17
ConcatNullYieldsNull 18.6 Bepaalt of het samenvoegen van een nulwaarde nul oplevert. Geen
ConnectTimeout 18.7 Stelt de inlogtime-out in binnen enkele seconden. Als de applicatie ook stelt SQL_ATTR_LOGIN_TIMEOUT, krijgt het attribuut voorrang. SQL_ATTR_LOGIN_TIMEOUT attribuut, gezet met SQLSetConnectAttr
FailoverPartner 18.7 Specificeert de failoverpartner voor databasespiegeling. Alleen voor Windows. Failover_Partner trefwoord
GetDataExtensions 18,0 Bepaalt welke SQLGetData uitbreiding de driver inschakelt. Geen
HostnameInCertificate 18,0 Specificeert de hostnaam die gevalideerd moet worden in het TLS-certificaat van de server. Geen
IpAddressPreference 18.1 Geeft de IP-adresfamilie aan die de driver als eerste probeert. Geen
LongAsMax 18,0 Kaarten lange datatypes af naar hun max equivalenten. Geen
MultipleActiveResultSets 18.7 Maakt meerdere actieve resultaatsets (MARS) mogelijk. Ondersteunt Yes of No. MARS_Connection trefwoord
RetryExec 18.1 Stelt herkansingsregels in voor mislukte zoekopdrachten. Geen
ServerCertificate 18.1 Specificeert het certificaatbestand dat moet overeenkomen met het servercertificaat bij gebruik Encrypt=Strictvan . Geen
WorkstationID 18.7 Specificeert de werkstationnaam die naar de server wordt gestuurd. WSID trefwoord

MultipleActiveResultSets, WorkstationID, en FailoverPartner zijn aliassen die ODBC-zoekwoordnamen aligneren met Microsoft.Data.SqlClient eigenschapsnamen. Versie 18 accepteert ook de oudere namen. Voor details, zie Connection string keyword unification en ConnectTimeout keyword.

Voor de volledige trefwoordreferentie, zie ODBC DSN en verbindingsreeks keywords.