Główne różnice w wersji sterownika Microsoft ODBC dla SQL Server

Ten artykuł opisuje przełomowe zmiany między sterownikiem Microsoft ODBC 18 dla SQL Server a wersją 17. Używaj go, gdy wybierasz wersję sterownika, aktualizujesz aplikację z wersji 17 do 18 lub musisz sprawić, by parametry połączenia działał spójnie w obu wersjach.

Większość aplikacji aktualizujących się z wersji 17 do 18 jest dotknięta jedną zmianą: połączenia są domyślnie szyfrowane. Jeśli Twoja aplikacja przestaje się łączyć po aktualizacji, najpierw przeczytaj Domyślne zachowanie szyfrowania .

Wybierz wersję 17 lub wersję 18

Driver 18 to obecna główna wersja. Sterownik 17 nadal jest wspierany, ale aplikacje korzystające z niego nadal potrzebują najnowszej wersji pomocniczej z linii sterownika 17, aby otrzymać poprawki. Daty wsparcia i zasady obsługi można znaleźć w artykule Cykl życia wsparcia.

Scenario Zalecana ścieżka
Nowe zastosowanie Zacznij od Driver 18. Konfiguruj szyfrowanie i walidację certyfikatów przed produkcją.
Istniejąca aplikacja sterownika 17 Zainstaluj sterownik 18 razem ze sterownikiem 17, zmień nazwę sterownika w parametry połączenia lub DSN i ustaw Encrypt to wyraźnie. Jeśli walidacja certyfikatu się nie powiedzie, napraw certyfikat serwera lub magazyn zaufania klienta.
Aplikacja potrzebująca Encrypt=Strict, HostnameInCertificate, RetryExec, lub innego słowa kluczowego sterownika 18 Użyj wydania Driver 18, które obsługuje to ustawienie. Sterownik 17 nie akceptuje Strict wartości i Encrypt nie rozpoznaje nowych słów kluczowych.
Aplikacja wymagająca przypinania pliku certyfikatu z pomocą ServerCertificate Użyj sterownika 18.1 lub nowszej wersji z Encrypt=Strict. Sterownik 17 nie obsługuje tego ustawienia.

Zmiana głównych wersji zazwyczaj oznacza zmianę nazwy sterownika lub wybranego pakietu:

Platform Kierowca 17 Kierowca 18
Nazwa sterownika ciągu połączeń ODBC Driver 17 for SQL Server ODBC Driver 18 for SQL Server
Nazwa pakietu Linux msodbcsql17 msodbcsql18

Podsumowanie zmian

Wiersze domyślne i walidacyjne opisują zwykłe połączenia zdalne bez ustawienia DSNEncrypt, atrybutu SQL_COPT_SS_ENCRYPT lub nadpisania szyfrowania Windows Force Protocol. LocalDB nie jest zdalnym celem TLS.

Area Wersja 17 Wersja 18 i późniejsze wersje
Domyślne ustawienie Encrypt no, chyba że Authentication jest ustawiony na wartość inną niż none lub zbiory SQL_COPT_SS_ACCESS_TOKENaplikacji ; wtedy yes yes (18.0.1 i później)
Encrypt Akceptowane wartości yes, no yes, no, , Mandatory, OptionalStrict
Tryby szyfrowania Wyłączony lub włączony Wyłączone, włączone lub ścisłe
Weryfikacja certyfikatu serwera Za pomocą Encrypt=yes;TrustServerCertificate=no, waliduje certyfikat. Samo szyfrowanie wymagane przez serwer nie oznacza wyboru walidacji. Domyślnie waliduje. W trybach nieścisłych pomija TrustServerCertificate=yes normalną walidację, w tym gdy serwer wymaga szyfrowania.
Słowa kluczowe parametrów połączenia Zestaw bazowy Zestaw bazowy plus nowe słowa kluczowe

Zmiany szyfrowania

Domyślne zachowanie szyfrowania

Sterownik 17 domyślnie jest ustawiony na , Encrypt=no chyba że Authentication słowo kluczowe jest ustawione na inną wartość lub none aplikacja ustawi atrybut.SQL_COPT_SS_ACCESS_TOKEN Każda z opcji zmienia domyślną wartość na yes. Jawny nadal wyłącza Encrypt=no szyfrowanie. Sterownik 18.0.1 i późniejsze domyślnie przyjmują .Encrypt=yes Ustaw Encrypt to wyraźnie przy porównywaniu wersji.

Szyfrowanie pełnego połączenia chroni teksty zapytań i wyniki oraz logowanie. Przy Encrypt=no, serwer nadal może wymagać pełnego szyfrowania połączenia. Gdy zarówno klient, jak i serwer wyłączą szyfrowanie, negocjacje nieścisłe stosują szyfrowanie tylko login; nie chroni to kolejnych danych aplikacji.

Oba sterowniki wybierają Encrypt=yes;TrustServerCertificate=nonormalną walidację certyfikatu serwera. Jeśli tylko serwer wymaga pełnego szyfrowania połączenia i TrustServerCertificate=no (domyślnie), sterownik 18 weryfikuje certyfikat. W TrustServerCertificate=yes trybie Strict poza Driverem 18 pomija tę weryfikację. Sterownik 17 nie jest walidowany wyłącznie ze względu na ten wymóg serwera. Windows wymusza szyfrowanie protokołu oraz wewnętrzne ścieżki walidacji certyfikatów nie są objęte tym porównaniem.

Przy domyślnych ustawieniach szyfrowania, aktualizacja z wersji 17 do 18 może ujawnić nieufny certyfikat serwera. Jeśli wersja 18 odrzuci certyfikat, zdiagnozuj łańcuch certyfikatów i nazwę przed zmianą ustawień uwierzytelniania.

Zachowaj włączone szyfrowanie i weryfikację tożsamości serwera:

  • Skonfiguruj ważny certyfikat serwera oraz magazyn zaufania klienta, aby klient ufał swojemu wydającemu organowi certyfikacji. Połącz się za pomocą nazwy z certyfikatu.
  • Jeśli łączysz się przez alias, ustaw HostnameInCertificate ważną nazwę w certyfikacie serwera. To ustawienie nie naprawia łańcucha niezaufanych certyfikatów.
  • Dla Encrypt=Strict, sterowniki 18.1 i nowszych również umożliwiają ServerCertificate dopasowanie certyfikatu serwera do pliku certyfikatu. To ustawienie przypina certyfikat; nie określa nazwy hosta. Przed użyciem przejrzyj jego ograniczenia w ODBC DSN oraz słowach kluczowych parametry połączenia.

Caution

W izolowanym środowisku testowym żąda szyfrowania, Encrypt=yes;TrustServerCertificate=yes ale pomija walidację tożsamości serwera, pozostawiając połączenie otwarte na ataki przeciwnika w środku. Nie używaj tego jako naprawy funduszu produkcyjnego. W trybie ścisłym jest ignorowany. TrustServerCertificate

Jeśli istniejąca aplikacja wymaga domyślnego ustawienia wersji 17 podczas kontrolowanego testu kompatybilności, zobacz Przywrócenie zachowania szyfrowania wersji 17. Encrypt=no I Encrypt=optional nie naprawiaj zaufania do certyfikatów, bo możesz pozostawić dane aplikacji niezaszyfrowane.

Wartości szyfrowania

Wersja 17 akceptuje tylko yes i no. Wersje 18 i późniejsze akceptują te wartości i dodają trzy kolejne:

Value Odpowiednik Behavior
Mandatory yes Połączenie jest zaszyfrowane.
Optional no Nie wymaga szyfrowania pełnego połączenia. Serwer nadal może tego wymagać; szyfrowanie tylko logowania nie jest pełną ochroną sesji.
Strict Żadne Połączenie wykorzystuje szyfrowanie TDS 8.0. Serwer musi obsługiwać TDS 8.0, na przykład SQL Server 2022 i nowsze.

Strict nie ma odpowiednika wersji 17. To jedyna wartość, która wybiera TDS 8.0, gdzie szyfrowanie jest negocjowane przed wymianą logowania, a nie w trakcie jej procesu.

Przywróć zachowanie szyfrowania wersji 17

Po przeanalizowaniu poprawek zaufania stosuj następujące ustawienie tylko do kontrolowanego testu kompatybilności, który pozwala na nieszyfrowane dane aplikacji:

Encrypt=no

Sterownik 18 również akceptuje Encrypt=optional to ustawienie. Żadna z tych wartości nie uniemożliwia serwerowi wymogu szyfrowania. Przywróć zamierzoną konfigurację szyfrowania po teście; nie używaj wyłączonego szyfrowania jako środka zaufania certyfikatów.

Lista kontrolna aktualizacji

  1. Łańcuchy połączeń w inwentarzu, DSN, odniesienia do pakietów oraz skrypty wdrożeniowe, które wybierają sterownik 17.
  2. Zainstaluj sterownik 18 w środowisku testowym odpowiadającym produkcyjnemu.
  3. Zmień Driver słowo kluczowe w każdym parametry połączenia na ODBC Driver 18 for SQL Server, a następnie aktualizuj lub odtwarzaj każdy DSN, aby używał sterownika 18. Instalacja Sterownika 18 nie przełącza istniejących połączeń, ponieważ połączenia o nazwie Sterownik 17 nadal używają Sterownika 17.
  4. Ustaw Encrypt jawnie. Używaj Encrypt=Mandatory z normalną walidacją certyfikatów. Używaj Encrypt=Strict tylko wtedy, gdy serwer obsługuje TDS 8.0, na przykład SQL Server 2022 i nowsze wersje. Dla serwerów, które nie obsługują TDS 8.0, użyj Encrypt=Mandatory.
  5. Dla normalnej weryfikacji należy połączyć się i TrustServerCertificate=no zweryfikować zaufany łańcuch oraz akceptowaną nazwę serwera. W wersjach sterowników 18.1 i nowszych z ścisłym przypinaniem plików należy zamiast tego zweryfikować dokładne dopasowanie certyfikatu i daty ważności; TrustServerCertificate jest ignorowane w trybie ścisłym.
  6. Uruchom ścieżki uwierzytelniania, zapytań, transakcji, kopiowania masowego, failover i ponownych prób aplikacji.
  7. Przed traktowaniem błędów uwierzytelniania lub sieci przeanalizuj diagnostykę pod kątem błędów walidacji certyfikatów.
  8. Trzymaj zainstalowany sterownik 17 i trzymaj inwentaryzację od kroku 1 aż do zakończenia weryfikacji, żeby móc wrócić do wersji 17.

Powrót do wersji 17

Sterownik 17 i sterownik 18 instalują się równolegle, więc możesz cofnąć bez odinstalowywania sterownika 18. Szczegóły pobierania i instalacji można znaleźć w artykule Download ODBC Driver for SQL Server.

  1. Potwierdź, że sterownik 17 jest nadal zainstalowany na każdym kliencie.
  2. Korzystając z inwentarza z listy kontrolnej aktualizacji, zmień Driver słowo kluczowe w każdym parametry połączenia z powrotem na .ODBC Driver 17 for SQL Server
  3. Zaktualizuj lub utworzy każdy DSN, aby używać sterownika 17.
  4. Przywróć odwołania do pakietów i skrypty wdrożenia do pakietu Driver 17, na przykład na msodbcsql17 Linuksie.
  5. Przywróć Encrypt wartości i TrustServerCertificate aplikacji, których używała sterownik 17. Sterownik 17 akceptuje tylko yes i no dla Encrypt oraz nie rozpoznaje słów kluczowych Sterownika 18, takich jak HostnameInCertificate lub ServerCertificate, więc usuwa wartości i słowa kluczowe dodane dla Sterownika 18. Zmień słowa kluczowe aliasów z powrotem na ich nazwy Driver 17 i zastąp ConnectTimeout je wywołaniem SQLSetConnectAttr , które ustawia SQL_ATTR_LOGIN_TIMEOUT. W przypadku mapowania zobacz słowa kluczowe New parametry połączenia.

Zweryfikowaj cofnięcie przed uznaniem go za zakończone:

  • Każde połączenie raportuje sterownik 17. Nazywaj SQLGetInfo z ; SQL_DRIVER_VERgłówna wersja to 17.
  • Ścieżki uwierzytelniania, zapytań, transakcji, kopiowania masowego, przełączania awaryjnego i ponownego próbowania aplikacji są skuteczne.
  • Łańcuchy połączeń i DSN nie zawierają Encrypt wartości ani słów kluczowych dodanych dla sterownika 18.

Nowe słowa kluczowe parametry połączenia

Wersja 18 dodaje następujące słowa kluczowe parametry połączenia, których wersja 17 nie rozpoznaje. Niektóre z nich to nowe nazwy dla ustawień obsługiwanych w wersji 17 pod innym słowem kluczowym lub atrybutem, wymienionymi w kolumnie odpowiednika wersji 17 .

Keyword Minimalna wersja Purpose Odpowiednik wersji 17
ConcatNullYieldsNull 18.6 Kontroluje, czy łączenie wartości zerowej daje wartość null. Żadne
ConnectTimeout 18.7 Ustawia czas logowania na kilka sekund. Jeśli aplikacja również ustawia SQL_ATTR_LOGIN_TIMEOUT, atrybut ma pierwszeństwo. SQL_ATTR_LOGIN_TIMEOUT atrybut, oparty z SQLSetConnectAttr
FailoverPartner 18.7 Określa partnera awaryjnego do mirrorowania baz danych. Tylko system Windows. Failover_Partner słowo kluczowe
GetDataExtensions 18,0 Kontroluje, które SQLGetData rozszerzenia umożliwia sterownik. Żadne
HostnameInCertificate 18,0 Określa nazwę hosta do weryfikacji w certyfikacie TLS serwera. Żadne
IpAddressPreference 18.1 Określa rodzinę adresów IP, którą sterownik próbuje jako pierwszy. Żadne
LongAsMax 18,0 Odwzorowuje długie typy danych na ich max odpowiedniki. Żadne
MultipleActiveResultSets 18.7 Umożliwia wiele aktywnych zestawów wyników (MARS). Akceptuje Yes lub No. MARS_Connection słowo kluczowe
RetryExec 18.1 Konfiguruje zasady powtórek dla nieudanych zapytań. Żadne
ServerCertificate 18.1 Określa plik certyfikatu do dopasowania do certyfikatu serwera przy użyciu Encrypt=Strict. Żadne
WorkstationID 18.7 Określa nazwę stacji roboczej wysyłaną do serwera. WSID słowo kluczowe

MultipleActiveResultSets, WorkstationID, oraz FailoverPartner są aliasami, które dorównują nazw słów kluczowych ODBC do Microsoft.Data.SqlClient nazw właściwości. Wersja 18 również akceptuje starsze nazwy. Szczegóły można znaleźć w Link string keyword unification oraz ConnectTimeout.

Pełne źródło słów kluczowych można znaleźć w ODBC DSN oraz słowach kluczowych parametry połączenia.