Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Denna artikel beskriver brytande ändringar mellan Microsoft ODBC Driver 18 för SQL Server och version 17. Använd den när du väljer en drivrutinsversion, uppgraderar en applikation från version 17 till version 18, eller behöver få en reťazec pripojenia att bete sig konsekvent på båda versionerna.
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.
Välj version 17 eller version 18
Driver 18 är den nuvarande huvudversionen. Drivrutin 17 stöds fortfarande, men applikationer som använder den behöver fortfarande den senaste mindre versionen i Drivrutin 17-serien för att få fixar. För supportdatum och serviceregler, se Supportens livscykel.
| Scenario | Rekommenderad sökväg |
|---|---|
| Ny ansökan | Börja med Driver 18. Konfigurera kryptering och certifikatvalidering innan produktion. |
| Befintlig Driver 17-applikation | Installera drivrutin 18 bredvid drivrutin 17, ändra drivrutinsnamnet i reťazec pripojenia eller DSN, och ställ Encrypt in explicit. Om certifikatvalidering misslyckas, åtgärda servercertifikatet eller klientens förtroendelagring. |
Applikation som behöver Encrypt=Strict, HostnameInCertificate, , RetryExeceller ett annat nyckelord i Driver 18 |
Använd en Driver 18-version som stödjer inställningen. Driver 17 accepterar Strict inte värdet för Encrypt och känner inte igen de nya nyckelorden. |
Applikation som behöver certifikatfilsnål med ServerCertificate |
Använd Driver 18.1 eller en senare version med Encrypt=Strict. Driver 17 stöder inte denna inställning. |
Att byta huvudversioner innebär oftast att man byter drivrutinsnamn eller paket du väljer:
| Platform | Förare 17 | Förare 18 |
|---|---|---|
| Anslutningssträngens drivrutinsnamn | ODBC Driver 17 for SQL Server |
ODBC Driver 18 for SQL Server |
| Linux-paketnamn | msodbcsql17 |
msodbcsql18 |
Sammanfattning av ändringarna
Standard- och valideringsraderna beskriver vanliga fjärranslutningar utan DSN-inställningEncrypt, attributet SQL_COPT_SS_ENCRYPT eller Windows Force Protocol Encryption-överskrivning. LocalDB är inte ett fjärrmål för TLS.
| Area | Version 17 | Version 18 och senare versioner |
|---|---|---|
Standardinställning Encrypt |
no, om inte Authentication är satt till ett annat värde än none eller applikationen sätter SQL_COPT_SS_ACCESS_TOKEN; då yes |
yes (18.0.1 och senare) |
Encrypt Accepterade värden |
yes, no |
yes, no, Mandatory, Optional, Strict |
| Krypteringslägen | Av eller på | Av, på eller strikt |
| Verifiering av servercertifikat | Med Encrypt=yes;TrustServerCertificate=novaliderar certifikatet. Server-krävd kryptering väljer inte validering ensam. |
Validerar som standard. I icke-Stricte-lägen TrustServerCertificate=yes hoppar den över normal validering, även när servern kräver kryptering. |
| Nyckelord för anslutningssträng | Basmängd | Basuppsättning plus nya nyckelord |
Krypteringsändringar
Standardkrypteringsbeteende
Drivrutin 17 är standard på Encrypt=no om Authentication inte nyckelordet är inställt på ett annat värde än none eller om applikationen sätter attributet SQL_COPT_SS_ACCESS_TOKEN . Antingen ändrar standarden till yes. En explicit Encrypt=no stänger fortfarande av krypteringen. Drivrutin 18.0.1 och senare går som standard till Encrypt=yes. Sätt Encrypt det explicit när du jämför versioner.
Fullständig anslutningskryptering skyddar frågetext och resultat samt inloggningen. Med Encrypt=no, kan servern fortfarande kräva fullständig anslutningskryptering. När både klient och server väljer kryptering av använder den icke-strikta förhandlingen inloggningskryptering; detta skyddar inte efterföljande applikationsdata.
Med , väljer båda drivrutinerna Encrypt=yes;TrustServerCertificate=nonormal validering av servercertifikat. Om endast servern kräver fullständig anslutningskryptering och TrustServerCertificate=no (standard), validerar Drivrutin 18 certifikatet. Med TrustServerCertificate=yes utanför Strict-läget hoppar Driver 18 över den valideringen. Driver 17 validerar inte enbart på grund av det serverkravet. Windows tvinga protokollkryptering och interna återkallelsevägar för certifikatvalidering täcks inte av denna jämförelse.
Med standardkrypteringsinställningarna kan en uppgradering från version 17 till version 18 exponera ett icke-betrodd servercertifikat. Om version 18 avvisar certifikatet, diagnostisera certifikatkedjan och namnet innan autentiseringsinställningarna ändras.
Ha kryptering och serveridentitetsvalidering aktiverad:
- Konfigurera ett giltigt servercertifikat och klientens förtroendelagring så att klienten litar på sin utfärdande certifikatutfärdare. Koppla upp med ett namn i certifikatet.
- Om du ansluter via ett alias, ställ
HostnameInCertificatein ett giltigt namn i servercertifikatet. Denna inställning reparerar inte en icke-betrodd certifikatkedja. - För
Encrypt=Strict, stöderServerCertificateDriver 18.1 och senare versioner också att matcha servercertifikatet mot en certifikatfil. Denna inställning fäster ett certifikat; den specificerar inget värdnamn. Gå igenom dess begränsningar i ODBC DSN och reťazec pripojenia-nyckelord innan du använder det.
Caution
För en isolerad testmiljö Encrypt=yes;TrustServerCertificate=yes begär kryptering men hoppar över validering av serveridentitet, vilket lämnar anslutningen öppen för attacker från angriparen i mitten. Använd det inte som en reparation av produktionsförtroendet. I strikt läge ignoreras. TrustServerCertificate
Om en befintlig applikation kräver version 17 som standard under ett kontrollerat kompatibilitetstest, se Återställ version 17 krypteringsbeteende.
Encrypt=no Och Encrypt=optional reparera inte certifikatförtroendet och kan lämna applikationsdata okrypterad.
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 |
Begär inte fullständig anslutningskryptering. Servern kan fortfarande kräva det; inloggningskryptering är inte full-session-skydd. |
Strict |
Ingen | Anslutningen använder TDS 8.0-kryptering. Servern måste stödja TDS 8.0, såsom SQL Server 2022 och senare versioner. |
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
Efter att ha granskat förtroendefixarna, använd följande inställning endast för ett kontrollerat kompatibilitetstest som tillåter okrypterad applikationsdata:
Encrypt=no
Driver 18 accepterar Encrypt=optional också denna inställning. Inget av värdena hindrar servern från att kräva kryptering. Återställ den avsedda krypterade konfigurationen efter testet; använd inte inaktiverad kryptering som en lösning för certifikatförtroende.
Checklista för uppgradering
- Inventarieanslutningssträngar, DSN, paketreferenser och distributionsskript som väljer Drivrutin 17.
- Installera drivrutin 18 i en testmiljö som matchar produktionen.
- Byt
Drivernyckelordet i varje reťazec pripojenia tillODBC Driver 18 for SQL Server, och uppdatera eller återskapa varje DSN för att använda Driver 18. Att installera drivrutin 18 byter inte befintliga anslutningar, eftersom anslutningar som heter drivrutin 17 fortsätter att använda drivrutin 17. - Ange
Encryptexplicit. AnvändEncrypt=Mandatorymed vanlig certifikatvalidering. AnvändEncrypt=Strictendast när servern stödjer TDS 8.0, såsom SQL Server 2022 och senare versioner. För servrar som inte stödjer TDS 8.0, användEncrypt=Mandatory. - För normal validering, koppla upp dig med
TrustServerCertificate=nooch verifiera den betrodda kedjan och det accepterade servernamnet. För drivrutin 18.1 och senare versioner med Strict-filpinning, verifiera istället exakt certifikatmatchning och giltighetsdatum;TrustServerCertificateignoreras i Strict-läge. - Kör applikationens autentiserings-, fråge-, transaktions-, bulkkopierings-, failover- och omförsöksvägar.
- Granska diagnostik för certifikatvalideringsfel innan du behandlar fel som autentiserings- eller nätverksfel.
- Behåll drivrutin 17 installerad och behåll inventariet från steg 1 tills valideringen är klar, så att du kan gå tillbaka till version 17.
Återställ till version 17
Drivrutin 17 och drivrutin 18 installeras sida vid sida, så du kan rulla tillbaka utan att avinstallera drivrutin 18. För nedladdnings- och installationsdetaljer, se Download ODBC-drivrutin för SQL Server.
- Bekräfta att drivrutin 17 fortfarande är installerad på varje klient.
- Med inventariet från uppgraderingschecklistan ändrar
Driverdu nyckelordet i varje reťazec pripojenia tillbaka tillODBC Driver 17 for SQL Server. - Uppdatera eller skapa om varje DSN för att använda Drivrutin 17.
- Återställ paketreferenser och distributionsskript till Driver 17-paketet, till exempel
msodbcsql17på Linux. - Återställ
EncryptochTrustServerCertificatevärdena som applikationen använde med drivrutin 17. Driver 17 accepterar endastyesochnoförEncryptoch känner inte igen Driver 18-nyckelord somHostnameInCertificateellerServerCertificate, så ta bort värden och nyckelord som lagts till för Driver 18. Byt aliasnyckelord tillbaka till deras Driver 17-namn och ersättConnectTimeoutmed ettSQLSetConnectAttranrop som sätterSQL_ATTR_LOGIN_TIMEOUT. För mappningen, se New reťazec pripojenia keywords.
Validera rollbacken innan du behandlar den som fullständig:
- Varje anslutning rapporterar Förare 17. Anropa SQLGetInfo med
SQL_DRIVER_VER; huvudversionen är17. - Applikationens autentiserings-, fråge-, transaktions-, bulkkopierings-, failover- och omförsöksvägar lyckas.
- Anslutningssträngar och DSN innehåller inga
Encryptvärden eller nyckelord som lagts till för Drivrutin 18.
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. Några av dem är nya namn för inställningar som version 17 stödjer under ett annat nyckelord eller attribut, listat i kolumnen motsvarande version 17 .
| Keyword | Minimiversion | Purpose | Version 17 motsvarar |
|---|---|---|---|
ConcatNullYieldsNull |
18.6 | Kontrollerar om sammanfogning av ett nollvärde ger noll. | Ingen |
ConnectTimeout |
18.7 | Sätter inloggningstiden på några sekunder. Om applikationen också sätter SQL_ATTR_LOGIN_TIMEOUT, har attributet företräde. |
SQL_ATTR_LOGIN_TIMEOUT attribut, satt med SQLSetConnectAttr |
FailoverPartner |
18.7 | Specificerar failover-partnern för databasspegling. Endast Windows. |
Failover_Partner nyckelord |
GetDataExtensions |
18,0 | Styr vilket SQLGetData som förlänger drivrutinen aktiverar. |
Ingen |
HostnameInCertificate |
18,0 | Specificerar värdnamnet som ska valideras i serverns TLS-certifikat. | Ingen |
IpAddressPreference |
18.1 | Specificerar vilken IP-adressfamilj drivrutinen försöker först. | Ingen |
LongAsMax |
18,0 | Mappar långa datatyper till deras max motsvarigheter. |
Ingen |
MultipleActiveResultSets |
18.7 | Möjliggör flera aktiva resultatuppsättningar (MARS). Accepterar Yes eller No. |
MARS_Connection nyckelord |
RetryExec |
18.1 | Konfigurerar omprövningsregler för misslyckade frågor. | Ingen |
ServerCertificate |
18.1 | Specificerar certifikatfilen som ska matchas mot servercertifikatet när man använder Encrypt=Strict. |
Ingen |
WorkstationID |
18.7 | Specificerar arbetsstationens namn som skickas till servern. |
WSID nyckelord |
MultipleActiveResultSets, WorkstationID, och FailoverPartner är alias som justerar ODBC-nyckelordsnamn med Microsoft.Data.SqlClient egenskapsnamn. Version 18 accepterar också de äldre namnen. För detaljer, se Connection string keyword unification och ConnectTimeout keyword.
För fullständig nyckelordsreferens, se ODBC DSN och reťazec pripojenia keywords.