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.

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 .

Podsumowanie zmian

Area Wersja 17 Wersja 18 i późniejsze wersje
Domyślne ustawienie Encrypt no yes
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 Nie dzieje się to, chyba że poprosisz o szyfrowanie Występuje domyślnie, ponieważ szyfrowanie jest domyślnie włączone
Słowa kluczowe parametrów połączenia Zestaw bazowy Zestaw bazowy plus nowe słowa kluczowe

Zmiany szyfrowania

Domyślne zachowanie szyfrowania

W wersji 17 połączenia nie są szyfrowane, chyba że poprosisz o szyfrowanie lub serwer tego wymaga. W wersjach 18 i późniejszych połączenia są domyślnie szyfrowane.

Ponieważ sterownik waliduje certyfikat serwera za każdym razem, gdy szyfruje połączenie, aplikacja, która łączy się z serwerem z certyfikatem podpisanym lub w inny sposób nieufnym, łączy się pomyślnie w wersji 17 i zawodzi z wersją 18. Błąd jest błędem walidacji certyfikatu, a nie błędem uwierzytelniania.

Masz trzy sposoby rozwiązania problemu, od najbardziej do najmniej bezpiecznych:

  • Zainstaluj certyfikat na serwerze, któremu klient ufa. Ta opcja jest zalecana i jedyna, która zachowuje zarówno szyfrowanie, jak i walidację.
  • Zachowaj szyfrowanie włączone i powiedz sterownikowi, którą nazwę ma zweryfikować, ustawiając HostNameInCertificate lub ServerCertificate.
  • Wyłącz szyfrowanie, aby przywrócić domyślną wersję 17, dodając Encrypt=no do parametry połączenia.

Caution

Ustawienie utrzymuje TrustServerCertificate=yes połączenie zaszyfrowane, ale wyłącza walidację certyfikatów, co naraża połączenie na ataki przeciwnika w środku. Wolę zaufany certyfikat.

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 Połączenie nie jest szyfrowane, chyba że serwer tego wymaga.
Strict Żadne Połączenie wykorzystuje szyfrowanie TDS 8.0.

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

Aby przywrócić domyślne zachowanie wersji 17, określ wyraźnie Encrypt :

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

Ustawianie wartości jawnie jest korzystne nawet w wersji 17, ponieważ powoduje, że parametry połączenia zachowuje się tak samo w obu wersjach.

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:

Keyword Purpose
ConcatNullYieldsNull Kontroluje, czy łączenie wartości zerowej daje wartość null.
GetDataExtensions Kontroluje, które SQLGetData rozszerzenia umożliwia sterownik.
HostNameInCertificate Określa nazwę hosta do weryfikacji w certyfikacie TLS serwera.
IpAddressPreference Określa rodzinę adresów IP, którą sterownik próbuje jako pierwszy.
LongAsMax Odwzorowuje długie typy danych na ich max odpowiedniki.
RetryExec Konfiguruje zasady powtórek dla nieudanych zapytań.
ServerCertificate Określa ścieżkę do pliku certyfikatu, aby zweryfikować serwer.

Poszczególne słowa kluczowe zostały wprowadzone w różnych wersjach wersji 18. Aby uzyskać wydanie wprowadzające każde słowo kluczowe oraz pełne odniesienie do słów kluczowych, zobacz ODBC DSN i słowa kluczowe parametry połączenia.