Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описываются резкие изменения между Microsoft ODBC Driver 18 for SQL Server и версией 17. Используйте его при выборе версии драйвера, обновлении приложения с версии 17 до версии 18 или при необходимости сделать так, чтобы строка подключения работала одинаково в обеих версиях.
Большинство приложений, которые обновляются с версии 17 до версии 18, подвергаются одному изменению: соединения по умолчанию шифруются. Если ваше приложение перестаёт подключаться после обновления, сначала прочитайте стандартное поведение шифрования .
Выберите версию 17 или версию 18
Драйвер 18 — это текущая основная версия. Драйвер 17 остаётся поддерживаемым, но приложениям, использующим его, всё ещё требуется последняя незначительная версия линейки Driver 17 для получения исправлений. Для даты поддержки и правил обслуживания см. Жизненный цикл поддержки.
| Scenario | Рекомендуемый путь |
|---|---|
| Новое применение | Начните с драйвера 18. Настройте шифрование и проверку сертификатов перед производством. |
| Существующее приложение Driver 17 | Установите драйвер 18 вместе с драйвером 17, измените имя драйвера в строка подключения или DSN и Encrypt установите его явно. Если проверка сертификата не проходит, исправьте серверный сертификат или хранилище доверия клиента. |
Приложение, которому требуется Encrypt=Strict, HostnameInCertificate, RetryExec, или другое ключевое слово Драйвера 18 |
Используйте релиз Driver 18, который поддерживает эту настройку. Водитель 17 не принимает Strict значение и Encrypt не распознаёт новые ключевые слова. |
Приложение, требующее закрепления сертификатного файла с помощью ServerCertificate |
Используйте драйвер 18.1 или более позднюю версию с Encrypt=Strict. Драйвер 17 не поддерживает эту настановку. |
Смена основных версий обычно означает изменение выбранного вами имени драйвера или пакета:
| Platform | Пилот 17 | Driver 18 |
|---|---|---|
| Имя драйвера строки соединения | ODBC Driver 17 for SQL Server |
ODBC Driver 18 for SQL Server |
| Название пакета Linux | msodbcsql17 |
msodbcsql18 |
Сводка изменений
Строки по умолчанию и проверки описывают обычные удалённые соединения без настройки DSNEncrypt, атрибута SQL_COPT_SS_ENCRYPT или переопределения протокола Windows Force Encryption. LocalDB не является удалённой целью для TLS.
| Area | Версия 17 | Версия 18 и более поздние версии |
|---|---|---|
Настройка по умолчанию Encrypt |
no, если Authentication не установлено в значение, отличное от none или применение множества SQL_COPT_SS_ACCESS_TOKEN; тогда yes |
yes (18.0.1 и далее) |
Encrypt Принятые значения |
yes, no |
yes, no, Mandatory, Optional, Strict |
| Режимы шифрования | Без или включённых | Выключенный, включённый или строгий |
| Проверка сертификата сервера | С , валидирует Encrypt=yes;TrustServerCertificate=noсертификат. Только шифрование, требуемое сервером, не определяет валидацию. |
По умолчанию валидируется. В режимах без строгих пропускает TrustServerCertificate=yes обычную валидацию, включая случаи, когда серверу требуется шифрование. |
| Ключевые слова в строке подключения | Базовый набор | Базовый набор плюс новые ключевые слова |
Изменения шифрования
Поведение шифрования по умолчанию
Драйвер 17 по умолчанию не Encrypt=no устанавливает значение, кроме Authentication того, что ключевое слово не назначено на значение, отличное none от приложения SQL_COPT_SS_ACCESS_TOKEN . Любой из них меняет значение по умолчанию на yes. Explicit Encrypt=no всё равно отключает шифрование. Драйвер 18.0.1 и более поздние по умолчанию — Encrypt=yes. Устанавливайте Encrypt это явно при сравнении версий.
Полное шифрование соединения защищает текст запроса и результаты, а также сам вход. С Encrypt=no, сервер всё ещё может требовать полное шифрование соединения. Когда и клиент, и сервер отключают шифрование, нестрогие переговоры используют шифрование только для входа; это не защищает данные последующих приложений.
При Encrypt=yes;TrustServerCertificate=no, оба драйвера выбирают обычную проверку сертификатов сервера. Если только серверу требуется полное шифрование соединения ( TrustServerCertificate=no по умолчанию), Драйвер 18 проверяет сертификат. В TrustServerCertificate=yes режиме вне строгого режима драйвер 18 пропускает эту валидацию. Драйвер 17 не проходит валидацию только из-за требования к серверу.
Шифрование протокола Windows Force и внутренние пути обратного вызова для проверки сертификатов не учитываются в этом сравнении.
При стандартных настройках шифрования обновление с версии 17 до версии 18 может выявить ненадёжный серверный сертификат. Если версия 18 отклоняет сертификат, перед изменением настроек аутентификации диагностируйте цепочку и имя сертификатов.
Оставляйте включёнными шифрование и проверку идентичности сервера:
- Настройте действительный серверный сертификат и хранилище доверия клиента так, чтобы клиент доверял своему выдачу сертификата. Подключитесь с помощью имени, указанного в сертификате.
- Если вы подключаетесь через псевдоним, установите
HostnameInCertificateимя в сертификате сервера. Эта настройка не восстанавливает ненадёжную цепочку сертификатов. - Для
Encrypt=Strict, драйвер 18.1 и более поздние версии также поддерживаютServerCertificateсопоставление серверного сертификата с файлом сертификата. Эта настройка закрепляет сертификат; оно не указывает имя хоста. Изучите его ограничения в ODBC DSN и ключевых словах строка подключения перед использованием.
Предостережение
Для изолированной тестовой среды запрос Encrypt=yes;TrustServerCertificate=yes на шифрование, но пропускает проверку идентичности сервера, оставляя соединение открытым для атак противника посередине. Не используйте это как ремонт производственного траста. В строгом режиме TrustServerCertificate игнорируется.
Если существующее приложение требует стандартное значение версии 17 во время контролируемого теста совместимости, см. Восстановить поведение шифрования версии 17.
Encrypt=no и Encrypt=optional не восстанавливайте доверительные данные сертификатов, оставляя данные приложения незашифрованными.
Значения шифрования
Версия 17 принимает только yes и no. Версия 18 и более поздние версии принимают эти значения и добавляют ещё три:
| Ценность | Эквивалентно | Behavior |
|---|---|---|
Mandatory |
yes |
Соединение зашифровано. |
Optional |
no |
Не требует полного шифрования соединения. Сервер всё ещё может потребовать его; шифрование только для входа не является защитой всей сессии. |
Strict |
Нет | Соединение использует шифрование TDS 8.0. Сервер должен поддерживать TDS 8.0, такие как SQL Server 2022 и более поздние версии. |
Strict у него нет аналога версии 17. Это единственное значение, которое выбирает TDS 8.0, где шифрование обсуждается до момента обмена входом, а не во время входа.
Восстановить поведение шифрования версии 17
После просмотра исправлений доверия используйте следующую натуру только для контролируемого теста совместимости, позволяющего использовать незашифрованные данные приложений:
Encrypt=no
Драйвер 18 также принимает Encrypt=optional для этой настройки. Ни одно из этих значений не мешает серверу требовать шифрования. Восстановить запланированную зашифрованную конфигурацию после теста; не использовать отключённое шифрование как средство для доверия сертификатов.
Контрольный список для обновления
- Инвентаризуйте строки соединения, DSN, ссылки на пакеты и скрипты развертывания, выбирающие драйвер 17.
- Установите драйвер 18 в тестовой среде, соответствующей продакшену.
- Измените ключевое
Driverслово в каждой строка подключения наODBC Driver 18 for SQL Server, а также обновите или создайте каждый DSN для использования драйвера 18. Установка Драйвера 18 не меняет существующие соединения, потому что соединения с именем Драйвер 17 продолжают использовать Драйвер 17. - Задать
Encryptявно. ИспользуйтеEncrypt=Mandatoryс обычной валидацией сертификатов. ИспользуйтеEncrypt=Strictтолько если сервер поддерживает TDS 8.0, например, SQL Server 2022 и более поздние версии. Для серверов, которые не поддерживают TDS 8.0, используйтеEncrypt=Mandatory. - Для обычной проверки подключитесь к
TrustServerCertificate=noдоверенной цепочке и принятому имени сервера и проверьте её. Для Driver 18.1 и более поздних версий с строгим закреплением файлов проверяйте точное совпадение сертификата и даты действительности;TrustServerCertificateигнорируется в строгом режиме. - Запустите пути аутентификации, запроса, транзакции, массового копирования, отказа и повторной попытки.
- Проверьте диагностику ошибок проверки сертификатов перед тем, как рассматривать сбои как ошибки аутентификации или сети.
- Держите драйвер 17 установленным и ведите инвентарь с шага 1 до завершения валидации, чтобы можно было вернуться к версии 17.
Вернуться к версии 17
Драйверы 17 и 18 устанавливаются рядом, так что можно откатиться назад, не удаляя драйвер 18. Для информации о загрузке и установке см. раздел «Скачать драйвер ODBC для SQL Server».
- Убедитесь, что драйвер 17 всё ещё установлен на каждом клиенте.
- Используя инвентарь из чек-листа обновления, измените
Driverключевое слово в каждой строка подключения обратно наODBC Driver 17 for SQL Server. - Обновите или заново создайте каждый DSN для использования Драйвера 17.
- Отменить ссылки на пакеты и скрипты развертывания в пакет Driver 17, например
msodbcsql17, на Linux. - Восстановите
Encryptзначения иTrustServerCertificateзначения, которые приложение использовало с Драйвером 17. Драйвер 17 принимает толькоyesиnoдляEncryptи не распознаёт ключевые слова Драйвера 18, такие какHostnameInCertificateилиServerCertificate, поэтому удалите добавленные значения и ключевые слова для Драйвера 18. Измените ключевые слова псевдонимов обратно на имена Driver 17 и заменитеConnectTimeoutих вызовомSQLSetConnectAttr, который устанавливаетSQL_ATTR_LOGIN_TIMEOUT. Для отображения см. ключевые слова New строка подключения.
Проверьте откат, прежде чем считать его полным:
- Каждое соединение сообщает о драйвере 17. Вызовите SQLGetInfo с
SQL_DRIVER_VER; основная версия —17. - Пути аутентификации, запроса, транзакции, массового копирования, резервирования и повторной попытки в приложении проходят успешно.
- Строки соединения и DSN не
Encryptсодержат значений или ключевых слов, добавленных для драйвера 18.
New строка подключения keywords
Версия 18 добавляет следующие ключевые слова строка подключения, которые версия 17 не распознаёт. Некоторые из них — это новые названия настроек, которые версия 17 поддерживает под другим ключевым словом или атрибутом, указанным в эквивалентном столбце версии 17 .
| Keyword | Минимальная версия | Purpose | Эквивалент версии 17 |
|---|---|---|---|
ConcatNullYieldsNull |
18.6 | Определяет, приводит ли конкатенация нулевого значения к null. | Нет |
ConnectTimeout |
18.7 | Устанавливает тайм-аут входа за секунды. Если приложение также устанавливает SQL_ATTR_LOGIN_TIMEOUT, атрибут имеет приоритет. |
SQL_ATTR_LOGIN_TIMEOUT атрибут, set с SQLSetConnectAttr |
FailoverPartner |
18.7 | Указывает резервного партнёра для зеркалирования базы данных. Только для Windows. |
Failover_Partner ключевое слово |
GetDataExtensions |
18,0 | Управляет, какие SQLGetData расширения включают драйвер. |
Нет |
HostnameInCertificate |
18,0 | Указывает имя хоста для проверки в TLS-сертификате сервера. | Нет |
IpAddressPreference |
18.1 | Указывает семейство IP-адресов, которое драйвер пробует первым. | Нет |
LongAsMax |
18,0 | Отображает длинные типы данных с их max эквивалентами. |
Нет |
MultipleActiveResultSets |
18.7 | Включает несколько активных наборов результатов (MARS). Принимает Yes или No. |
MARS_Connection ключевое слово |
RetryExec |
18.1 | Настраивает правила повтора для неудачных запросов. | Нет |
ServerCertificate |
18.1 | Задаёт файл сертификата для сопоставления с серверным сертификатом при использовании Encrypt=Strict. |
Нет |
WorkstationID |
18.7 | Указывает имя рабочей станции, отправляемое на сервер. |
WSID ключевое слово |
MultipleActiveResultSets, WorkstationID, и FailoverPartner являются псевдонимами, которые выравнивают имена ключевых слов ODBC с Microsoft.Data.SqlClient именами свойств. Версия 18 также принимает старые названия. Для подробностей см. Объединение ключевых слов строк соединения и ключевое слово ConnectTimeout.
Для полной ссылки на ключевые слова см. ключевые слова ODBC DSN и строка подключения.