Подключение к MS SQL Server из QGIS запущенного в Linux
Инструкция по настройки unixODBC и QGIS, для подключения к MS SQL Server
Введение
QGIS имеет возможность подключаться к MS SQL Server и работать с его "родными" типами Geometry и Geography. Подключение под ОС MS Windows обычно не вызывает ни каких проблем, следует лишь ввести название сервера и имя БД. В ОС Linux эта операция несколько сложнее, и может вызвать проблемы у многих пользователей.
Провайдер MS SQL Server для QGIS при подключения использует модуль QtSql и один из его драйверов - QODBC. Драйвер QODBC на Linux реализован поверх unixODBC. Он в свою очередь, для работы с MS SQL Server использует библиотеку FreeTDS и odbc драйвер, написанный на её базе.
Настройка MS SQL Server
Для начала необходимо убедиться, что SQL Server принимает сетевые подключения. Для этого, в SQL Server Configuration Manager необходимо включить протокол соединения TCP/IP.
![Msserver qgis linux1.png](/images/7/72/Msserver_qgis_linux1.png)
В списке "SQL Server Network Configuration" выберите необходимый инстанс (в моем случае это "MSSQLSERVER"). В таблице с доступными протоколами TCP/IP должен иметь статус Enabled. Если это не так, необходимо включить его, открыв двойным щелчком форму свойств и установив свойство Enabled равным "Yes".
![Msserver qgis linux2.png](/images/d/d1/Msserver_qgis_linux2.png)
На этой же форме, на вкладке "IP Addresses" можно проверить, стандартный ли порт (1433) выставлен для этого инстанса.
![Msserver qgis linux3.png](/images/2/22/Msserver_qgis_linux3.png)
Если включен брандмауэр, то необходимо добавить этот порт в список исключений.
Установка необходимых пакетов на клиенте
Для работы будут необходимы следующие пакеты:
- qt-odbc
- freetds
Установка для Fedora (16+)
Минимально для работы и тестирования соединения необходимы:
sudo yum install qt-odbc freetds
Для возможности настройки в графическом режиме дополнительно понадобятся:
sudo yum install unixODBC-kde
Установка для Ubuntu (12.04+) и Debian (squeeze+)
Минимально для работы необходимы:
sudo apt-get install libqt4-sql-odbc tdsodbc
Для возможности настройки в графическом режиме и тестирования соединения дополнительно понадобятся:
sudo apt-get install freetds-bin unixodbc unixodbc-bin
Поверка соединения через FreeTDS
Данный шаг необходим сугубо для тестирования, и может быть пропущен, если следующие шаги проходят без проблем.
Чтобы убедится, что соединение с вашим MSSQL Server возможно, настроим и проверим соединение средствами самой библиотеки FreeTDS.
Для этого в конфигурационный файл /etc/freetds.conf необходимо добавить следующее содержание:
[MSTEST] host = 192.168.0.100 port = 1433 tds version = 8.0
IP адрес 192.168.0.100 необходимо заменить на адрес вашего MSSQL сервера.
Запускаем утилиту tsql:
tsql -S MSTEST -U testuser -P testpass
testuser и testpass заменяем соответственно на логин и его пароль, присутствующий в БД.
Запускаем любой тестовый запрос:
1> USE your_db_name 2> GO 1> SELECT * FROM your_table_name 2> GO
your_db_name заменяем на название БД, your_table_name - на название любой таблицы, имеющейся в этой БД.
Если запрос выполнился без ошибок, то можно приступать к следующему шагу. В противном случае нужно искать проблемы с сетью и настройками.
Регистрация FreeTDS драйвера
Перед настройкой соединения, необходимо проверить, зарегистрирован ли FreeTDS драйвер odbc, и верно ли он называется. Это можно сделать двумя путями.
Проверка драйвера через ODBCConfig
Запускаем ODBCConfig от имени суперпользователя:
sudo ODBCConfig
![Mssql odbcconfig.png](/images/a/af/Mssql_odbcconfig.png)
В разделе "Advanced", на вкладке "Driver", в списке должен быть драйвер с названием FreeTDS, ссылающийся на модуль /usr/lib/libtdsodbc.so (для Fedora /usr/lib/libtdsodbc.so.0). Возможно, он присутствует в списке под именем TDS. В этом случае следует либо переименовать существующий, либо создать новый с именем FreeTDS. Если драйвера в списке нет, следует добавить его в список, нажав кнопку "Add...". Обязательны к заполнению поля "Name" и "Driver".
![Mssql odbcconfig new.png](/images/d/dc/Mssql_odbcconfig_new.png)
Проверка драйвера в конфигурационном файле
Проверить наличие и добавить драйвер можно непосредственно в конфигурационный файл /etc/odbcinst.ini.
В файле должна присутствовать секция с названием FreeTDS и ссылкой на /usr/lib/libtdsodbc.so (для Fedora /usr/lib/libtdsodbc.so.0):
[FreeTDS]
Description = ODBC for FreeTds
Driver = /usr/lib/libtdsodbc.so.0
Если секция называется TDS, то можно либо переименовать её, либо скопировать и затем переименовать в FreeTDS.
Настройка и проверка соединения через unixODBC
После того как мы убедились, что драйвер зарегистрирован, можно создавать DSN для нашего MSSQL Server'a.
Настройка соединения через ODBCConfig
Запускаем ODBCConfig от имени непривилегированного пользователя:
ODBCConfig
В разделе "Data Source Names", на вкладке "User" отображается список пользовательских DSN.
![Mssql odbcconfig user dsns.png](/images/7/75/Mssql_odbcconfig_user_dsns.png)
Нажимаем кнопку "Add...", выбираем FreeTDS драйвер:
![Mssql odbcconfig select driver.png](/images/9/92/Mssql_odbcconfig_select_driver.png)
и вводим параметры нового соединения:
![Mssql odbcconfig new conn.png](/images/7/7c/Mssql_odbcconfig_new_conn.png)
Обязательны для заполнения поля: "Name", "Driver", "Server", "Database". UID и PWD в целях безопасности лучше не заполнять, в противном случае они будут храниться открытым текстом.
IP адрес 192.168.0.100 необходимо заменить на адрес вашего MSSQL сервера, your_db_name заменяем на реальное название БД, testuser и testpass заменяем соответственно на логин и его пароль, присутствующий в этой БД.
Настройка соединения через конфигурационный файл
Настроить соединение можно непосредственно отредактировав конфигурационный файл ~/.odbc.ini.
Соединение, созданное выше, может выглядеть следующим образом:
[MSTEST_ODBC]
Description = MSSQL test connection
Driver = FreeTDS
Server = 192.168.0.100
Port = 1433
Database = your_db_name
TDS_Version = 8.0
Language = us_english
TextSize =
Domain =
PacketSize =
Trace = Yes
TraceFile = /tmp/freetds.log1
UID = testuser
PWD = testpass
Проверка ODBC соединения
Для проверки соединения, необходимо запустить консольный sql клиент:
isql -v MSTEST_ODBC testuser testpass
Если параметры соединения были указанны верно, то появится приглашение для ввода sql запросов.
Запускаем любой тестовый запрос:
SQL> SELECT * FROM your_table_name
your_table_name заменяем на название любой таблицы, имеющейся в БД.
Создание соединения и подключение в QGIS
Работа с использованием других ODBC драйверов
Драйвер FreeTDS в некоторых случаях не является стабильным решением. В замен него можно использовать проприетарные аналоги:
- Плюсы: драйвер бесплатный
- Минусы: возможность использования только на 64х битных RedHat-based дистрибутивах
- Плюсы: стабильная работа, есть триал версия
- Минусы: возможность использования на старых ядрах 2.4-2.6