Использование шифрования без проверки в собственном клиенте SQL Server

Применимо к:SQL ServerAzure SQL DatabaseAzure Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Внимание

Собственный клиент SQL Server (часто сокращенный SNAC) был удален из SQL Server 2022 (16.x) и SQL Server Management Studio 19 (SSMS). Собственный клиент SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для разработки новых приложений. Перейдите на новый драйвер Microsoft OLE DB (MSOLEDBSQL) для SQL Server или последний драйвер Microsoft ODBC для SQL Server . Сведения о SQLNCLI, которые поставляется в качестве компонента ядра СУБД SQL Server (версии 2012–2019), см. в этом исключении жизненного цикла поддержки.

SQL Server всегда шифрует сетевые пакеты, связанные со входом в систему. Если сертификат не был предоставлен на сервере при запуске, SQL Server создает самозаверяющий сертификат, который используется для шифрования пакетов входа.

Самозаверяющие сертификаты не гарантируют безопасность. Зашифрованное подтверждение основывается на диспетчере NT LAN Manager (NTLM). Настоятельно рекомендуется предоставить SQL Server проверяемый сертификат для безопасного подключения. Протокол TLS можно защитить только с помощью проверки сертификата.

Приложения могут также запрашивать шифрование всего сетевого трафика путем использования ключевых слов строк соединения или свойств соединения. Ключевыми словами являются "Encrypt" для ODBC и OLE DB при использовании строки поставщика с IDbInitialize::Initialize, или "Использовать шифрование для данных" для ADO и OLE DB при использовании строки инициализации с IDataInitialize. Это также может быть настроено диспетчером конфигурации SQL Server с помощью параметра принудительного шифрования протокола, а также путем настройки клиента для запроса зашифрованных подключений. По умолчанию для шифрования всего сетевого трафика соединения требуется, чтобы сертификат присутствовал на сервере. Настроив на сервере доверие клиента к сертификату, вы можете стать уязвимыми для атак типа "злоумышленник в середине". Если вы устанавливаете проверяемый сертификат на сервер, убедитесь, что параметры клиента о доверии к сертификату изменено на FALSE.

Дополнительные сведения о ключевых словах строки подключения см. в разделе "Использование ключевых слов строки подключения" с собственным клиентом SQL Server.

Чтобы включить шифрование, используемое, если сертификат не подготовлен на сервере, диспетчер конфигурации SQL Server можно использовать для задания параметров шифрования протокола Принудительного шифрования и сертификата сервера доверия. В этом случае шифрование будет использовать самозаверяющий сертификат сервера, не проверяя наличия подтверждаемого сертификата сервера.

Приложения могут также использовать ключевое слово «TrustServerCertificate» или его атрибут связанного соединения, чтобы гарантировать применение шифрования. Параметры приложения никогда не снижают уровень безопасности, заданный диспетчером конфигурации клиента SQL Server, но могут укрепить его. Например, если параметр Принудительное шифрование протокола не установлен для клиента, приложение может само запросить шифрование. Чтобы гарантировать применение шифрования, даже если сертификат сервера не был предоставлен, приложение может запросить шифрование и ключевое слово «TrustServerCertificate». Однако если ключевое слово «TrustServerCertificate» не включено в конфигурации клиента, предоставление сертификата сервера по-прежнему необходимо. В следующей таблице описываются все случаи:

Параметр «Принудительное шифрование протокола» на клиенте Параметр «Доверять сертификату сервера» на клиенте Строка соединения или атрибут соединения «Шифрование/использовать шифрование для данных» Строка соединения или атрибут соединения «Надежный сертификат сервера» Результат
No Неприменимо Нет (по умолчанию) Пропущено Шифрование отсутствует.
No Н/Д Да Нет (по умолчанию) Шифрование применяется только при наличии подтверждаемого сертификата сервера, в противном случае попытка соединения завершается неудачно.
No Н/Д Да Да Шифрование производится всегда, однако при этом может использоваться самозаверяющий сертификат сервера.
Да No Пропущено Пропущено Шифрование применяется только при наличии подтверждаемого сертификата сервера, в противном случае попытка соединения завершается неудачно.
Да Да Нет (по умолчанию) Пропущено Шифрование производится всегда, однако при этом может использоваться самозаверяющий сертификат сервера.
Да Да Да Нет (по умолчанию) Шифрование применяется только при наличии подтверждаемого сертификата сервера, в противном случае попытка соединения завершается неудачно.
Да Да Да Да Шифрование производится всегда, однако при этом может быть использован самозаверяющий сертификат сервера.

Внимание

В приведенной выше таблице представлено только краткое описание поведения системы в различных конфигурациях. Чтобы подключение было безопасным, убедитесь, что для клиента и сервера требуется шифрование. Также убедитесь, что у сервера есть проверяемый сертификат и что параметр TrustServerCertificate на клиенте имеет значение FALSE.

Поставщик OLE DB для собственного клиента SQL Server

Поставщик OLE DB собственного клиента SQL Server поддерживает шифрование без проверки путем добавления свойства инициализации источника данных SSPROP_INIT_TRUST_SERVER_CERTIFICATE, которое реализуется в наборе свойств DBPROPSET_SQLSERVERDBINIT. Кроме того, добавлено новое ключевое слово строки соединения «TrustServerCertificate». Оно принимает значения «yes» и «no», значение по умолчанию — «no». При использовании компонентов службы оно принимает значения true и false, значение по умолчанию — false.

Дополнительные сведения об улучшениях, появившихся в наборе свойств DBPROPSET_SQLSERVERDBINIT, см. в статье Initialization and Authorization Properties (Свойства инициализации и авторизации).

Драйвер ODBC для собственного клиента SQL Server

Драйвер ODBC собственного клиента SQL Server поддерживает шифрование без проверки путем добавления функций SQLSetConnectAttr и SQLGetConnectAttr. Добавлен параметр SQL_COPT_SS_TRUST_SERVER_CERTIFICATE, который может принимать значения SQL_TRUST_SERVER_CERTIFICATE_YES или SQL_TRUST_SERVER_CERTIFICATE_NO, где SQL_TRUST_SERVER_CERTIFICATE_NO является значением по умолчанию. Кроме того, добавлено новое ключевое слово строки соединения «TrustServerCertificate». Оно принимает значения «yes» и «no», значение по умолчанию — «no».

См. также

Компоненты собственного клиента SQL Server