Сначала я хотел бы заявить, что вся заслуга принадлежит @Dan Guzman.Это его ответ / комментарий, который обеспечил решение.
Тем не менее, я хотел бы добавить некоторые сведения, основанные на исследовании, которое я провел после публикации моего вопроса.
Проблема в том, что Microsoftдокументация явно неверна.Пожалуйста, посмотрите на следующий документ:
https://docs.microsoft.com/en-us/sql/connect/oledb/applications/using-connection-string-keywords-with-oledb-driver-for-sql-server?view=sql-server-2017#table3_1
Он расположен в разделе SQL Server 2017 -> OLE DB -> Applications -> Using connection string keywords with OLE DB Driver for SQL server
, поэтому он должен быть правильным.Он состоит из трех разделов;в контексте этого вопроса нас интересует последняя таблица, потому что только эта относится к строкам соединения с ADO.
Эта последняя таблица явно показывает, что Authentication=SqlPawword
допустима в ADO / OLEСтроки подключения к БД (переформатирование мое, содержимое не изменено):
Аутентификация SSPROP_AUTH_MODE Указывает используемую аутентификацию SQL или Active Directory.Допустимые значения:
(not set)
: режим аутентификации определяется другими ключевыми словами.ActiveDirectoryPassword
: проверка подлинности Active Directory с использованием идентификатора входа и пароля.
ActiveDirectoryIntegrated
: встроенная проверка подлинности в Active Directory с использованием учетных данных учетной записи Windows, вошедших в систему.
ПРИМЕЧАНИЕ. Рекомендуется, чтобы приложения, использующие ключевые слова аутентификации Integrated Security (или Trusted_Connection) или их соответствующие свойства, устанавливали для ключевого слова Authentication (или его соответствующего свойства) значение ActiveDirectoryIntegrated, чтобы включить новое шифрование и проверку сертификата.
SqlPassword
: аутентификация с использованием идентификатора входа и пароля.
ПРИМЕЧАНИЕ: Рекомендуется, чтобы приложения, использующие аутентификацию SQL Server, устанавливали значение ключевого слова аутентификации (или его соответствующее свойство) равным SqlPassword, чтобы включитьновое поведение шифрования и проверки сертификата.
В нем также говорится (снова, мое форматирование, содержимое не изменено):
Сертификат доверенного сервера SSPROP_INIT_TRUST_SERVER_CERTIFICATE Принимает строки "true" и "false" в качестве значений.Значением по умолчанию является «false», что означает, что сертификат сервера будет проверен.
Каждый разумный человек поймет это в том смысле, что Trust Server Certificate=true
отключит проверку сертификата.
Но когда вы посмотрите здесь
https://docs.microsoft.com/en-us/sql/relational-databases/native-client/applications/using-connection-string-keywords-with-sql-server-native-client?view=sql-server-2017
, вы заметите, что этот документ структурирован так же, как и первый, и что последняя таблица не упоминаетпараметр Authentication
.
Однако этот документ находится в SQL Server 2017 -> Development -> SQL Server Native Client -> Applications -> Using Connection String Keywords
.Это означает, что это не относится к нашему случаю, поскольку относится к собственному клиенту сервера SQL (а не к OLE DB), но предоставляет правильную информацию.
Таким образом, у нас есть правильный документ, который предоставляет неверную информацию инеактуальный документ, который предоставляет правильную информацию.Поздравляем, Microsoft, вы снова заставили меня напрасно тратить целый день ...
Кроме того, я нашел следующий документ:
https://docs.microsoft.com/en-us/sql/connect/oledb/features/using-azure-active-directory?view=sql-server-2017#encryption-and-certificate-validation
Чтение заголовка («Использование Azure Active Directory»), оно должно относиться только к Azure.Тем не менее, я подозреваю, что следующий раздел также относится к локальным установкам SQL-сервера (мое форматирование, содержимое не изменено):
Проверка сертификата
Для повышения безопасности новые свойства соединенияКлючевые слова / относятся к параметру TrustServerCertificate (и соответствующим ключевым словам / свойствам строки подключения) независимо от параметра шифрования клиента.В результате сертификат сервера проверяется по умолчанию.
Примечание
Проверкой сертификата также можно управлять через поле Значение в HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSSQLServer \ Client \ SNI18.0 \Запись реестра GeneralFlags \ Flag2.Допустимые значения: 0 или 1. Драйвер OLE DB выбирает наиболее безопасный вариант между реестром и соединением.настройки свойств / ключевых слов.Таким образом, драйвер будет проверять сертификат сервера, если хотя бы один из параметров реестра / подключения разрешает проверку сертификата сервера.
Так что вполне возможно, что нам также придется изменить значения вреестра, чтобы окончательно отключить проверку сертификата при подключении к серверу SQL через ADO / OLE DB.