如何在Ubuntu上配置支持SSL的pymssql?

时间:2016-09-08 16:01:03

标签: python ubuntu pymssql

在Ubuntu上配置带有SSL支持的pymssql所需的步骤是什么,所以我可以连接到需要加密连接的SQL Server实例(例如Azure)?

4 个答案:

答案 0 :(得分:8)

Ubuntu 16.04 LTS

(有关Ubuntu 18.04 LTS,请参阅this answer。)

以下对Xubuntu 16.04 LTS x64的干净安装起了作用:

第一个挑战是我们从Ubuntu 16.04存储库获得的FreeTDS不支持“开箱即用”的SSL,因此我们需要构建自己的。首先安装python3-pip(还安装了build-essentials,g ++和一些我们需要的其他东西)和libssl-dev(构建具有SSL支持的FreeTDS所需的OpenSSL库)

sudo apt install python3-pip libssl-dev

点击freetds.org上的“稳定版本”链接,下载FreeTDS的源代码。解压缩存档,切换到刚创建的目录(例如,freetds-1.00.104),然后执行

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

使用

检查构建
tsql -C

并确保列出“TDS版本:auto”和“OpenSSL:是”。然后使用tsql来测试“原始”FreeTDS连接,例如,

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

现在安装pymssql。默认情况下,最新版本作为预编译的“wheel”文件提供,不支持支持加密连接,因此我们需要从pymssql源安装。从pymssql 2.1.4开始,构建过程依赖于Cython,所以首先要做

pip3 install --user Cython

然后再做

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

构建完成后,安装pymssql。

但是......它还行不通。当我们尝试在Python中执行import pymssql时,我们得到

  

ImportError:libsybdb.so.5:无法打开共享对象文件:没有这样的文件或目录

因为显然该文件处于“错误”的位置。修复(参考:here)是在“正确”的位置创建指向实际文件的符号链接

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

现在pymssql可以使用SSL连接。

对我而言,无论如何。

答案 1 :(得分:5)

Ubuntu 18.04 LTS

Ubuntu 18.04存储库将安装支持GnuTLS的FreeTDS版本,因此从源代码构建FreeTDS并不是绝对必要的。但是,我们仍然需要从源代码构建pymssql,因为只需执行通常的操作

pip3 install --user pymssql

将安装不支持安全连接的预编译“转轮”。相反,我们需要做

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

答案 2 :(得分:0)

对于Ubuntu 16.04,似乎至少Docker容器具有已经支持SSL的FreeTDS版本。

此外,至少对于Python 2.7,不需要Cython:

https://github.com/tds-fdw/ci-setup/blob/master/ubuntu16.04/Dockerfile(第23-39行)

但是要记住一些事情!

必须强制连接到Azure的TDS版本至少为7.1 (或更高,具体取决于您的需求:https://www.freetds.org/userguide/choosingtdsprotocol.htm

否则,您将看到臭名昭著的

  

[错误](20017,“ DB-Lib错误消息20017,严重性9:\ n意外   服务器正在进行EOF \ nNet-Lib错误,正在进行操作   (115)\ nDB-Lib错误消息20002,严重性9:\ nAdaptive Server   连接失败\ n')

由于某些原因,无需任何额外配置(https://github.com/tds-fdw/ci-setup/blob/master/ubuntu14.04/Dockerfile)的Ubuntu 14.04和pymssql 2.1.3不需要使用

可以使用以下任一方法完成

export TDSVER=7.1

或者,在Python代码和connect函数中,添加参数:

 tds_version='7.1'

有了它,我能够使用pymssql 2.1.4毫无问题地连接到Azure。

答案 3 :(得分:0)

你可以使用pymssql:2.2.0

先卸载旧的pymssql:

sudo pip3 uninstall pymssql

第二次安装新的pymssql:

sudo pip3 install "pymssql==2.2.0"