TDS 8.0

Se aplica a: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

SQL Server 2022 (16.x), Azure SQL Database y Azure SQL Managed Instance admiten el flujo de datos tabulares (TDS) 8.0.

El protocolo de flujo de datos tabulares (TDS) es un protocolo de capa de aplicación que usan los clientes para conectarse a SQL Server. SQL Server usa la Seguridad de la capa de transporte (TLS) para cifrar los datos transmitidos a través de una red entre una aplicación cliente y una instancia de SQL Server.

TDS es un protocolo seguro, pero en versiones anteriores de SQL Server hacía que el cifrado se desactivara o no se habilitara. De cara a cumplir con los estándares de cifrado obligatorio al usar SQL Server, se ha incluido una iteración del protocolo TDS: TDS 8.0.

Ahora, el protocolo de enlace TLS precede a los mensajes de TDS y la sesión de TDS se encapsula en TLS para aplicar cifrado, lo que hace que TDS 8.0 respete HTTPS y otros protocolos web. Esto contribuye significativamente a facilitar la administración del tráfico de TDS, ya que ahora los dispositivos de red estándar pueden filtrar y pasar consultas SQL de forma segura.

Otra ventaja de TDS 8.0 en comparación con versiones de TDS previas es su mayor compatibilidad con TLS 1.3 y con los estándares TLS que están por venir. TDS 8.0 también es totalmente compatible con TLS 1.2 y con versiones anteriores de TLS.

Funcionamiento de TDS

El protocolo de flujo TDS es un protocolo de nivel de aplicación que se usa para la transferencia de solicitudes y respuestas entre clientes y sistemas de servidor de base de datos. En estos sistemas, el cliente normalmente establece una conexión de larga duración con el servidor. Una vez establecida la conexión mediante un protocolo de nivel de transporte, se usan mensajes de TDS para establecer la comunicación entre el cliente y el servidor.

Durante la sesión de TDS, hay tres fases:

  • Inicialización
  • Autenticación
  • Intercambio de datos

El cifrado se negocia durante la fase inicial, pero la negociación de TDS se produce a través de una conexión sin cifrar. La conexión de SQL Server tiene este aspecto en versiones anteriores a TDS 8.0:

Protocolo de enlace TCP ➡️ Inicio de sesión previo de TDS (texto no cifrado) y respuesta (texto no cifrado) ➡️ Protocolo de enlace TLS ➡️ Autenticación (cifrado) ➡️ Intercambio de datos (puede ir cifrado o sin cifrar)

Con la incorporación de TDS 8.0, las conexiones de SQL Server se producen del siguiente modo:

Protocolo de enlace TCP ➡️ Protocolo de enlace TLS ➡️ Inicio de sesión previo de TDS (texto no cifrado) y respuesta (texto no cifrado) ➡️ Autenticación (cifrado) ➡️ Intercambio de datos (cifrado)

Cifrado de conexión strict

Para usar TDS 8.0, SQL Server 2022 (16.x) incluyó strict como un tipo de cifrado de conexión adicional para controladores de SQL Server (Encrypt=strict). Para usar el tipo de cifrado de conexión strict, descargue la versión más reciente de los controladores .NET, ODBC, OLE DB, JDBC, PHP y Python.

Para evitar un ataque de tipo "Man in the middle" con cifrado de conexión strict, los usuarios no pueden establecer la opción TrustServerCertificate en true ni confiar en cualquier certificado proporcionado por el servidor. En su lugar, los usuarios deberán usar la opción HostNameInCertificate para especificar el certificado ServerName de confianza. El certificado proporcionado por el servidor tendrá que superar la validación de certificado.

Características que no admiten forzado de cifrado estricto

La opción Force Strict Encryption añadida con TDS 8.0 en la configuración de red de SQL Server obliga a todos los clientes a usar strict como el tipo de cifrado. Los clientes o características sin el cifrado de conexión strict no se podrán conectar a SQL Server.

A continuación se muestran las características o herramientas que siguen usando la versión anterior de los controladores que no admiten TDS 8.0 y, como tal, puede que no funcionen con el cifrado de conexión strict:

  • Grupos de disponibilidad AlwaysOn
  • Instancias de clúster de conmutación por error (FCI) Always On
  • Replicación de SQL Server
  • Trasvase de registros
  • Utilidad sqlcmd
  • Utilidad bcp
  • Servicio CEIP de SQL Server
  • Agente SQL Server
  • Correo electrónico de base de datos
  • Servidores vinculados
  • Conector de Polybase a SQL Server

Otros cambios en las propiedades de cifrado de cadena de conexión

Se han incorporado las siguientes adiciones a las cadenas de conexión para el cifrado:

Palabra clave Valor predeterminado Descripción
Encrypt false Comportamiento existente
Cuando es true, SQL Server utiliza el cifrado TSL en todos los datos enviados entre el cliente y el servidor si el servidor tiene instalado un certificado. Los valores reconocidos son true, false, yes y no. Para obtener más información, vea Sintaxis de cadena de conexión.

Cambio de comportamiento
Cuando se establece en strict, SQL Server usa TDS 8.0 en todos los datos enviados entre el cliente y el servidor.

Cuando se establece en mandatory, true o yes, SQL Server utiliza TDS 7.x con cifrado TLS/SSL en todos los datos enviados entre el cliente y el servidor si el servidor tiene instalado un certificado.

Cuando se establece en optional, false o no, la conexión usa TDS 7.x y solo se cifrará si SQL Server lo requiere.
TrustServerCertificate false Comportamiento existente
Se establece en true para especificar que el controlador no valida el certificado TLS/SSL del servidor. Si es true, se confía automáticamente en el certificado TLS/SSL del servidor cuando la capa de comunicación se cifra mediante TLS.

Si es false, el controlador validará el certificado TLS/SSL del servidor. Si se produce un error en la validación del certificado de servidor, el controlador genera un error y cierra la conexión. El valor predeterminado es false. Asegúrese de que el valor pasado a serverName coincide exactamente con el Common Name (CN) o con el nombre DNS del Subject Alternate Name del certificado de servidor para que la conexión TLS/SSL se establezca correctamente.

Cambio de comportamiento para Microsoft ODBC Driver 18 for SQL Server
Si Cifrar se establece en strict, esta opción especifica la ubicación del certificado que se va a usar para validar certificados de servidor (mediante coincidencia exacta). El controlador admite las extensiones de archivo PEM, DER y CER.

Si Cifrar se establece en true o false, y la propiedad TrustServerCertificate no se ha especificado o está establecida en null, true o false, el controlador usa el valor de propiedad ServerName en la dirección URL de la conexión como nombre de host para validar el certificado TLS/SSL de SQL Server.
HostNameInCertificate nulo Nombre de host que se va a usar al validar el certificado TLS/SSL de SQL Server. Si la propiedad HostNameInCertificate no se ha especificado o está establecida en null, el controlador usa el valor de propiedad ServerName como nombre de host para validar el certificado TLS/SSL de SQL Server.