Какие шаги необходимо было выполнить для настройки (сейчас прекращено) pymssql с поддержкой SSL в Ubuntu чтобы я мог подключиться к экземпляру SQL Server, для которого требуется зашифрованное соединение (например, Azure)?
Как настроить pymssql с поддержкой SSL в Ubuntu?
Ответы (4)
Убунту 16.04 ЛТС
(См. этот ответ для Ubuntu 18.04 LTS.)
При чистой установке Xubuntu 16.04 LTS x64 у меня сработало следующее:
Первая проблема заключается в том, что FreeTDS, которую мы получаем из репозиториев Ubuntu 16.04, не поддерживает SSL «из коробки», поэтому нам нужно создать свой собственный. Начните с установки python3-pip
(которая также устанавливает build-essentials, g++ и кучу других вещей, которые нам понадобятся) и libssl-dev
(библиотеки OpenSSL, необходимые для сборки FreeTDS с поддержкой SSL)
sudo apt install python3-pip libssl-dev
Загрузите исходный код FreeTDS, нажав ссылку «Стабильная версия» на странице freetds.org. Распакуйте архив, перейдите в только что созданный каталог (например, 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.
Но... не получится (пока). Когда мы пытаемся сделать import pymssql
в Python, мы получаем
ImportError: libsybdb.so.5: невозможно открыть общий объектный файл: нет такого файла или каталога
потому что, видимо, этот файл находится в «неправильном» месте. Исправление (ссылка: здесь) заключается в создании символической ссылки в "правильном" месте, указывает на фактический файл
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'
.
- person Gord Thompson; 03.06.2019
Убунту 18.04 ЛТС
В репозиториях Ubuntu 18.04 будет установлена версия FreeTDS, поддерживающая GnuTLS, поэтому нет абсолютной необходимости собирать 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 имеют версию FreeTDS, которая уже поддерживает SSL.
Также, по крайней мере, для Python 2.7 Cython не нужен:
https://github.com/tds-fdw/ci-setup/blob/master/ubuntu16.04/Dockerfile (строки 23–39)
Но есть о чем помнить!
Версия TDS для подключения к Azure должна быть не ниже 7.1 (или новее, в зависимости от ваших потребностей: https://www.freetds.org/userguide/choosingtdsprotocol.htm)
В противном случае вы увидите позорное:
[ОШИБКА] (20017, 'Сообщение об ошибке DB-Lib 20017, серьезность 9:\nНеожиданный EOF с сервера\nОшибка Net-Lib во время выполнения операции (115)\nСообщение об ошибке DB-Lib 20002, серьезность 9:\nAdaptive Server соединение не удалось\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, исправьте несбалансированную кавычку.
- person madbird; 12.04.2021