TDS 8.0
Se aplica a: SQL Server 2022 (16.x) Azure SQL Database Azure 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.
- Microsoft ADO.NET para SQL Server y Azure SQL Database, versión 5.1 o superior
- ODBC Driver for SQL Server, versión 18.1.2.1 o superior
- Microsoft OLE DB Driver for SQL Server versión 19.2.0 o posterior
- Microsoft JDBC Driver for SQL Server, versión 11.2.0 o superior.
- Controladores de Microsoft para PHP para SQL Server, versión 5.10 o superior
- Controlador Python para SQL (pyodbc)
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
- eSQL 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 Encrypt se establece strict en , esta opción especifica la ubicación del certificado que se usará para la validación de certificados de servidor (coincidencia exacta). El controlador admite las extensiones de archivo PEM, DER y CER.Si Encrypt se establece true en o false , y la TrustServerCertificate propiedad no está especificada o se establece null en , true o false , el controlador usa el ServerName valor de propiedad en la dirección URL de 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 HostNameInCertificate propiedad no está especificada o se establece en null , el controlador usa el valor de propiedad ServerName como nombre de host para validar el certificado TLS/SSL de SQL Server. |