¿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)?
(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.
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