Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
HostnameInCertificateważ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ąServerCertificatedopasowanie 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
- Łańcuchy połączeń w inwentarzu, DSN, odniesienia do pakietów oraz skrypty wdrożeniowe, które wybierają sterownik 17.
- Zainstaluj sterownik 18 w środowisku testowym odpowiadającym produkcyjnemu.
- Zmień
Driversłowo kluczowe w każdym parametry połączenia naODBC 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. - Ustaw
Encryptjawnie. UżywajEncrypt=Mandatoryz normalną walidacją certyfikatów. UżywajEncrypt=Stricttylko 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żyjEncrypt=Mandatory. - Dla normalnej weryfikacji należy połączyć się i
TrustServerCertificate=nozweryfikować 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;TrustServerCertificatejest ignorowane w trybie ścisłym. - Uruchom ścieżki uwierzytelniania, zapytań, transakcji, kopiowania masowego, failover i ponownych prób aplikacji.
- Przed traktowaniem błędów uwierzytelniania lub sieci przeanalizuj diagnostykę pod kątem błędów walidacji certyfikatów.
- 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.
- Potwierdź, że sterownik 17 jest nadal zainstalowany na każdym kliencie.
- Korzystając z inwentarza z listy kontrolnej aktualizacji, zmień
Driversłowo kluczowe w każdym parametry połączenia z powrotem na .ODBC Driver 17 for SQL Server - Zaktualizuj lub utworzy każdy DSN, aby używać sterownika 17.
- Przywróć odwołania do pakietów i skrypty wdrożenia do pakietu Driver 17, na przykład na
msodbcsql17Linuksie. - Przywróć
Encryptwartości iTrustServerCertificateaplikacji, których używała sterownik 17. Sterownik 17 akceptuje tylkoyesinodlaEncryptoraz nie rozpoznaje słów kluczowych Sterownika 18, takich jakHostnameInCertificatelubServerCertificate, 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ąpConnectTimeoutje wywołaniemSQLSetConnectAttr, które ustawiaSQL_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 to17. - Ś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ą
Encryptwartoś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.