¿Cómo configurar pymssql con soporte SSL en Ubuntu?

¿Cuáles son los pasos necesarios para configurar pymssql con soporte SSL en Ubuntu para que pueda conectarme a una instancia de SQL Server que requiera una conexión encriptada (por ejemplo, Azure)?

Ubuntu 16.04 LTS

(Ver esta respuesta para Ubuntu 18.04 LTS.)

Lo siguiente me funcionó en una instalación limpia de Xubuntu 16.04 LTS x64:

El primer desafío es que el FreeTDS que obtenemos de los repositorys de Ubuntu 16.04 no es compatible con SSL “listo para usar”, por lo que necesitamos crear el nuestro. Comience por instalar python3-pip (que también instala build-essentials, g ++ y un montón de otras cosas que necesitaremos) y libssl-dev (las bibliotecas de OpenSSL requeridas para comstackr FreeTDS con soporte SSL)

 sudo apt install python3-pip libssl-dev 

Descargue el código fuente de FreeTDS haciendo clic en el enlace “Stable Release” en freetds.org . Desempaquete el archivo, cambie al directorio que acaba de crear (por ejemplo, freetds-1.00.104) y luego haga

 ./configure --with-openssl=/usr/include/openssl --enable-msdblib make sudo make install 

Compruebe la construcción con

 tsql -C 

y asegúrese de que “TDS version: auto” y “OpenSSL: yes” estén en la lista. Luego use tsql para probar una conexión FreeTDS “sin procesar”, por ejemplo,

 tsql -H example.com -p 1433 -U youruserid -P yourpassword 

Ahora para instalar pymssql. De forma predeterminada, las versiones recientes se envían como un archivo “rueda” precomstackdo que no admite conexiones cifradas, por lo que necesitamos instalar desde la fuente pymssql. A partir de pymssql 2.1.4, el proceso de construcción se basa en Cython, así que primero

 pip3 install --user Cython 

y luego hacer

 pip3 install --user --no-binary pymssql pymssql 

Cuando se completa la comstackción, se instala pymssql.

Pero … no funcionará (todavía). Cuando intentamos import pymssql en Python obtenemos

ImportError: libsybdb.so.5: no se puede abrir el archivo de objeto compartido: no existe tal archivo o directorio

porque al parecer ese archivo está en el lugar “equivocado”. La solución (ref: aquí ) es crear un enlace simbólico en el lugar “correcto” que apunta al archivo real

 sudo ln -s /usr/local/lib/libsybdb.so.5 /usr/lib/libsybdb.so.5 sudo ldconfig 

Ahora pymssql funciona con conexiones SSL.

Para mí, de todos modos.

Ubuntu 18.04 LTS

Los repositorys de Ubuntu 18.04 instalarán una versión de FreeTDS que soporta GnuTLS, por lo que no es absolutamente necesario construir FreeTDS desde la fuente. Sin embargo, todavía necesitamos comstackr pymssql desde la fuente porque simplemente hacemos lo habitual

 pip3 install --user pymssql 

instalará una “rueda” precomstackda que no admite conexiones seguras. En cambio, tenemos que hacer

 sudo apt install python3-pip freetds-dev pip3 install --user Cython pip3 install --user --no-binary pymssql pymssql