TDS 8.0

Область применения: SQL Server 2022 (16.x) База данных SQL Azure Управляемый экземпляр SQL Azure

SQL Server 2022 (16.x), База данных SQL Azure и Управляемый экземпляр SQL Azure поддерживают табличный поток данных (TDS) 8.0.

Протокол табличного потока данных (TDS) — это протокол уровня приложений, используемый клиентами для подключения к SQL Server. SQL Server использует TLS для шифрования данных, передаваемых через сеть между экземпляром SQL Server и клиентским приложением.

TDS — это безопасный протокол, но в предыдущих версиях SQL Server шифрование можно отключить или не включать. Для соответствия стандартам обязательного шифрования при использовании SQL Server было введено итерация протокола TDS: TDS 8.0.

Подтверждение TLS теперь предшествует любым сообщениям TDS, перенося сеанс TDS в TLS для принудительного шифрования, что обеспечивает согласованность TDS 8.0 с HTTPS и другими веб-протоколами. Это значительно способствует управлению трафиком TDS, так как стандартные сетевые (модуль) теперь могут фильтровать и безопасно передавать запросы SQL.

Еще одним преимуществом TDS 8.0 по сравнению с предыдущими версиями TDS является совместимость с TLS 1.3 и стандартами TLS. TDS 8.0 также полностью совместим с TLS 1.2 и предыдущими версиями TLS.

Принцип работы TDS

Протокол потока табличных данных (TDS) — это протокол уровня приложения, используемый для передачи запросов и ответов между клиентами и системами сервера базы данных. В таких системах клиент обычно устанавливает длительное подключение к серверу. После установки соединения с помощью протокола транспортного уровня сообщения TDS используются для обмена данными между клиентом и сервером.

Во время существования сеанса TDS существует три этапа:

  • Инициализация
  • Проверка подлинности
  • Обмен данными

Шифрование согласовывается на начальном этапе, однако согласование TDS происходит через незашифрованное подключение. Подключение SQL Server выглядит следующим образом для предыдущих версий к TDS 8.0:

➡️ Обмен данными TDS (cleartext) и ответ (cleartext) ➡️ ➡️ проверки подлинности (зашифрованных) ➡️ данных tls (может быть зашифрован или незашифрован)

С появлением TDS 8.0 соединения SQL Server будут следующими:

➡️ Подтверждение TCP-подтверждения TLS ➡️ предварительного журнала TDS (зашифровано) и ответ ➡️ (зашифрованная) проверка подлинности (зашифрованная) обмен данными (зашифрованная) (зашифрованная) обмен данными (зашифрованная) ➡️

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

Чтобы использовать TDS 8.0, SQL Server 2022 (16.x) добавлен strict в качестве дополнительного типа шифрования подключений к драйверам SQL Server (Encrypt=strict). Чтобы использовать strict тип шифрования подключения, скачайте последнюю версию драйверов .NET, ODBC, OLE DB, JDBC, PHP и Python.

Чтобы предотвратить атаку "человек в середине" с strict шифрованием подключения, пользователи не могут задать TrustServerCertificate параметр true и доверять любому сертификату, предоставленному сервером. Вместо этого пользователи будут использовать HostNameInCertificate параметр, чтобы указать сертификат ServerName , который должен быть доверенным. Сертификат, предоставленный сервером, должен пройти проверку сертификата.

Функции, не поддерживающие принудительное строгое шифрование

Параметр Force Strict Encryption , добавленный с TDS 8.0 в конфигурации сети SQL Server, заставляет всех клиентов использовать strict в качестве типа шифрования. Не удается подключиться к SQL Server любым клиентам или функциям без шифрования подключений strict .

Следующие функции или средства по-прежнему используют предыдущие версии драйверов, которые не поддерживают TDS 8.0, и, как это, может не работать с шифрованием strict подключения:

  • Группы доступности AlwaysOn
  • Экземпляр отказоустойчивого кластера AlwaysOn (FCI)
  • Репликация SQL Server
  • Доставка журналов
  • Служебная программа sqlcmd
  • bcp, программа
  • Служба CEIP SQL Server
  • Агент SQL Server
  • Database Mail
  • Связанные серверы
  • Соединитель Polybase для SQL Server

Дополнительные изменения в свойствах шифрования строки подключения

В строки подключения для шифрования добавляются следующие дополнения:

Ключевое слово По умолчанию. Description
Encrypt false Существующее поведение
Когда задано значение true, SQL Server использует шифрование TLS для всех данных, передаваемых между клиентом и сервером, если на сервере установлен сертификат Допустимые значения: true, false, yes и no. Дополнительные сведения см. в статье Синтаксис строки подключения.

Изменение поведения
Если задано значение strict, SQL Server использует TDS 8.0 для всех данных, которыми обменивается клиент и сервер.

Когда задано значение mandatory, true или yes, SQL Server использует TDS 7.x с шифрованием TLS/SSL для всех данных, передаваемых между клиентом и сервером, если на сервере установлен сертификат.

Если задано значение optional, false или no, подключение использует TDS 7.x и будет шифроваться только в том случае, если это требуется сервером SQL Server.
TrustServerCertificate false Существующее поведение
Установите значение true, чтобы драйвер не проверял TLS/SSL-сертификат сервера. Если значение равно true, TLS/SSL-сертификат сервера автоматически считается доверенным, когда для шифрования уровня связи используется TLS.

Если значение — false, то драйвер выполнит проверку TLS-сертификата сервера. Если проверка сертификата сервера завершается ошибкой, в работе драйвера будет вызвана ошибка и подключение будет закрыто. Значение по умолчанию — false. Для успешного установления TLS/SSL-подключения передаваемое в serverName значение должно в точности совпадать с Common Name (CN) или DNS-именем в Subject Alternate Name сертификата сервера.

Изменение поведения microsoft ODBC Driver 18 для SQL Server
Если для параметра Шифрование задано значение strict, этот параметр указывает расположение сертификата, используемого для проверки сертификата сервера (точное совпадение). Драйвер поддерживает расширения ФАЙЛОВ PEM, DER и CER.

Если для шифрования задано truefalseTrustServerCertificate значение или значение свойства не указано или задано nullзначение , trueили falseдрайвер использует ServerName значение свойства в URL-адресе подключения в качестве имени узла для проверки TLS/SSL-сертификата SQL Server.
HostNameInCertificate NULL Имя узла используется для проверки TLS/SSL-сертификата SQL Server. Если свойство HostNameInCertificate не задано или для него задано значение null, драйвер использует значение свойства ServerName в качестве имени узла для проверки сертификата TLS/SSL SQL Server.