Бөлісу құралы:


Основные отличия версий

В этой статье описываются критические изменения между microsoft OLE DB Driver 19 для SQL Server и более ранними версиями.

Подсказка

MSOLEDBSQL19 (Microsoft OLE DB Driver 19 для SQL Server) — это текущий рекомендуемый драйвер OLE DB. Она поддерживает TDS 8.0 и современные функции безопасности. Версия 19.2.0+ также поддерживает TLS 1.3. Используйте Provider=MSOLEDBSQL19 в строках подключения.

Сводка изменений

Area Версия 18 и более ранняя Версия 19+
Параметр шифрования по умолчанию (Encrypt) no (шифрование или сервер не может требовать шифрования) Mandatory (требуется шифрование)
Encrypt Тип свойства VT_BOOL VT_BSTR
Encrypt допустимые значения no/yes no/yes/true/false/Optional/Mandatory/Strict
Проверка сертификата Пропущено, когда наборы клиентов Encrypt=no Всегда вычисляется при возникновении шифрования
Имя драйвера MSOLEDBSQL MSOLEDBSQL19
CLSID MSOLEDBSQL_CLSID (устаревшая версия) MSOLEDBSQL_CLSID (обновлено в заголовке)

Предупреждение

Проверка подлинности ActiveDirectoryPassword не рекомендуется. Если вы выполняете миграцию с версии 18 до 19 и используете Authentication=ActiveDirectoryPassword, планируйте переход на более безопасный метод проверки подлинности. Для альтернативных вариантов см. нерекомендуемые методы проверки подлинности .

Изменения свойств шифрования

Изменение типа свойства encrypt

Свойство драйвера SSPROP_INIT_ENCRYPT изменяется на VT_BOOLVT_BSTR.

строка подключения Значения версии 18 Значения версии 19
Поставщик: Encrypt no/yes no/yes/true/false/Optional/Mandatory/Strict
IDataInitialize: Use Encryption for Data true/false no/yes/true/false/Optional/Mandatory/Strict

Сопоставление значений:

Mode Эквивалентные значения Поведение
Optional no, false Незашифрованный, если сервер не требует его
Mandatory (по умолчанию) yes, true Обязательное зашифрованное подключение
Strict (нет эквивалента) Шифрование TDS 8.0; требуется SQL Server 2022+

Подсказка

Начиная с версии 19.2.0 подключения TDS 8.0 могут использовать TLS 1.3 при подключении к SQL Server 2022 или более поздней версии. Свойство ServerCertificate также было добавлено в этой версии. Дополнительные сведения см. в разделе поддержки TLS 1.3.

Для обратной совместимости версия 19 принимает все значения версии 18 (yes/no) в дополнение к новым значениям ().Optional/Mandatory/Strict

Поведение шифрования по умолчанию

Версия По умолчанию Result
18 и более ранних версий no Подключения, незашифрованные по умолчанию
19+ Mandatory Подключения, зашифрованные по умолчанию

Чтобы восстановить поведение версии 18, добавьте один из следующих параметров в строку подключения:

  • Поставщик: Encrypt=Optional;
  • IDataInitialize: Use Encryption for Data=Optional;

Поведение проверки сертификата

Scenario Версия 18 Версия 19+
Наборы Encrypt=noклиентов, сервер не принудительно шифруется Проверка отсутствует Проверка отсутствует
Наборы Encrypt=noклиентов, принудительное шифрование сервера Trust Server Certificate Игнорировать Trust Server Certificate Оценены
Клиентские наборы Encrypt=yes Trust Server Certificate Оценены Trust Server Certificate Оценены

Заметки о совместимости

Клиенты версии 19, использующие параметры по умолчанию, не могут подключаться, когда сервер принудительно шифрует и использует ненадежный сертификат. Обновите Trust Server Certificate параметр или используйте доверенный сертификат.

TrustServerCertificate не был удален в версии 19. Этот параметр по-прежнему работает. Версия 18 игнорирует этот параметр, если Encrypt задано noзначение , даже если сервер принудительно шифровался. Версия 19 теперь оценивается TrustServerCertificate во всех зашифрованных сценариях.

Драйвер версии 19 до 19.4.1 имел проблему установщика, которая могла задать TrustServerCertificate параметр no реестра в системах, которые ранее установили версию 18. При возникновении этой проблемы драйвер будет использовать более безопасный параметр реестра, что может привести к отсутствии влияния параметров строки подключения. Эта проблема устранена в версии 19.4.1. Новая установка версии 19 (без версии 18) всегда правильно использует параметр yesреестра. Дополнительные сведения см. в параметрах реестра.

Формат ключевого слова отличается по интерфейсу:

  • Строки подключения поставщика не используют пробелы: TrustServerCertificate=yes;
  • Строки подключения IDataInitialize используют пробелы: Trust Server Certificate=yes;

Дополнительные сведения см. в разделе "Шифрование и проверка сертификатов" в OLE DB.

Параметры реестра для принудительного шифрования протокола

Параметр реестра принудительного шифрования протоколов использует числовые значения, сопоставленные с режимами шифрования:

Значение реестра Режим шифрования Description
0 Optional Шифрование только в том случае, если требуется сервер
1 Mandatory Требуется шифрование
2 Strict Шифрование TDS 8.0

Драйвер использует самый безопасный параметр между параметром реестра и свойством подключения. Сведения о расположениях разделов реестра см. в разделе "Параметры реестра".

Изменение имени водителя

Версия 19 поддерживает параллельное установку с версией 18. Имя драйвера включает основной номер версии для различения.

Интерфейс Версия 18 Версия 19
Ключевое слово поставщика MSOLEDBSQL MSOLEDBSQL19
Константы CLSID MSOLEDBSQL_CLSID MSOLEDBSQL_CLSID (обновлено в msoledbsql.h)
Отображаемое имя пользовательского интерфейса Драйвер Microsoft OLE DB для SQL Server Microsoft OLE DB Driver 19 for SQL Server

Шаги миграции

  1. Включите обновленный msoledbsql.h заголовок в проект.
  2. Для IDBInitialize: изменения не требуются (CLSID обновлен в заголовке).
  3. Для IDataInitialize: изменение Provider=MSOLEDBSQLProvider=MSOLEDBSQL19.
  4. Для средств пользовательского интерфейса (SSMS, свойства канала данных): выберите Microsoft OLE DB Driver 19 для SQL Server.

Примеры строк подключения

Версия 18 (до):

Provider=MSOLEDBSQL;Server=myserver;Database=mydb;Trusted_Connection=yes;

Версия 19 (после):

Provider=MSOLEDBSQL19;Server=myserver;Database=mydb;Trusted_Connection=yes;

Версия 19 с явными параметрами шифрования:

Provider=MSOLEDBSQL19;Server=myserver;Database=mydb;Encrypt=Mandatory;TrustServerCertificate=no;

Версия 19 с строгим шифрованием (TDS 8.0):

Provider=MSOLEDBSQL19;Server=myserver;Database=mydb;Encrypt=Strict;ServerCertificate=C:\certs\server.cer;

Новые свойства версии 19

Версия 19 содержит свойства для расширенной проверки сертификатов с Strict помощью режима шифрования.

HostNameInCertificate (версия 19.0.0+)

Указывает имя узла для проверки на основе TLS/SSL-сертификата сервера. Используйте это свойство, если имя сервера в строке подключения отличается от общего имени сертификата (CN) или альтернативного имени субъекта (SAN).

Интерфейс Недвижимость
Ключевое слово поставщика HostNameInCertificate
Ключевое слово IDataInitialize Host Name In Certificate
Свойство OLE DB SSPROP_INIT_HOST_NAME_CERTIFICATE

Замечание

Это свойство игнорируется при Trust Server Certificate включении. Когда Encrypt=Strictсертификат всегда проверяется.

ServerCertificate (версия 19.2.0+)

Указывает путь к файлу сертификата (PEM, DER или CER-формату) для точного сопоставления сертификатов. Драйвер сравнивает этот сертификат с сертификатом сервера во время подтверждения TLS.

Интерфейс Недвижимость
Ключевое слово поставщика ServerCertificate
Ключевое слово IDataInitialize Server Certificate
Свойство OLE DB SSPROP_INIT_SERVER_CERTIFICATE

Это важно

ServerCertificate можно использовать только в том случае Encrypt=Strict. Попытка использовать его с Mandatory или Optional шифрованием приводит к ошибке подключения.

Устаревшие методы проверки подлинности

ActiveDirectoryPassword

Метод ActiveDirectoryPassword проверки подлинности (проверка подлинности пароля идентификатора Microsoft Entra ID) не рекомендуется. Эта проверка подлинности основана на предоставлении учетных данных пароля владельца ресурса OAuth 2.0 (ROPC), которое несовместимо с многофакторной проверкой подлинности (MFA) и представляет риски для безопасности.

Предупреждение

Корпорация Майкрософт отойдет от этого потока проверки подлинности с высоким риском, чтобы защитить пользователей от вредоносных атак. Перед удалением этого параметра планируйте миграцию в более безопасный метод проверки подлинности. Дополнительные сведения см. в статье "Планирование обязательной многофакторной проверки подлинности для Azure".

Scenario Рекомендуемая проверка подлинности Ключевое слово строки подключения
Интерактивный контекст пользователя Многофакторная проверка подлинности Authentication=ActiveDirectoryInteractive
Приложение, работающее в Azure Управляемая идентичность Authentication=ActiveDirectoryMSI
Служба или управляющая программа без пользователя Служебный принципал Authentication=ActiveDirectoryServicePrincipal

Дополнительные сведения см. в разделе "Использование идентификатора Microsoft Entra".

Устранение неполадок

Сбой подключения с ошибкой проверки сертификата

Симптом. Подключение завершается ошибкой проверки сертификата или сообщением о недоверенном сертификате.

Причина: по умолчанию версии 19 требуется Encrypt=Mandatoryдействительный сертификат сервера. По умолчанию Encrypt=no версия 18 (незашифрована).

Solutions:

  • Рекомендуется установить доверенный сертификат на сервере.
  • Только разработка: добавьте TrustServerCertificate=yes; в строку подключения (не рекомендуется для рабочей среды).
  • Резервный вариант: добавление Encrypt=Optional; в поведение восстановления версии 18 (снижает безопасность).

Сбой подключения с параметром "Сертификат сервера можно использовать только с строгим шифрованием".

Симптом: подключение завершается сбоем ServerCertificate при использовании свойства.

Причина: ServerCertificate для свойства требуется Encrypt=Strict.

Решение: удалите ServerCertificate из строки подключения или измените его Encrypt=Strict;.

Приложение получает ошибку VT_BOOL при настройке свойства Encrypt

Симптом: установка SSPROP_INIT_ENCRYPT логического значения завершается ошибкой.

Причина: версия 19 изменила тип свойства на VT_BOOLVT_BSTR.

Решение: используйте строковые значения ("Mandatory", , "Optional""Strict", "yes", ) "no"вместо логических значений.

Поставщик не найден после обновления

Симптом: приложение завершается ошибкой "Поставщик не найден" или аналогичной ошибкой.

Причина: версия 19 использует другое имя поставщика (MSOLEDBSQL19).

Solutions:

  • Обновите строку подключения от Provider=MSOLEDBSQL .Provider=MSOLEDBSQL19
  • Включите обновленный msoledbsql.h заголовок при использовании IDBInitialize с CLSID.