Conexión desde Linux o macOS

Descargar controlador ODBC

En este artículo se describe cómo crear una conexión a una base de datos de SQL Server.

Propiedades de conexión

Consulte Atributos y palabras clave de cadena de conexión y DSN para ver todos los atributos y palabras clave de cadena de conexión admitidos en Linux y macOS.

Importante

Al conectarse a una base de datos que usa la creación de reflejo de la base de datos (tiene un asociado de conmutación por error), no especifique el nombre de la base de datos en la cadena de conexión. En su lugar, envíe un comando usedatabase_name para conectarse a la base de datos antes de ejecutar las consultas.

El valor transmitido a la palabra clave Driver puede ser uno de los siguientes:

  • El nombre que usó cuando instaló el controlador.

  • La ruta de acceso a la biblioteca del controlador, que se especificó en el archivo .ini de plantilla utilizado para instalar el controlador.

Los DSN son opcionales. Puede usar un DSN para definir palabras clave de cadena de conexión bajo un nombre DSN al que puede hacer referencia en la cadena de conexión. Para crear un DSN, cree (si es necesario) y edite el archivo ~/.odbc.ini (.odbc.ini en el directorio principal) para un DSN de usuario que sea solo accesible para el usuario actual o /etc/odbc.ini para un DSN del sistema (se requieren privilegios administrativos). El siguiente archivo odbc.ini es un ejemplo que muestra las entradas mínimas necesarias para un DSN:

# [DSN name]
[MSSQLTest]  
Driver = ODBC Driver 18 for SQL Server  
# Server = [protocol:]server[,port]  
Server = tcp:localhost,1433
Encrypt = yes
#
# Note:  
# Port isn't a valid keyword in the odbc.ini file  
# for the Microsoft ODBC driver on Linux or macOS
#  

Para conectarse con el DSN anterior en una cadena de conexión, debe especificar la palabra clave DSN, como en este caso: DSN=MSSQLTest;UID=my_username;PWD=my_password
La cadena de conexión anterior sería equivalente a especificar una cadena de conexión sin la palabra clave DSN, como en este caso: Driver=ODBC Driver 18 for SQL Server;Server=tcp:localhost,1433;Encrypt=yes;UID=my_username;PWD=my_password

También puede especificar el protocolo y el puerto para conectarse al servidor. Por ejemplo, Server=tcp:servername,12345. El único protocolo compatible con los controladores de Linux y macOS es tcp.

Para conectarse a una instancia con nombre en un puerto estático, use Server=servername,port_number. No se admite la conexión a un puerto dinámico antes de la versión 17.4.

De forma alternativa, puede agregar la información de DSN a un archivo de plantilla y ejecutar el siguiente comando para agregarlo a ~/.odbc.ini:

odbcinst -i -s -f <template_file>

Para obtener la documentación completa sobre los archivos .ini y odbcinst, consulte la documentación de unixODBC. Para las entradas del archivo odbc.ini específico del controlador ODBC para SQL Server, vea Atributos y palabras clave de cadena de conexión y DSN para las que sean compatibles con Linux y macOS.

Puede comprobar que el controlador funciona mediante isql para probar la conexión, o puede usar este comando:

bcp master.INFORMATION_SCHEMA.TABLES out OutFile.dat -S <server> -U <name> -P <password>

Uso de TLS/SSL

Puede usar la Seguridad de la capa de transporte (TLS), antes conocida como Capa de sockets seguros (SSL), para cifrar las conexiones con SQL Server. Este protocolo protege los nombres de usuario y las contraseñas de SQL Server a través de la red. TLS también comprueba la identidad del servidor para protegerse de ataques de tipo "Man in the middle" (MITM).

Al habilitar el cifrado, aumenta la seguridad a expensas del rendimiento.

Para obtener más información, consulte Cifrar las conexiones a SQL Server y Utilizar el cifrado sin validación.

Con independencia de la configuración de Encrypt y TrustServerCertificate, siempre se cifran las credenciales de inicio de sesión del servidor (nombre de usuario y contraseña). En las tablas siguientes se muestra el efecto de la configuración de Encrypt y TrustServerCertificate.

ODBC Driver 18 y versiones más recientes

Configuración de cifrado TrustServerCertificate Cifrado a la fuerza del servidor Resultado
No No No El certificado de servidor no está activado.
Los datos enviados entre el cliente y el servidor no están cifrados.
No No El certificado de servidor no está activado.
Los datos enviados entre el cliente y el servidor no están cifrados.
No No Se comprueba el certificado de servidor.
Se cifran los datos enviados entre cliente y servidor.
No El certificado de servidor no está activado.
Se cifran los datos enviados entre cliente y servidor.
No No Se comprueba el certificado de servidor.
Se cifran los datos enviados entre cliente y servidor.
No El certificado de servidor no está activado.
Se cifran los datos enviados entre cliente y servidor.
No Se comprueba el certificado de servidor.
Se cifran los datos enviados entre cliente y servidor.
El certificado de servidor no está activado.
Se cifran los datos enviados entre cliente y servidor.
Strict - - TrustServerCertificate se omite. Se comprueba el certificado de servidor.
Se cifran los datos enviados entre cliente y servidor.

Nota

Estricto solo está disponible en servidores que admiten conexiones TDS 8.0.

ODBC Driver 17 y versiones anteriores

Configuración de cifrado TrustServerCertificate Cifrado a la fuerza del servidor Resultado
No No No El certificado de servidor no está activado.
Los datos enviados entre el cliente y el servidor no están cifrados.
No No El certificado de servidor no está activado.
Los datos enviados entre el cliente y el servidor no están cifrados.
No No Se comprueba el certificado de servidor.
Se cifran los datos enviados entre cliente y servidor.
No El certificado de servidor no está activado.
Se cifran los datos enviados entre cliente y servidor.
No No El certificado de servidor no está activado.
Se cifran los datos enviados entre cliente y servidor.
No El certificado de servidor no está activado.
Se cifran los datos enviados entre cliente y servidor.
No Se comprueba el certificado de servidor.
Se cifran los datos enviados entre cliente y servidor.
El certificado de servidor no está activado.
Se cifran los datos enviados entre cliente y servidor.

Cuando se usa el cifrado de la conexión, el nombre (o la dirección IP) de un nombre común (CN) del firmante o el nombre alternativo del firmante (SAN) de un certificado TLS/SSL de SQL Server debe coincidir exactamente con el nombre (o la dirección IP) del servidor especificado en la cadena de conexión. La palabra clave HostnameInCertificate (a partir de v18.0) puede usarse para especificar un nombre alternativo que debe coincidir con los nombres del certificado TLS/SSL. Cuando se especifica la palabra clave, el certificado TLS/SSL de SQL Server debe coincidir con el nombre del servidor o bien la palabra clave HostnameInCertificate.

De forma predeterminada, las conexiones cifradas siempre comprueban el certificado del servidor. Sin embargo, si se conecta a un servidor que tiene un certificado autofirmado y no se está usando el modo de cifrado estricto, puede agregar la opción TrustServerCertificate para omitir la comprobación del certificado con respecto a la lista de entidades de certificación de confianza:

Driver={ODBC Driver 18 for SQL Server};Server=ServerNameHere;Encrypt=YES;TrustServerCertificate=YES  

En modo de cifrado estricto, el certificado siempre se comprueba. Como opción para la validación de certificados estándar, se puede usar la palabra clave ServerCertificate (a partir de v18.1) para especificar la ruta de acceso a un archivo de certificado que debe coincidir con el certificado de SQL Server. Esta opción sólo está disponible al usar cifrado estricto. Los formatos de certificado permitidos son PEM, DER y CER. Si se especifica, el certificado de SQL Server se comprueba verificando si la palabra ServerCertificate proporcionada constituye una coincidencia exacta.

TLS en Linux y macOS usa la biblioteca OpenSSL. En la siguiente tabla se muestran las versiones mínimas admitidas de OpenSSL y las ubicaciones de almacén de confianza de certificados predeterminadas para cada plataforma:

Plataforma Versión mínima de OpenSSL Ubicación del almacén de confianza de certificados predeterminada
Debian 10, 11, 12 1.1.1 /etc/ssl/certs
Debian 9 1.1.0 /etc/ssl/certs
Debian 8.71 1.0.1 /etc/ssl/certs
OS X 10.11, macOS 1.0.2 /usr/local/etc/openssl/certs
Red Hat Enterprise Linux 9 3.0.1 /etc/pki/tls/cert.pem
Red Hat Enterprise Linux 8 1.1.1 /etc/pki/tls/cert.pem
Red Hat Enterprise Linux 7 1.0.1 /etc/pki/tls/cert.pem
Red Hat Enterprise Linux 6 1.0.0-10 /etc/pki/tls/cert.pem
SUSE Linux Enterprise 15 1.1.0 /etc/ssl/certs
SUSE Linux Enterprise 11, 12 1.0.1 /etc/ssl/certs
Ubuntu 22.04, 23.04 3.0.2 /etc/ssl/certs
Ubuntu 20.04 1.1.1 /etc/ssl/certs
Ubuntu 18.04 1.1.0 /etc/ssl/certs
Ubuntu 16.04 1.0.2 /etc/ssl/certs
Ubuntu 14.04 1.0.1 /etc/ssl/certs
Alpine 3.17, 3.18 3.0.1 /etc/ssl/certs

También puede especificar el cifrado en la cadena de conexión mediante la opción Encrypt al usar SQLDriverConnect para conectarse.

Ajuste de la configuración de conexión persistente TCP

A partir de ODBC Driver 17.4, la frecuencia con la que el controlador envía paquetes de conexión persistente y los retransmite cuando no se recibe una respuesta es configurable. Para configurarla, agregue los siguientes valores a la sección del controlador en odbcinst.ini o a la sección del DNS en odbc.ini. Al conectarse con un DSN, el controlador usará los valores de la sección del DSN si está presente; de lo contrario, o solo si se conecta con una cadena de conexión, utilizará los valores de la sección del controlador en odbcinst.ini. Si el valor no está presente en ninguna ubicación, el controlador usará el valor predeterminado. A partir de ODBC Driver 17.8, se pueden especificar las palabras clave KeepAlive y KeepAliveInterval en la cadena de conexión.

  • KeepAlive=<integer> controla la frecuencia con la que TCP intenta comprobar que una conexión inactiva sigue intacta mediante el envío de un paquete de conexión persistente. El valor predeterminado es treinta segundos.

  • KeepAliveInterval=<integer> determina el intervalo que separa las retransmisiones de conexión persistente hasta que se recibe una respuesta. El valor predeterminado es 1 segundo.

Consulte también