среда, 13 февраля 2013 г.

Настройка доступа к Microsoft SQL Server через ODBC. Ubuntu 12.04

Возникла недавно необходимость получить доступ к M$ SQL базам из Linux через ODBC.

Для организации связки Linux->M$ SQL, в качестве odbc-драйвера, был выбран - FreeTDS.

Установим необходимые пакеты:
$sudo apt-get install tdsodbc unixodbc unixodbc-bin unixodbc-dev odbcinst

Настройка FreeTDS.

$sudo mcedit /etc/freetds/freetds.conf

Добавляем новую секцию для M$ SQL сервера (название секции может быть любым):

[MSSQL]
host = sql.mydomen.ru
port = 1433
tds version = 8.0
client charset = UTF8

где:
host - доменное имя или IP сервера с SQL.
tds version - версия протокола TDS. Версия 8.0 для Microsoft SQL Server 2000 и выше.


Настройка ODBC.

Настраиваем драйвер:

$sudo mcedit /etc/odbcinst.ini 

и  добавляем секцию для FreeTDS:

#Для i386
[FreeTDS]
Description = FreeTDS
Driver  = /usr/lib/odbc/libtdsodbc.so
Setup  = /usr/lib/odbc/libtdsS.so
FileUsage = 1
UsageCount = 4


#Для x86_64
[FreeTDS]
Description = FreeTDS
Driver  = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup  = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
FileUsage = 1
UsageCount = 4



Настраиваем непосредственно систему ODBC. Создаем DSN.
Сделать это можно 2-мя способами:

1. Через GUI:

Используя мастер настройки:
$ODBCCreateDataSourceQ4

Используя ODBC администратор:
$ODBCManageDataSourcesQ4


2. Путем редактированию конфигов:

$sudo mcedit /etc/odbc.ini

Добавляем в него соответствующую секцию:

#Для i386
[MSSQL]
Description = FreeTDS driver
Driver  = FreeTDS
Servername = MSSQL
Database = myDB
UID  = sa
PWD  = sa


#Для x86_64
[MSSQL]
Description = FreeTDS driver
Driver  = FreeTDS
Servername = MSSQL
Database = myDB
UID  = sa
PWD  = sa


где:
Description - описание драйвера.
Driver - имя раздела из файла /etc/odbcinst.ini.
Servername - имя раздела, описывающего сервер БД, из файла /etc/freetds/freetds.conf.
Database - имя базы данных на M$ SQL сервере, к которой нужно получить доступ.
UID и PWD - пользователь, заведенный на M$ SQL сервере и грантованный на работу с данной БД.


Конфигурирование завершено.


Устанавливаем параметры драйвера в систему:

$sudo odbcinst -i -d -f /etc/odbcinst.ini

Устанавливаем настройки ODBC в систему:

$sudo odbcinst -i -s -l -f /etc/odbc.ini

!!!!ВАЖНО!!!!
Если в /etc/odbc.ini вносятся какие-либо изменения, процедуру установки ностроек ODBC в систему, необходимо повторить (sudo odbcinst -i -s -l -f /etc/odbc.ini)


Проверка установленных DSN:

$odbcinst -s -q

Проверка подключения к БД:

$tsql -S MSSQL -U sa -P sa

видим что то типа:

locale is "ru_RU.UTF-8"
locale charset is "UTF-8"
using default charset "UTF8"
1> 

Чтобы удалить параметры драйвера из системы:
$sudo odbcinst -u -d -n FreeTDS

Чтобы удалить регистрацию DSN из системы:
$sudo odbcinst -u -s -l -n MSSQL

Во избежание конфликтов, лучше удалить локальный настройки ODBC:
$rm /home/name/.odbc.ini


Все, можно работать.

7 комментариев:

  1. Анонимный6 июля 2014 г., 15:16

    Спасибо за статью. Очень помогла. Изложено чётко, доходчиво.

    ОтветитьУдалить
  2. tsql -S MSSQL -U sa -P sa
    -bash: tsql: команда не найдена

    ОтветитьУдалить
  3. Анонимный23 июля 2015 г., 17:16

    apt-get install freetds-bin -y

    ОтветитьУдалить
  4. Домен там правильный если что, просто для примера ваш указал.

    ОтветитьУдалить
    Ответы
    1. Почему-то пропал Ваш предыдущий комментарий, поэтому выложу его на всякий:

      "Ubuntu 16.04

      Выдается такая ошибка, можете подсказать в чем может быть дело?

      root@ikp1:/usr/lib/x86_64-linux-gnu/odbc# sudo odbcinst -i -s -l -f /etc/odbc.ini
      odbcinst: iniOpen failed on /etc/odbc.ini.

      /etc/freetds/freetds.conf (есть еще такой же файл в /usr/local/etc/freetds.conf, пробовал и там и там настройки ставить)

      [MSSQL]
      host = sql.mydomen.ru
      port = 1433
      tds version = 8.0
      client charset = UTF8

      Протокол пробовал 7 и 8 версии.

      /etc/odbcinst.ini

      [FreeTDS]
      Description = FreeTDS
      Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
      Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
      FileUsage = 1
      UsageCount = 4

      Обе нужные библиотеки есть на месте.

      /etc/odbc.ini

      Description = FreeTDS driver
      Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
      Servername = 192.168.25.31
      Database = Stat
      UID = stat
      PWD = 86352

      Тут пробовал указывать имена разделов для драйвера и сервера или напрямую писать."

      Проблема в том, что в odbc.ini нет секции. Должно быть что-то типа:

      [MSSQL]
      Description = FreeTDS driver
      Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
      Servername = 192.168.25.31
      Database = Stat
      UID = stat
      PWD = 86352

      Удалить