Főbb verzióbeli különbségek a Microsoft ODBC Driver for SQL Server-ben

Ez a cikk leírja a Microsoft ODBC Driver 18 for SQL Server és a 17-es verzió közötti törésszerű változásokat. Használd, amikor kiválasztasz egy driver verziót, frissítesz egy alkalmazást a 17-es verzióról a 18-ra, vagy mindkét verzióban következetesen viselkedni kell egy kapcsolati karakterlánc-et.

A legtöbb alkalmazást, amely a 17-es verzióról a 18-as verzióra frissít, egyetlen változás érinti: a kapcsolatok alapértelmezés szerint titkosítva vannak. Ha az alkalmazásod nem csatlakozik a frissítés után, először olvasd el az alapértelmezett titkosítási viselkedést .

Válaszd a 17-es vagy 18-as verziót

A Driver 18 a jelenlegi fő verzió. A Driver 17 továbbra is támogatott, de azok az alkalmazások, amelyek ezt használják, még mindig a Driver 17 legújabb kisebb verziójára van szükségük a javításokhoz. A támogatási dátumokért és a karbantartási szabályokért lásd: Támogatási életciklus.

Scenario Ajánlott elérési út
Új alkalmazás Kezdd a 18-as vezetővel. Konfigurálja a titkosítást és a tanúsítvány ellenőrzését a gyártás előtt.
Meglévő Driver 17 alkalmazás Telepítsd a 18-as meghajtót a 17-es illesztőprogram mellett, változtasd meg a driver-nevet a kapcsolati karakterlánc-ben vagy DSN-ben, és állítsd Encrypt be explicit. Ha a tanúsítvány ellenőrzése sikertelen, javítsd meg a szerver tanúsítványt vagy az ügyfél bizalmi tárolóját.
Olyan alkalmazás, amelyhez , HostnameInCertificate, RetryExec, vagy más Driver 18 kulcsszó szükségesEncrypt=Strict, Használj egy Driver 18 kiadást, amely támogatja ezt a beállítást. A 17-es vezető nem fogadja el az Strict új kulcsszavakat Encrypt és nem ismeri fel az új kulcsszavakat.
Olyan alkalmazás, amelynek tanúsítványfájl rögzítése szükséges ServerCertificate Használj Driver 18.1-et vagy egy újabb verziót .Encrypt=Strict A Driver 17 nem támogatja ezt a beállítást.

A főbb verziók megváltoztatása általában azt jelenti, hogy megváltoztatod a kiválasztott driver nevet vagy csomagot:

Platform 17-es sofőr 18-as versenyző
Kapcsolati string meghajtó neve ODBC Driver 17 for SQL Server ODBC Driver 18 for SQL Server
Linux csomag név msodbcsql17 msodbcsql18

Módosítások összefoglalása

Az alapértelmezett és ellenőrző sorok olyan hagyományos távoli kapcsolatokat írnak le, amelyekre DSN Encrypt beállítás, attribútum SQL_COPT_SS_ENCRYPT vagy a Windows Force Protocol titkosítás felülírása nem tartozik. A LocalDB nem távoli TLS célpont.

Area 17-es verzió 18-as verzió és későbbi változatok
Alapértelmezett Encrypt beállítás no, hacsak Authentication nem egy más értékre van beállítva, mint none vagy az alkalmazáshalmazok SQL_COPT_SS_ACCESS_TOKEN; akkor yes yes (18.0.1 és később)
Encrypt Elfogadott értékek yes, no yes, no, Mandatory, Optional, Strict
Titkosítási módok Kikapcsolva vagy be Kikapcsolva, bekapcsolva, vagy szigorúan
Kiszolgálótanúsítvány érvényesítése A Encrypt=yes;TrustServerCertificate=no, érvényesíti a tanúsítványt. A szerver által igényelt titkosítás önmagában nem választja ki a validációt. Alapértelmezés szerint érvényesíti. Nem szigorú módokban TrustServerCertificate=yes kihagyja a normál validációt, beleértve azokat a lehetőségeket is, amikor a szerver titkosítást igényel.
Kapcsolati karakterlánc kulcsszavak Alapkészlet Alapkészlet és új kulcsszavak

Titkosítási változások

Alapértelmezett titkosítási viselkedés

A 17-es meghajtó alapértelmezett módjára Encrypt=no működik, hacsak a Authentication kulcsszó nem állít más értékre, vagy none az alkalmazás nem állítja be az SQL_COPT_SS_ACCESS_TOKEN attribútumot. Bármelyik módosítja az alapértelmezet.yes Az explicit Encrypt=no még mindig kikapcsolja a titkosítást. A 18.0.1 és újabb illesztőprogram alapértelmezetként .Encrypt=yes Állítsd Encrypt be kifejezetten a verziók összehasonlításától.

A teljes kapcsolatos titkosítás védi a lekérdezési szöveget és az eredményeket, valamint a bejelentkezést. A szerver esetén Encrypt=noa szerver továbbra is teljes kapcsolati titkosítást igényelhet. Ha mind a kliens, mind a szerver kikapcsolja a titkosítást, a nem szigorú egyeztetés csak bejelentkezésre épülő titkosítást használ; ez nem védi a későbbi alkalmazásadatokat.

A -vel Encrypt=yes;TrustServerCertificate=nomindkét illesztőprogram a normál szerver tanúsítvány validálást választja. Ha csak a szerver teljes kapcsolati titkosítást igényel, és TrustServerCertificate=no (az alapértelmezett megoldás), a 18-as meghajtó érvényesíti a tanúsítványt. A TrustServerCertificate=yes Strict módon kívüli módban a 18-as vezető kihagyja ezt az ellenőrzést. A driver 17 nem csak a szerver követelménye miatt validál. A Windows Force Protocol titkosítása és a belső tanúsítvány-validációs visszahívási útvonalak nem vonatkoznak ebbe az összehasonlításba.

Az alapértelmezett titkosítási beállításokkal a 17-es verzióról a 18-as verzióra való frissítés nem megbízható szervertanúsítványt is felfedhet. Ha a 18-as verzió elutasítja a tanúsítványt, diagnosztizálja a tanúsítványláncot és a nevet, mielőtt megváltoztatná a hitelesítési beállításokat.

Tartsd engedélyezve a titkosítást és a szerverazonosító ellenőrzést:

  • Konfiguráljon egy érvényes szerver tanúsítványt és az ügyfél bizalmi tárolóját úgy, hogy az ügyfél megbízzon a kiadó tanúsítvány feloldó hatóságában. Csatlakozz a tanúsítványban szereplő néven.
  • Ha aliason keresztül csatlakozol, HostnameInCertificate állíts be érvényes nevet a szerver tanúsítványban. Ez a beállítás nem javít egy megbízhatatlan tanúsítványláncot.
  • A Encrypt=Strict, Driver 18.1 és újabb verziók is támogatják ServerCertificate a szerver tanúsítvány összevetését egy tanúsítványfájlhoz. Ez a beállítás tanúsítványt rögzít; nem határoz meg haszt nevet. A használat előtt nézze át a korlátozásait az ODBC DSN-ben és a kapcsolati karakterlánc kulcsszavakban.

Caution

Egy izolált tesztkörnyezetben Encrypt=yes;TrustServerCertificate=yes titkosítást kér, de kihagyja a szerverazonosító ellenőrzést, így a kapcsolat nyitva marad az ellenfél támadásainak. Ne használd termelési alap javításként. Szigorú módban TrustServerCertificate figyelmen kívül hagyják.

Ha egy meglévő alkalmazás a 17-es verzió alapértelmezett beállítását igényli egy kontrollált kompatibilitási teszt során, lásd : Restore 17 verzió titkosítási viselkedése. Encrypt=no És Encrypt=optional ne javítsd meg a tanúsítvány bizalmát, így az alkalmazásadatokat titkosítatlanul hagyhatod.

Titkosítási értékek

A 17-es verzió csak yes és noa rendszereket fogadja. A 18-as verzió és későbbi verziók elfogadják ezeket az értékeket, és további három értéket adnak hozzá:

Value Egyenértékű valamivel Magatartás
Mandatory yes A kapcsolat titkosított.
Optional no Nem kér teljes kapcsolatos titkosítást. A szerver továbbra is megkövetelheti ezt; a bejelentkezési titkosítás nem teljes munkamenet védelmet jelent.
Strict Nincs A kapcsolat TDS 8.0 titkosítást használ. A szervernek támogatnia kell a TDS 8.0-át, például az SQL Server 2022-t és újabb verziókat.

Strict nincs 17-es verzió megfelelője. Ez az egyetlen érték, amely TDS 8.0-t választ, ahol a titkosítást a bejelentkezés előtti tárgyalás végzi, nem pedig a bejelentkezés során.

Visszaállítás a 17-es verziós titkosítási viselkedés

A bizalmi javítások átnézése után csak egy kontrollált kompatibilitási teszthez használja az alábbi beállítást, amely titkosítatlan alkalmazásadatokat engedélyez:

Encrypt=no

A 18-as vezető is elfogadja Encrypt=optional ezt a beállítást. Egyik érték sem akadályozza meg a szerver titkosítását. A teszt után állítsa vissza a tervezett titkosított konfigurációt; ne használd a letiltott titkosítást tanúsítvány-bizalmi megoldásként.

Frissítési ellenőrzőlista

  1. Inventory kapcsolati láncok, DSN-ek, csomaghivatkozások és telepítési szkriptek, amelyek kiválasztják a 17-es meghajtót.
  2. Telepítsd a 18-as meghajtót olyan tesztkörnyezetbe, amely megfelel a gyártásnak.
  3. Változtasd meg minden Driver kapcsolati karakterlánc kulcsszavaját -re, ODBC Driver 18 for SQL Serverés frissítsd vagy hozd létre minden DSN-t a 18-as meghajtó használatára. A Driver 18 telepítése nem kapcsolja a meglévő kapcsolatokat, mert a Driver 17 nevű kapcsolatok továbbra is a Driver 17-et használják.
  4. Állítsa be Encrypt explicit módon. Normál tanúsítvány ellenőrzéssel használd Encrypt=Mandatory . Csak akkor használjaEncrypt=Strict, ha a szerver támogatja a TDS 8.0-t, például az SQL Server 2022 és újabb verziókat. Azoknak a szervereknek, amelyek nem támogatják a TDS 8.0-t, használd Encrypt=Mandatory.
  5. A normál ellenőrzéshez csatlakozz és TrustServerCertificate=no ellenőrizd a megbízható láncot és az elfogadott szerver nevet. A Driver 18.1 és újabb verzióknál, amelyek Strict fájl rögzítéssel rendelkeznek, ellenőrizd a pontos tanúsítványegyezést és érvényességi dátumokat; TrustServerCertificate Szigorú módban figyelmen kívül hagyják.
  6. Futasd be az alkalmazás hitelesítési, lekérdezési, tranzakcióját, tömeges másolatát, failover- és újrapróbálási útvonalait.
  7. Vizsgálja át a tanúsítvány validációs hibák diagnosztikáját, mielőtt a hibákat hitelesítésként vagy hálózati hibáként kezelnéd.
  8. Tartsd meg a 17-es meghajtót telepítve, és tartsd az inventoryt az 1. lépéstől egészen az ellenőrzésig, hogy vissza tudj térni a 17-es verzióra.

Vissza a 17-es verzióhoz

A 17-es és a 18-as illesztőprogram egymás mellett telepíthető, így vissza tudsz állítani anélkül, hogy eltávolítanád a 18-as meghajtót. Letöltési és telepítési részletekért lásd: Download ODBC Driver for SQL Server.

  1. Erősítsd meg, hogy a Driver 17 még mindig telepítve van minden kliensre.
  2. A frissítési ellenőrzőlistából származó készletet használva változtasd vissza minden Driver kapcsolati karakterlánc kulcsszavaját -reODBC Driver 17 for SQL Server.
  3. Frissítsd vagy hozd létre az egyes DSN-eket, hogy a 17-es meghajtót használjuk.
  4. A csomaghivatkozásokat és telepítési szkripteket visszafordítsa a Driver 17 csomagba, például msodbcsql17 Linuxon.
  5. Állítsd vissza a Encrypt 17-es meghajtóval használt alkalmazás és TrustServerCertificate értékeit. A 17-es meghajtó csak yes és no for Encrypt kulcsszavakat fogad el, és nem ismeri fel a 18-as vezetőhöz tartozó kulcsszavakat, mint HostnameInCertificate például vagy ServerCertificate, ezért távolítsd el a 18-as meghajtóhoz hozzáadott értékeket és kulcsszavakat. Változtasd vissza az alias kulcsszavakat a Driver 17 nevükre, és ConnectTimeout helyettesítsd egy SQLSetConnectAttr olyan hívással, amely beállítja SQL_ATTR_LOGIN_TIMEOUT. A leképezésért lásd: New kapcsolati karakterlánc kulcsszavak.

Validáld a visszagörgetést, mielőtt befejezettnek kezelnéd:

  • Minden kapcsolat a 17-es vezetőt jelenti. Hívjuk az SQLGetInfo-t ; SQL_DRIVER_VERa fő verzió .17
  • Az alkalmazás hitelesítési, lekérdezési, tranzakciója, tömeges másolása, újratöltési és újrapróbálási útvonalai sikeresek.
  • A kapcsolódási stringek és DSN-ek nem Encrypt tartalmaznak olyan értékeket vagy kulcsszavakat, amelyeket a 18-as meghajtóhoz adtak hozzá.

Új kapcsolati karakterlánc kulcsszavak

A 18-as verzió hozzáadja a következő kapcsolati karakterlánc kulcsszavakat, amelyeket a 17-es verzió nem ismer fel. Néhány új nevek olyan beállításokra, amelyeket a 17-es verzió támogat, egy másik kulcsszó vagy attribútum alatt, amely a 17-es verzió megfelelő oszlopban szerepel.

Keyword Minimális verzió Alkalmazás célja 17-es verzió megfelelője
ConcatNullYieldsNull 18.6 Szabályozza, hogy nullérték összekötése nulla eredményt eredményez-e. Nincs
ConnectTimeout 18,7 Másodpercekben állítja be a bejelentkezési időkorlátot. Ha az alkalmazás szintén beállítja SQL_ATTR_LOGIN_TIMEOUT, az attribútum elsőbbséget vesz fel. SQL_ATTR_LOGIN_TIMEOUT attribútum, halmaz SQLSetConnectAttr
FailoverPartner 18,7 Megadja a rendszerátvételi partnert az adatbázis tükrözéséhez. Csak Windows rendszeren. Failover_Partner kulcsszó
GetDataExtensions 18.0 Szabályozza, mely SQLGetData kiterjesztéseket engedélyezi a driver. Nincs
HostnameInCertificate 18.0 Megadja a szerver TLS tanúsítványában érvényesítendő hosztnevet. Nincs
IpAddressPreference 18.1 Megadja az IP-címcsaládot, amit az illesztőprogram először próbál. Nincs
LongAsMax 18.0 A hosszú adattípusokat a max megfelelőikhez képezi le. Nincs
MultipleActiveResultSets 18,7 Lehetővé teszi több aktív eredményhalmazt (MARS). Elfogadja Yes vagy No. MARS_Connection kulcsszó
RetryExec 18.1 Újrapróbálkozási szabályokat konfigurál sikertelen lekérdezésekre. Nincs
ServerCertificate 18.1 Megadja a tanúsítványfájlt, amely megfelel a szerver tanúsítványának használatában.Encrypt=Strict Nincs
WorkstationID 18,7 Megadja a szervernek küldött munkaállomás nevét. WSID kulcsszó

MultipleActiveResultSets, WorkstationID, és FailoverPartner olyan aliasok, amelyek az ODBC kulcsszóneveket a Microsoft.Data.SqlClient tulajdonságnevekhez igazítják. A 18-as verzió elfogadja a régebbi neveket is. Részletekért lásd: Connection string kulcsszó egységezés és ConnectTimeout kulcsszó.

A teljes kulcsszó hivatkozásért lásd az ODBC DSN és a kapcsolati karakterlánc kulcsszavakat.