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. Úsalo cuando elijas una versión de controlador, actualices una aplicación de la versión 17 a la 18, o necesites que una cadena de conexión funcione de forma consistente en ambas versiones.
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 .
Elige la versión 17 o la versión 18
El driver 18 es la versión principal actual. El controlador 17 sigue siendo soportado, pero las aplicaciones que lo usan aún necesitan la última versión menor de la línea del controlador 17 para recibir correcciones. Para fechas de soporte y normas de servicio, consulte ciclo de vida de soporte.
| Scenario | Ruta de acceso recomendada |
|---|---|
| Nueva aplicación | Empieza con el Driver 18. Configura el cifrado y la validación de certificados antes de la producción. |
| Aplicación existente del Driver 17 | Instala el controlador 18 junto al controlador 17, cambia el nombre del controlador en la cadena de conexión o DSN, y configúralo Encrypt explícitamente. Si falla la validación del certificado, arregla el certificado del servidor o el almacén de confianza del cliente. |
Aplicación que necesita Encrypt=Strict, HostnameInCertificate, RetryExec, u otra palabra clave Driver 18 |
Usa una versión de Driver 18 que soporte esta configuración. El conductor 17 no acepta el Strict valor de Encrypt ni reconoce las nuevas palabras clave. |
Aplicación que necesita fijación de ficheros de certificado con ServerCertificate |
Usa el controlador 18.1 o una versión posterior con Encrypt=Strict. El controlador 17 no soporta esta configuración. |
Cambiar de versión principal suele significar cambiar el nombre del controlador o el paquete que seleccionas:
| Platform | Piloto 17 | Piloto 18 |
|---|---|---|
| Nombre del controlador de cadena de conexión | ODBC Driver 17 for SQL Server |
ODBC Driver 18 for SQL Server |
| Nombre del paquete Linux | msodbcsql17 |
msodbcsql18 |
Resumen de los cambios
Las filas por defecto y validación describen conexiones remotas ordinarias sin configuración DSNEncrypt, atributo SQL_COPT_SS_ENCRYPT ni la anulación de Cifrado de Windows Force Protocol. LocalDB no es un objetivo remoto TLS.
| Area | Versión 17 | Versión 18 y versiones posteriores |
|---|---|---|
Configuración predeterminada Encrypt |
no, a menos que Authentication se establezca en un valor distinto de none o la aplicación establezca SQL_COPT_SS_ACCESS_TOKEN; entonces yes |
yes (18.0.1 y posteriores) |
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 | Con Encrypt=yes;TrustServerCertificate=no, valida el certificado. El cifrado requerido por el servidor por sí solo no selecciona validación. |
Valida por defecto. En modos no estrictos, TrustServerCertificate=yes se salta la validación normal, incluyendo cuando el servidor requiere cifrado. |
| Palabras clave de cadena de conexión | Conjunto base | Conjunto base más nuevas palabras clave |
Cambios de cifrado
Comportamiento de cifrado predeterminado
El controlador 17 se activa por defecto Encrypt=no a menos que la Authentication palabra clave esté asignada a un valor distinto none o la aplicación establezca el SQL_COPT_SS_ACCESS_TOKEN atributo. Cualquiera de las dos cambia el valor por defecto a yes. Un alambique explícito Encrypt=no desactiva el cifrado. El controlador 18.0.1 y posteriores por defecto es Encrypt=yes. Establece Encrypt explícitamente cuando compares versiones.
El cifrado de conexión completa protege el texto de consulta y los resultados, así como el inicio de sesión. Con Encrypt=no, el servidor puede seguir requiriendo cifrado de conexión completa. Cuando tanto el cliente como el servidor seleccionan el cifrado desactivado, la negociación no estricta utiliza cifrado solo de inicio de sesión; esto no protege los datos de la aplicación posteriores.
Con , ambos controladores seleccionan Encrypt=yes;TrustServerCertificate=nola validación normal del certificado del servidor. Si solo el servidor requiere cifrado de conexión completa y TrustServerCertificate=no (por defecto), el controlador 18 valida el certificado. Con TrustServerCertificate=yes el modo Strict fuera de ella, el Driver 18 se salta esa validación. El controlador 17 no se valida únicamente por ese requisito del servidor. El cifrado de Windows Force Protocol y las rutas internas de validación de certificados no están cubiertas por esta comparación.
Con la configuración de cifrado predeterminada, actualizar de la versión 17 a la 18 puede exponer un certificado de servidor no confiable. Si la versión 18 rechaza el certificado, diagnostica la cadena de certificados y el nombre antes de cambiar la configuración de autenticación.
Mantén activada la validación del cifrado y la identidad del servidor:
- Configura un certificado de servidor válido y el almacén de confianza del cliente para que el cliente confíe en su autoridad certificadora emisora. Conéctate usando un nombre en el certificado.
- Si te conectas a través de un alias, pon
HostnameInCertificateun nombre válido en el certificado del servidor. Esta configuración no arregla una cadena de certificados no confiable. - Para
Encrypt=Strict, el controlador 18.1 y versiones posteriores también soportanServerCertificatela comparación del certificado del servidor con un archivo de certificado. Esta configuración fija un certificado; no especifica un nombre de host. Revisa sus restricciones en ODBC DSN y palabras clave de cadena de conexión antes de usarla.
Caution
Para un entorno de prueba aislado, Encrypt=yes;TrustServerCertificate=yes solicita cifrado pero se salta la validación de identidad del servidor, dejando la conexión abierta a ataques de adversario en medio. No lo uses como reparación de fideicomiso. En modo Estricto, TrustServerCertificate se ignora.
Si una aplicación existente requiere el valor predeterminado de la versión 17 durante una prueba de compatibilidad controlada, consulte Restaurar comportamiento de cifrado de la versión 17.
Encrypt=no Y Encrypt=optional no repares la confianza en los certificados y puedes dejar los datos de la aplicación sin cifrar.
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 |
No solicita cifrado de conexión completa. El servidor aún puede necesitarlo; el cifrado solo por inicio de sesión no es protección para sesión completa. |
Strict |
Ninguno | La conexión utiliza cifrado TDS 8.0. El servidor debe soportar TDS 8.0, como SQL Server 2022 y versiones posteriores. |
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
Tras revisar las correcciones de confianza, utilice la siguiente configuración solo para una prueba de compatibilidad controlada que permita datos de aplicación no cifrados:
Encrypt=no
El controlador 18 también acepta Encrypt=optional esta configuración. Ninguno de los dos valores impide que el servidor requiera cifrado. Restaurar la configuración cifrada prevista tras la prueba; no usar cifrado desactivado como solución de confianza en el certificado.
Lista de comprobación de actualización
- Cadenas de conexión de inventario, DSNs, referencias de paquetes y scripts de despliegue que seleccionan el Controlador 17.
- Instala el controlador 18 en un entorno de prueba que coincida con producción.
- Cambia la
Driverpalabra clave de cada cadena de conexión porODBC Driver 18 for SQL Server, y actualiza o recrea cada DSN para usar el Driver 18. Instalar el controlador 18 no cambia las conexiones existentes, porque las conexiones que nombran el controlador 17 siguen usando el controlador 17. - Establezca
Encryptexplícitamente. ÚsaloEncrypt=Mandatorycon validación normal de certificados. ÚsaloEncrypt=Strictsolo cuando el servidor soporte TDS 8.0, como SQL Server 2022 y versiones posteriores. Para servidores que no soportan TDS 8.0, usaEncrypt=Mandatory. - Para una validación normal, conéctate y
TrustServerCertificate=noverifica la cadena de confianza y el nombre del servidor aceptado. Para el controlador 18.1 y versiones posteriores con fijación estricta de archivos, verificar la coincidencia exacta del certificado y las fechas de validez;TrustServerCertificatese ignora en modo estricto. - Ejecuta las rutas de autenticación, consulta, transacción, copia masiva, conmutación por error y reintentos de la aplicación.
- Revisa los diagnósticos para detectar errores de validación de certificados antes de tratar los fallos como errores de autenticación o de red.
- Mantén instalado el controlador 17 y guarda el inventario desde el paso 1 hasta que se complete la validación, para poder revertir a la versión 17.
Volver a la versión 17
El controlador 17 y el controlador 18 se instalan lado a lado, así que puedes revertir sin desinstalar el controlador 18. Para detalles de descarga e instalación, consulta Descargar ODBC Driver para SQL Server.
- Confirma que el controlador 17 sigue instalado en cada cliente.
- Usando el inventario de la lista de verificación de actualización, cambia la
Driverpalabra clave en cada cadena de conexión de nuevo aODBC Driver 17 for SQL Server. - Actualiza o recrea cada DSN para usar el Driver 17.
- Revertir referencias de paquetes y scripts de despliegue al paquete Driver 17, como
msodbcsql17en Linux. - Restaura los
Encryptvalores yTrustServerCertificateque la aplicación usó con el controlador 17. El controlador 17 acepta soloyesynoparaEncrypty no reconoce palabras clave del controlador 18 comoHostnameInCertificateoServerCertificate, así que elimina valores y palabras clave añadidas para el controlador 18. Cambiar las palabras clave de alias de nuevo a sus nombres de Driver 17 y reemplazarlasConnectTimeoutpor unaSQLSetConnectAttrllamada que establezcaSQL_ATTR_LOGIN_TIMEOUT. Para el mapeo, consulta New cadena de conexión keywords.
Valida la reversión antes de considerarla completa:
- Cada conexión informa del Driver 17. Llama a SQLGetInfo con
SQL_DRIVER_VER; la versión principal es17. - Las rutas de autenticación, consulta, transacción, copia masiva, conmutación por error y reintentos de la aplicación tienen éxito.
- Las cadenas de conexión y las DSN no contienen valores
Encryptni palabras clave añadidas para el Driver 18.
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. Algunos de ellos son nombres nuevos para configuraciones que la versión 17 soporta bajo una palabra clave o atributo diferente, listados en la columna equivalente a la versión 17 .
| Keyword | Versión mínima | propósito | Equivalente a la versión 17 |
|---|---|---|---|
ConcatNullYieldsNull |
18.6 | Determina si concatenar un valor nulo produce nulo. | Ninguno |
ConnectTimeout |
18.7 | Establece el tiempo de espera de inicio de sesión en segundos. Si la aplicación también establece SQL_ATTR_LOGIN_TIMEOUT, el atributo tiene prioridad. |
SQL_ATTR_LOGIN_TIMEOUT asignado, conjunto con SQLSetConnectAttr |
FailoverPartner |
18.7 | Especifica el socio de conmutación por fallo para el espejado de bases de datos. Solo para Windows. |
Failover_Partner palabra clave |
GetDataExtensions |
18.0 | Controla qué SQLGetData extensiones habilita el driver. |
Ninguno |
HostnameInCertificate |
18.0 | Especifica el nombre de host a validar en el certificado TLS del servidor. | Ninguno |
IpAddressPreference |
18.1 | Especifica la familia de direcciones IP que el controlador prueba primero. | Ninguno |
LongAsMax |
18.0 | Asigna tipos de datos largos a sus max equivalentes. |
Ninguno |
MultipleActiveResultSets |
18.7 | Permite múltiples conjuntos activos de resultados (MARS). Acepta Yes o No. |
MARS_Connection palabra clave |
RetryExec |
18.1 | Configura las reglas de reintento para consultas fallidas. | Ninguno |
ServerCertificate |
18.1 | Especifica que el archivo de certificado coincida con el certificado del servidor al usar Encrypt=Strict. |
Ninguno |
WorkstationID |
18.7 | Especifica el nombre de la estación de trabajo enviado al servidor. |
WSID palabra clave |
MultipleActiveResultSets, WorkstationID, y FailoverPartner son alias que alinean los nombres de palabras clave ODBC con Microsoft.Data.SqlClient los nombres de propiedades. La versión 18 también acepta los nombres antiguos. Para más detalles, véase Unificación de la cadena de palabras clave de Conexión y Palabra clave ConnectTimeout.
Para la referencia completa de palabras clave, véase ODBC DSN y palabras clave de cadena de conexión.