Поделиться через


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

Применимо:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azureazure Synapse Analytics AnalyticsPlatform System (PDW)

Внимание

SQL Server Native Client (SNAC) не поставляется с:

  • SQL Server 2022 (16.x) и более поздних версий
  • SQL Server Management Studio 19 и более поздних версий

Собственный клиент SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для разработки новых приложений.

Для новых проектов используйте один из следующих драйверов:

Сведения о 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 в конфигурации клиента не включена, сертификат подготовленного сервера по-прежнему требуется. В следующей таблице описываются все случаи:

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

Внимание

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

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

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

Дополнительные сведения о усовершенствованиях DBPROPSET_SQLSERVERDBINIT набора свойств см. в разделе "Инициализация" и "Свойства авторизации" (поставщик OLE DB собственного клиента).

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

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