【发布时间】:2017-01-16 15:48:23
【问题描述】:
在 Ubuntu 上配置(现在为 discontinued)支持 SSL 的 pymssql 需要哪些步骤,以便我可以连接到需要加密连接的 SQL Server 实例(例如 Azure)?
【问题讨论】:
在 Ubuntu 上配置(现在为 discontinued)支持 SSL 的 pymssql 需要哪些步骤,以便我可以连接到需要加密连接的 SQL Server 实例(例如 Azure)?
【问题讨论】:
(对于 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 版本:自动”和“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 连接。
对我来说,无论如何。
【讨论】:
SELECT encrypt_option FROM sys.dm_exec_connections WHERE session_id=@@SPID 时,它会返回 'TRUE'。
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
【讨论】:
对于 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 错误消息 20017, 严重性 9:\n意外 来自服务器的 EOF\n操作期间的 Net-Lib 错误现在正在进行中 (115)\nDB-Lib 错误消息 20002,严重性 9:\n自适应服务器 连接失败\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"
【讨论】:
pymssql 的最新版本应该可以正常工作。 @xqlsrjjjh,请修正不平衡的引号。