如何在 Ubuntu 上配置支持 SSL 的 pymssql?
How to configure pymssql with SSL support on Ubuntu?
在 Ubuntu 上配置支持 SSL 的(现在 discontinued)pymssql 需要哪些步骤,这样我就可以连接到需要加密连接的 SQL 服务器实例(例如,Azure)?
Ubuntu 16.04 LTS
(请参阅 了解 Ubuntu 18.04 LTS。)
以下内容对我全新安装 Xubuntu 16.04 LTS x64 有效:
第一个挑战是我们从 Ubuntu 16.04 存储库获得的 FreeTDS 不支持 SSL "out of the box",因此我们需要构建自己的。首先安装 python3-pip
(它还会安装 build-essentials、g++ 以及我们需要的其他一些东西)和 libssl-dev
(构建支持 SSL 的 FreeTDS 所需的 OpenSSL 库)
sudo apt install python3-pip libssl-dev
通过单击 freetds.org "Stable Release" link 下载 FreeTDS 的源代码。解压存档,切换到您刚刚创建的目录(例如,freetds-1.00.104),然后执行
./configure --with-openssl=/usr/include/openssl --enable-msdblib
make
sudo make install
使用
检查构建
tsql -C
并确保 "TDS version: auto" 和 "OpenSSL: yes" 已列出。然后使用 tsql
测试 "raw" 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: cannot open shared object file: No such file or directory
因为显然该文件位于 "wrong" 位置。解决方法(参考:here)是在 "right" 位置创建一个指向实际文件
的符号 link
sudo ln -s /usr/local/lib/libsybdb.so.5 /usr/lib/libsybdb.so.5
sudo ldconfig
现在 pymssql 使用 SSL 连接。
反正对我来说。
Ubuntu 18.04 LTS
Ubuntu18.04 存储库将安装支持 GnuTLS 的 FreeTDS 版本,因此并非绝对需要从源代码构建 FreeTDS。但是,我们仍然需要从源代码构建 pymssql,因为只需执行通常的
pip3 install --user pymssql
将安装不支持安全连接的预编译 "wheel"。相反,我们需要做
sudo apt install python3-pip freetds-dev
pip3 install --user Cython
pip3 install --user --no-binary pymssql pymssql
对于 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)
否则你会看到臭名昭著的:
[ERROR] (20017, 'DB-Lib error message 20017, severity 9:\nUnexpected
EOF from the server\nNet-Lib error during Operation now in progress
(115)\nDB-Lib error message 20002, severity 9:\nAdaptive Server
connection failed\n')
出于某种原因,Ubuntu 14.04 和 pymssql 2.1.3 不需要任何额外配置 (https://github.com/tds-fdw/ci-setup/blob/master/ubuntu14.04/Dockerfile)
可以通过以下任一方式完成:
export TDSVER=7.1
或者,在 Python 代码和连接函数中,添加参数:
tds_version='7.1'
这样,我就可以使用 pymssql 2.1.4 毫无问题地连接到 Azure。
可以使用pymssql:2.2.0
首先卸载旧的pymssql:
sudo pip3 uninstall pymssql
第二次安装新的pymssql:
sudo pip3 install "pymssql==2.2.0"
在 Ubuntu 上配置支持 SSL 的(现在 discontinued)pymssql 需要哪些步骤,这样我就可以连接到需要加密连接的 SQL 服务器实例(例如,Azure)?
Ubuntu 16.04 LTS
(请参阅
以下内容对我全新安装 Xubuntu 16.04 LTS x64 有效:
第一个挑战是我们从 Ubuntu 16.04 存储库获得的 FreeTDS 不支持 SSL "out of the box",因此我们需要构建自己的。首先安装 python3-pip
(它还会安装 build-essentials、g++ 以及我们需要的其他一些东西)和 libssl-dev
(构建支持 SSL 的 FreeTDS 所需的 OpenSSL 库)
sudo apt install python3-pip libssl-dev
通过单击 freetds.org "Stable Release" link 下载 FreeTDS 的源代码。解压存档,切换到您刚刚创建的目录(例如,freetds-1.00.104),然后执行
./configure --with-openssl=/usr/include/openssl --enable-msdblib
make
sudo make install
使用
检查构建tsql -C
并确保 "TDS version: auto" 和 "OpenSSL: yes" 已列出。然后使用 tsql
测试 "raw" 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: cannot open shared object file: No such file or directory
因为显然该文件位于 "wrong" 位置。解决方法(参考:here)是在 "right" 位置创建一个指向实际文件
的符号 linksudo ln -s /usr/local/lib/libsybdb.so.5 /usr/lib/libsybdb.so.5
sudo ldconfig
现在 pymssql 使用 SSL 连接。
反正对我来说。
Ubuntu 18.04 LTS
Ubuntu18.04 存储库将安装支持 GnuTLS 的 FreeTDS 版本,因此并非绝对需要从源代码构建 FreeTDS。但是,我们仍然需要从源代码构建 pymssql,因为只需执行通常的
pip3 install --user pymssql
将安装不支持安全连接的预编译 "wheel"。相反,我们需要做
sudo apt install python3-pip freetds-dev
pip3 install --user Cython
pip3 install --user --no-binary pymssql pymssql
对于 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)
否则你会看到臭名昭著的:
[ERROR] (20017, 'DB-Lib error message 20017, severity 9:\nUnexpected EOF from the server\nNet-Lib error during Operation now in progress (115)\nDB-Lib error message 20002, severity 9:\nAdaptive Server connection failed\n')
出于某种原因,Ubuntu 14.04 和 pymssql 2.1.3 不需要任何额外配置 (https://github.com/tds-fdw/ci-setup/blob/master/ubuntu14.04/Dockerfile)
可以通过以下任一方式完成:
export TDSVER=7.1
或者,在 Python 代码和连接函数中,添加参数:
tds_version='7.1'
这样,我就可以使用 pymssql 2.1.4 毫无问题地连接到 Azure。
可以使用pymssql:2.2.0
首先卸载旧的pymssql:
sudo pip3 uninstall pymssql
第二次安装新的pymssql:
sudo pip3 install "pymssql==2.2.0"