Partilhar via


TDS 8,0

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores Azure SQL Database AzureSQL Managed InstanceSQL database in Microsoft Fabric

O SQL Server 2022 (16.x), o Banco de Dados SQL do Azure e a Instância Gerenciada SQL do Azure oferecem suporte ao Fluxo de Dados Tabulares (TDS) 8.0.

O protocolo TDS (Tabular Data Stream) é um protocolo de camada de aplicativo usado por clientes para se conectar ao SQL Server. O SQL Server usa TLS (Transport Layer Security) para criptografar dados transmitidos por uma rede entre uma instância do SQL Server e um aplicativo cliente.

O TDS é um protocolo seguro, mas em versões anteriores do SQL Server, a criptografia podia ser desativada ou não habilitada. Para atender aos padrões de criptografia obrigatória ao usar o SQL Server, uma iteração do protocolo TDS foi introduzida: TDS 8.0.

O handshake TLS agora precede todas as mensagens TDS, encapsulando a sessão TDS em TLS para garantir a criptografia, alinhando o TDS 8.0 com o HTTPS e outros protocolos web. Esse aprimoramento contribui significativamente para a capacidade de gerenciamento de tráfego TDS, já que os dispositivos de rede padrão agora podem filtrar e passar consultas SQL com segurança.

Um benefício do TDS 8.0 em comparação com as versões anteriores do TDS é a sua compatibilidade com os padrões TLS 1.3 e TLS futuros. O TDS 8.0 também é totalmente compatível com o TLS 1.2 e versões anteriores do TLS.

Como funciona o TDS

O protocolo Tabular Data Stream (TDS) é um protocolo ao nível da aplicação usado para a transferência de pedidos e respostas entre clientes e sistemas de servidor da base de dados. O sistema cliente normalmente estabelece uma conexão de longa duração com o servidor. Depois que a conexão é estabelecida usando um protocolo de nível de transporte, as mensagens TDS são trocadas para se comunicar entre o cliente e o SQL Server.

Durante a vida útil da sessão TDS, há três fases:

  • Inicialização
  • Autenticação
  • Intercâmbio de dados

A encriptação é negociada durante a fase inicial, mas a negociação TDS acontece através de uma ligação não encriptada. A conexão do SQL Server tem esta aparência para versões anteriores ao TDS 8.0:

Troca de TCP handshake ➡️ pré-login TDS (texto não criptografado) e resposta (texto não criptografado) ➡️ handshake TLS ➡️ autenticação (criptografada) ➡️ troca de dados (pode ser criptografada ou não criptografada)

Com a introdução do TDS 8.0, as conexões do SQL Server são as seguintes:

Handshake TCP ➡️ Handshake TLS ➡️ Pré-login TDS (criptografado) e resposta (criptografada) ➡️ autenticação (criptografada) ➡️ troca de dados (criptografada)

Matriz de compatibilidade para TDS, TLS, OS e opções de criptografia

Você pode habilitar as versões TLS 1.2 e TLS 1.3 no nível do sistema operacional, o que permite que as conexões de cliente com o SQL Server usem várias versões do protocolo TDS (TDS 7.x e 8.0). Dependendo da versão do sistema operacional, o TLS 1.2 e o TLS 1.3 podem ser habilitados por padrão.

Apenas o TDS 7.x suporta comunicação não encriptada (opcional), o TDS 8.0 não suporta isso. TDS 7.x suporta criptografia usando TLS até a versão 1.2. O TDS 8.0 requer encriptação – tudo é sempre encriptado com TDS 8.0 (Encrypt=Strict). O TDS 8.0 não tem nenhum requisito mínimo de versão do TLS e suporta o TLS 1.3. O suporte a TLS 1.3 depende da versão do sistema operacional. A tabela a seguir resume vários cenários com as opções de criptografia e as versões TLS e TDS correspondentes.

Criptografar
option
Versão TLS ativada Versão do Sistema Operativo Esperado
ligação
Resultado
Observações
Rigoroso Apenas TLS 1.3 (ou posterior) Windows 11

Windows Server 2022 e posterior
Sucesso TLS 1.3 negociado; TDS 8.0 acionado (Encrypt=Strict)
Rigoroso TLS 1.2 e TLS 1.3 Windows 11

Windows Server 2022 e posterior
Sucesso TLS 1.3 negociado; TDS 8.0 acionado (Encrypt=Strict)
Rigoroso Apenas TLS 1.2 (ou anterior) Windows 11

Windows Server 2022 e posterior
Sucesso TLS 1.2 negocido; TDS 8.0 ativado (Encrypt=Strict)
Rigoroso Apenas TLS 1.2 (ou anterior) Windows 10

Windows Server 2019 / 2016
Sucesso TLS 1.2 negociado; TDS 8.0 acionado (TLS 1.3 não disponível)
Mandatory Apenas TLS 1.3 (ou posterior) Windows 11

Windows Server 2022 e posterior
Failure Encrypt=Mandatory é incompatível com TLS 1.3 para TDS 8.0
Mandatory TLS 1.2 e TLS 1.3 Windows 11

Windows Server 2022 e posterior
Sucesso TLS 1.2 negociado; TDS 8.0 não acionado (Encrypt=Obrigatório)
Mandatory Apenas TLS 1.2 (ou anterior) Windows 11

Windows Server 2022 e posterior
Sucesso TLS 1.2 negociado; TDS 8.0 não acionado (Encrypt=Obrigatório)
Mandatory Apenas TLS 1.2 (ou anterior) Windows 10

Windows Server 2019 / 2016
Sucesso TLS 1.2 negociado; TDS 8.0 não suportado neste SO (usa TDS 7.x)
Opcional Apenas TLS 1.3 (ou posterior) Windows 11

Windows Server 2022 e posterior
Failure Encrypt=Optional (false) é TDS 7.x, que é incompatível com TLS 1.3.
Opcional TLS 1.2 e TLS 1.3 Windows 11

Windows Server 2022 e posterior
Sucesso TLS 1.3 negociado; TDS 8.0 não acionado (Encrypt=Optional)
Opcional Apenas TLS 1.2 (ou anterior) Windows 11

Windows Server 2022 e posterior
Sucesso TLS 1.2 negociado; TDS 8.0 não ativado (Encrypt=Optional)
Opcional Apenas TLS 1.2 (ou anterior) Windows 10

Windows Server 2019 / 2016
Sucesso TLS 1.2 negociado; encriptação opcional; ligação pode
Ter sucesso sem criptografia
Qualquer Apenas TLS 1.3 (ou posterior) Windows 10

Windows Server 2019 / 2016
Failure TLS 1.3 não suportado neste SO

Para obter mais informações sobre como os clientes usam diferentes versões do TDS, consulte a seção Uso de palavras-chave na seção Alterações nas propriedades de criptografia da cadeia de conexão .

Suporte ao SQL Server 2025

O SQL Server 2025 (17.x) introduz suporte ao TDS 8.0 para as seguintes ferramentas de linha de comandos e funcionalidades do SQL Server:

O suporte ao TDS 8.0 introduz alterações disruptivas nestas funcionalidades.

Criptografia de conexão estrita

Para usar o TDS 8.0, o SQL Server 2022 (16.x) adicionou strict como uma opção adicional de criptografia de conexão aos drivers do SQL Server (Encrypt=strict). Para usar o strict tipo de criptografia de conexão, baixe a versão mais recente dos drivers .NET, ODBC, OLE DB, JDBC, PHP e Python:

Para evitar um ataque man-in-the-middle com strict criptografia de conexão, os utilizadores não podem definir a opção TrustServerCertificate para true e permitir qualquer certificado fornecido pelo servidor. Em vez disso, os usuários usariam a HostNameInCertificate opção para especificar o certificado ServerName que deve ser confiável. O certificado fornecido pelo servidor precisaria passar na validação do certificado. Para obter mais informações sobre validação de certificado, consulte Requisitos de certificado para o SQL Server

Alterações adicionais nas propriedades de criptografia da cadeia de conexão

As seguintes opções são adicionadas às cadeias de conexão para criptografar a comunicação:

Palavra-chave Predefinido Descrição
Encrypt falso Opções anteriores da cadeia de conexão

As opções válidas são:
- true, ou yes
- false, ou no.
Para obter mais informações, consulte Sintaxe da cadeia de conexão. Quando true, o SQL Server usa criptografia TLS 1.2 para todos os dados trocados entre o cliente e o servidor, se o servidor tiver um certificado instalado.

Opções de cadeia de conexão mais recentes

As opções válidas são:
- strict
- mandatory, ou true, ou yes
- optional, ou false, ou no.

Quando definido como strict, o SQL Server usa o TDS 8.0 para todos os dados trocados entre o cliente e o servidor.

Quando definido como mandatory, trueou yes, o SQL Server usa TDS 7.x com criptografia TLS/SSL para todos os dados enviados entre o cliente e o servidor, se o servidor tiver um certificado instalado.

Quando definida como optional, falseou no, a conexão usa TDS 7.x e seria criptografada somente se exigido pelo SQL Server.
TrustServerCertificate falso Opção de cadeia de conexão anterior

Quando definido como true (não recomendado), o driver não valida o certificado TLS/SSL do servidor. Se true, o certificado TLS/SSL do servidor é automaticamente confiável (ignorando a validação) quando a camada de comunicação é criptografada usando TLS.

Se false, o driver valida o certificado TLS/SSL do servidor. Se a validação do certificado do servidor falhar, o driver gerará um erro e fechará a conexão. O valor predefinido é false. Verifique se o valor passado para serverName corresponde exatamente ao Common Name (CN) ou nome DNS no Subject Alternate Name no certificado do servidor para uma conexão TLS/SSL ter sucesso.

Alteração de comportamento para o Microsoft SQL Server ODBC Driver 18 e posterior

Se Encrypt estiver definido como strict, essa configuração especifica o local do certificado a ser usado para validação de certificado do servidor (correspondência exata). O driver suporta as extensões de arquivo PEM, DER e CER.

Se Encrypt estiver definido como true ou false, e a TrustServerCertificate propriedade não estiver especificada ou definida como null, trueou false, o driver usará o valor da ServerName propriedade na URL de conexão como o nome do host para validar o certificado TLS/SSL do SQL Server.
HostNameInCertificate null O nome do host a ser usado na validação do certificado TLS/SSL do SQL Server. Se a HostNameInCertificate propriedade não for especificada ou estiver definida como null, o driver usará o valor da ServerName propriedade como o nome do host para validar o certificado TLS/SSL do SQL Server.