Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: SQL Server 2022 (16.x) и более поздним версиям
Azure SQL Database
Azure SQL Управляемый экземпляр
SQL база данных в Microsoft Fabric
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 между клиентом и сервером SQL.
Во время существования сеанса TDS существует три этапа:
- Инициализация
- Проверка подлинности
- Обмен данными
Шифрование согласовывается на начальном этапе, однако согласование TDS происходит через незашифрованное подключение. Подключение SQL Server выглядит следующим образом для предыдущих версий к TDS 8.0:
TCP handshake ➡️ TDS преавторизация (в открытом виде) и ответ (в открытом виде) ➡️ TLS обмен ключами ➡️ проверка подлинности (зашифрована) ➡️ обмен данными (может быть зашифрован или оставаться в открытом виде)
С появлением TDS 8.0 соединения SQL Server будут следующими:
TCP рукопожатие ➡️ TLS рукопожатие ➡️ предварительная аутентификация TDS (зашифрована) и ответ (зашифрован) ➡️ аутентификация (зашифрована) ➡️ обмен данными (зашифрован)
Матрица совместимости для TDS, TLS, ОС и шифрования
Вы можете включить версии TLS 1.2 и TLS 1.3 на уровне ОС, что позволяет клиентским подключениям к SQL Server использовать несколько версий протоколов TDS (TDS 7.x и 8.0). В зависимости от версии ОС протокол TLS 1.2 и TLS 1.3 можно включить по умолчанию.
Только TDS 7.x поддерживает нешифрованное (необязательное) взаимодействие, TDS 8.0 не поддерживает это. TDS 7.x поддерживает шифрование с помощью TLS до версии 1.2. Для TDS 8.0 требуется шифрование— все это всегда шифруется с помощью TDS 8.0 (Encrypt=Strict). TDS 8.0 не требует минимальной версии TLS и поддерживает TLS 1.3. Поддержка TLS 1.3 зависит от версии операционной системы. В следующей таблице приведены различные сценарии с параметрами шифрования и соответствующими версиями TLS и TDS.
| Шифрование Опция |
Версия TLS включена | Версия ОС | Ожидаемый connection результат |
Примечания. |
|---|---|---|---|---|
| Строгий | Только TLS 1.3 (или более поздней версии) | Windows 11 Windows Server 2022 г. и более поздних версий |
Success | Согласованный протокол TLS 1.3; Триггер TDS 8.0 (Encrypt=Strict) |
| Строгий | TLS 1.2 и TLS 1.3 | Windows 11 Windows Server 2022 г. и более поздних версий |
Success | Согласованный протокол TLS 1.3; Триггер TDS 8.0 (Encrypt=Strict) |
| Строгий | Только TLS 1.2 (или более ранние версии) | Windows 11 Windows Server 2022 г. и более поздних версий |
Success | Согласованный протокол TLS 1.2; Триггер TDS 8.0 (Encrypt=Strict) |
| Строгий | Только TLS 1.2 (или более ранние версии) | Windows 10 Windows Server 2019 / 2016 |
Success | Согласованный протокол TLS 1.2; Триггер TDS 8.0 (tls 1.3 недоступен) |
| Mandatory | Только TLS 1.3 (или более поздней версии) | Windows 11 Windows Server 2022 г. и более поздних версий |
Failure | "Encrypt=Mandatory" несовместимо с TLS 1.3 для TDS 8.0 |
| Mandatory | TLS 1.2 и TLS 1.3 | Windows 11 Windows Server 2022 г. и более поздних версий |
Success | Согласованный протокол TLS 1.2; TDS 8.0 не активируется (Encrypt=Обязательный) |
| Mandatory | Только TLS 1.2 (или более ранние версии) | Windows 11 Windows Server 2022 г. и более поздних версий |
Success | Согласованный протокол TLS 1.2; TDS 8.0 не активируется (Encrypt=Обязательный) |
| Mandatory | Только TLS 1.2 (или более ранние версии) | Windows 10 Windows Server 2019 / 2016 |
Success | Согласованный протокол TLS 1.2; TDS 8.0 не поддерживается в этой ОС (использует TDS 7.x) |
| Необязательно | Только TLS 1.3 (или более поздней версии) | Windows 11 Windows Server 2022 г. и более поздних версий |
Failure | Encrypt=необязательно (false) — это TDS 7.x, который несовместим с TLS 1.3. |
| Необязательно | TLS 1.2 и TLS 1.3 | Windows 11 Windows Server 2022 г. и более поздних версий |
Success | Согласованный протокол TLS 1.3; TDS 8.0 не активируется (Encrypt=Необязательный) |
| Необязательно | Только TLS 1.2 (или более ранние версии) | Windows 11 Windows Server 2022 г. и более поздних версий |
Success | Согласованный протокол TLS 1.2; TDS 8.0 не активируется (Encrypt=Необязательный) |
| Необязательно | Только TLS 1.2 (или более ранние версии) | Windows 10 Windows Server 2019 / 2016 |
Success | Согласованный протокол TLS 1.2; необязательное шифрование; подключение может успех без шифрования |
| Любое | Только TLS 1.3 (или более поздней версии) | Windows 10 Windows Server 2019 / 2016 |
Failure | TLS 1.3 не поддерживается в этой ОС |
Дополнительные сведения о том, как клиенты используют разные версии TDS, см. в разделе "Изменения в свойствах шифрования строки подключения ".
Поддержка SQL Server 2025
SQL Server 2025 (17.x) предоставляет поддержку TDS 8.0 для следующих средств командной строки и функций SQL Server:
- Агент SQL Server
- служебная программа sqlcmd
- утилита bcp
- Средство записи VSS SQL
- Служба CEIP SQL
- Database Mail
- Polybase
- Группы доступности AlwaysOn
- Экземпляр отказоустойчивого кластера AlwaysOn (FCI)
- Связанные серверы1
- Репликация транзакций1
- Слияние репликации1
- Снимковая репликация1
- Доставка журналов1
1Поддержка TDS 8.0 содержит критические изменения этих функций.
Строгое шифрование подключения
Чтобы использовать TDS 8.0, в SQL Server 2022 (16.x) был добавлен strict в качестве дополнительного параметра шифрования подключений в драйверах SQL Server (Encrypt=strict). Чтобы использовать strict тип шифрования подключения, скачайте последнюю версию драйверов .NET, ODBC, OLE DB, JDBC, PHP и Python:
- Microsoft ADO.NET для SQL Server и Azure SQL Database версии 5.1 или более поздней
- Драйвер ODBC для SQL Server версии 18.1.2.1 или более поздней
- Microsoft OLE DB Driver for SQL Server версии 19.2.0 или более поздней
- Microsoft JDBC Driver for SQL Server версии 11.2.0 или более поздней
- Драйверы Майкрософт для PHP для SQL Server версии 5.10 или более поздней
- Драйвер SQL Python — mssql-python
Для предотвращения атаки «человек в середине» с использованием strict шифрования подключения пользователи не могут установить параметр TrustServerCertificate на true и разрешить любой сертификат, предоставленный сервером. Вместо этого пользователи будут использовать HostNameInCertificate параметр, чтобы указать сертификат ServerName , который должен быть доверенным. Сертификат, предоставленный сервером, должен пройти проверку сертификата. Дополнительные сведения о проверке сертификатов см. в разделе "Требования к сертификату" для SQL Server
Дополнительные изменения в свойствах шифрования строки подключения
Следующие параметры добавляются в строки подключения для шифрования связи:
| Ключевое слово | По умолчанию. | Описание |
|---|---|---|
Encrypt |
ложный |
Предыдущие параметры строки подключения Допустимые параметры - trueили yes - false, или no. Дополнительные сведения см. в статье Синтаксис строки подключения. Когда trueSQL Server использует шифрование TLS 1.2 для всех данных, передаваемых между клиентом и сервером, если у сервера установлен сертификат.Последние параметры строки подключения Допустимые параметры - strict - , mandatory или true, или yes - optional, или , или falseno. Если задано значение 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 |
ложный |
Предыдущий параметр строки подключения Если задано true значение (не рекомендуется), драйвер не проверяет сертификат TLS/SSL сервера. Если trueсервер TLS/SSL-сертификат автоматически является доверенным (обход проверки) при шифровании уровня связи с помощью TLS.Если значение — false, то драйвер выполнит проверку TLS-сертификата сервера. Если проверка сертификата сервера завершается ошибкой, драйвер выдает ошибку и закрывает подключение. Значение по умолчанию — false. Для успешного установления TLS/SSL-подключения передаваемое в serverName значение должно в точности совпадать с Common Name (CN) или DNS-именем в Subject Alternate Name сертификата сервера.Изменение поведения драйвера ODBC Microsoft SQL Server версии 18 и более поздних Если Encrypt задано значение strict, этот параметр указывает расположение сертификата, используемого для проверки сертификата сервера (точное соответствие). Драйвер поддерживает расширения ФАЙЛОВ PEM, DER и CER.Если Encrypt установлено на true или false, а свойство TrustServerCertificate не указано или установлено на null, true или false, драйвер использует значение свойства ServerName в URL-адресе подключения в качестве имени хоста для проверки сертификата TLS/SSL SQL Server. |
HostNameInCertificate |
null |
Имя узла используется для проверки TLS/SSL-сертификата SQL Server. Если свойство HostNameInCertificate не указано или задано null, драйвер использует значение свойства ServerName в качестве имени узла для проверки сертификата TLS/SSL сервера SQL. |