在Ubuntu上配置带有SSL支持的pymssql所需的步骤是什么,所以我可以连接到需要加密连接的SQL Server实例(例如Azure)?
答案 0 :(得分:8)
(有关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存储库将安装支持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"