Stora versionsskillnader i Microsoft ODBC-drivrutinen för SQL Server

Denna artikel beskriver brytande ändringar mellan Microsoft ODBC Driver 18 för SQL Server och version 17.

De flesta applikationer som uppgraderar från version 17 till version 18 påverkas av en enda ändring: anslutningar är krypterade som standard. Om din applikation slutar ansluta efter uppgraderingen, läs först Standardkrypteringsbeteendet.

Sammanfattning av ändringarna

Area Version 17 Version 18 och senare versioner
Standardinställning Encrypt no yes
Encrypt Accepterade värden yes, no yes, no, Mandatory, Optional, Strict
Krypteringslägen Av eller på Av, på eller strikt
Verifiering av servercertifikat Det sker inte om du inte begär kryptering Sker som standard, eftersom kryptering är påslagen som standard
Nyckelord för anslutningssträng Basmängd Basuppsättning plus nya nyckelord

Krypteringsändringar

Standardkrypteringsbeteende

I version 17 är anslutningarna inte krypterade om du inte ber om kryptering eller servern kräver det. I version 18 och senare versioner är anslutningar krypterade som standard.

Eftersom drivrutinen validerar servercertifikatet varje gång den krypterar en anslutning, ansluter en applikation som ansluter till en server med ett självsignerat eller på annat sätt obetrodd certifikat framgångsrikt med version 17 och misslyckas med version 18. Felet är ett certifikatvalideringsfel, inte ett autentiseringsfel.

Du har tre sätt att lösa det, listade från mest till minst säkert:

  • Installera ett certifikat på servern som klienten litar på. Detta alternativ rekommenderas och det är det enda som behåller både kryptering och validering.
  • Behåll krypteringen på och tala om för drivrutinen vilket namn som ska valideras, genom att sätta HostNameInCertificate eller ServerCertificate.
  • Stäng av kryptering för att återställa version 17:s standard, genom att lägga till Encrypt=no i reťazec pripojenia.

Caution

Inställningen TrustServerCertificate=yes håller anslutningen krypterad men inaktiverar certifikatvalidering, vilket lämnar anslutningen öppen för attacker från angriparen i mitten. Föredra ett betrodd certifikat.

Kryptera värden

Version 17 accepterar endast yes och no. Version 18 och senare versioner accepterar dessa värden och lägger till tre till:

Value Likvärdig med Behavior
Mandatory yes Anslutningen är krypterad.
Optional no Anslutningen är inte krypterad om inte servern kräver det.
Strict Ingen Anslutningen använder TDS 8.0-kryptering.

Strict har ingen motsvarande version 17. Det är det enda värdet som väljer TDS 8.0, där kryptering förhandlas före inloggningsutbytet istället för under det.

Återställ version 17:s krypteringsbeteende

För att återställa version 17:s standardbeteende, sätt Encrypt uttryckligen:

Driver={ODBC Driver 18 for SQL Server};Server=<server>;Database=<database>;UID=<user_id>;PWD=<password>;Encrypt=no;

Att sätta värdet explicit är fördelaktigt även på version 17, eftersom det gör att reťazec pripojenia beter sig likadant på båda versionerna.

Nya nyckelord för reťazec pripojenia

Version 18 lägger till följande reťazec pripojenia-nyckelord, som version 17 inte känner igen:

Keyword Purpose
ConcatNullYieldsNull Kontrollerar om sammanfogning av ett nollvärde ger noll.
GetDataExtensions Styr vilket SQLGetData som förlänger drivrutinen aktiverar.
HostNameInCertificate Specificerar värdnamnet som ska valideras i serverns TLS-certifikat.
IpAddressPreference Specificerar vilken IP-adressfamilj drivrutinen försöker först.
LongAsMax Mappar långa datatyper till deras max motsvarigheter.
RetryExec Konfigurerar omprövningsregler för misslyckade frågor.
ServerCertificate Specificerar vägen till en certifikatfil för att validera servern mot.

Individuella nyckelord introducerades i olika version 18-utgåvor. För utgåvan som introducerade varje nyckelord, och för fullständig nyckelordsreferens, se ODBC DSN och reťazec pripojenia-nyckelord.