Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Este artículo describe los cambios repentinos entre el controlador ODBC 18 de Microsoft para SQL Server y la versión 17.
La mayoría de las aplicaciones que actualizan de la versión 17 a la 18 se ven afectadas por un solo cambio: las conexiones se cifran por defecto. Si tu aplicación deja de conectarse después de actualizar, lee primero el comportamiento de cifrado por defecto .
Resumen de los cambios
| Area | Versión 17 | Versión 18 y versiones posteriores |
|---|---|---|
Configuración predeterminada Encrypt |
no |
yes |
Encrypt Valores aceptados |
yes, no |
yes, no, Mandatory, Optional, Strict |
| Modos de cifrado | Fuera o fuera | Apagado, encendido o estricto |
| Validación de certificados de servidor | No ocurre a menos que solicites cifrado | Ocurre por defecto, porque el cifrado está activado por defecto |
| Palabras clave de cadena de conexión | Conjunto base | Conjunto base más nuevas palabras clave |
Cambios de cifrado
Comportamiento de cifrado predeterminado
En la versión 17, las conexiones no están cifradas a menos que pidas cifrado o el servidor lo requiera. En la versión 18 y versiones posteriores, las conexiones están cifradas por defecto.
Como el controlador valida el certificado del servidor cada vez que cifra una conexión, una aplicación que se conecta a un servidor con un certificado autofirmado o no confiable se conecta con éxito con la versión 17 y falla con la versión 18. El fallo es un error de validación de certificado, no de autenticación.
Tienes tres formas de resolverlo, listadas de la más a la menos segura:
- Instala un certificado en el servidor en el que el cliente confíe. Esta opción es la recomendada y es la única que mantiene tanto el cifrado como la validación.
- Mantén el cifrado activado y dile al controlador qué nombre validar, configurando
HostNameInCertificateoServerCertificate. - Desactiva el cifrado para restaurar la versión 17 por defecto, añadiendo
Encrypt=noa la cadena de conexión.
Caution
La configuración TrustServerCertificate=yes mantiene la conexión cifrada pero deshabilita la validación del certificado, lo que deja la conexión abierta a ataques de adversarios en medio. Prefiero un certificado de confianza.
Cifrar valores
La versión 17 acepta solo yes y no. La versión 18 y versiones posteriores aceptan esos valores y añaden tres más:
| Value | Equivalente a | Comportamiento |
|---|---|---|
Mandatory |
yes |
La conexión está cifrada. |
Optional |
no |
La conexión no está cifrada a menos que el servidor lo requiera. |
Strict |
Ninguno | La conexión utiliza cifrado TDS 8.0. |
Strict no tiene equivalente a la versión 17. Es el único valor que selecciona TDS 8.0, donde el cifrado se negocia antes del intercambio de inicio de sesión en lugar de durante él.
Restaurar comportamiento de cifrado de la versión 17
Para restaurar el comportamiento por defecto de la versión 17, se establece Encrypt explícitamente:
Driver={ODBC Driver 18 for SQL Server};Server=<server>;Database=<database>;UID=<user_id>;PWD=<password>;Encrypt=no;
Establecer el valor explícitamente es beneficioso incluso en la versión 17, porque hace que la cadena de conexión se comporte igual en ambas versiones.
Nuevas palabras clave de cadena de conexión
La versión 18 añade las siguientes palabras clave de cadena de conexión, que la versión 17 no reconoce:
| Keyword | propósito |
|---|---|
ConcatNullYieldsNull |
Determina si concatenar un valor nulo produce nulo. |
GetDataExtensions |
Controla qué SQLGetData extensiones habilita el driver. |
HostNameInCertificate |
Especifica el nombre de host a validar en el certificado TLS del servidor. |
IpAddressPreference |
Especifica la familia de direcciones IP que el controlador prueba primero. |
LongAsMax |
Asigna tipos de datos largos a sus max equivalentes. |
RetryExec |
Configura las reglas de reintento para consultas fallidas. |
ServerCertificate |
Especifica la ruta hacia un archivo de certificado para validar el servidor. |
Se introdujeron palabras clave individuales en diferentes versiones de la versión 18. Para la versión que introdujo cada palabra clave y para la referencia completa de palabras clave, véase ODBC DSN y palabras clave de cadena de conexión.