Подтвердить что ты не робот

FreeTDS не использует свою конфигурацию

Я решил использовать драйвер FreeTDS и unixODBC для управления соединением PDO между моим LAMP-приложением с удаленной базой данных MsSQL. к сожалению, кажется, что драйвер не читает файл freetds.conf, ни переменные среды, установленные либо напрямую через CLI сервера, либо заданные в php файле функцией putenv().

теперь некоторые данные:

  • когда я ping сервер - никакие пакеты не теряются.
  • поскольку я telnet сервер на порту 1433 - соединение установлено
  • поскольку я использую команду

    TDSVER=7.0 tsql -H >IP< -p 1433 -U username
    

    Мне предлагается ввести пароль и установить соединение.

  • без TDSVER, предшествующего команде, - соединение с таким сообщением завершается с ошибкой:

    Error 20017 (severity 9):
        Unexpected EOF from the server
        OS error 115, "Operation now in progress"
    Error 20002 (severity 9):
        Adaptive Server connection failed
    There was a problem connecting to the server
    
  • команды tsql -C вызывают такой вывод:

    Compile-time settings (established with the "configure" script)
                           Version: freetds v0.91
            freetds.conf directory: /usr/local/etc
    MS db-lib source compatibility: yes
       Sybase binary compatibility: no
                     Thread safety: yes
                     iconv library: yes
                       TDS version: 5.0
                             iODBC: no
                          unixodbc: yes
             SSPI "trusted" logins: no
                          Kerberos: no
    
  • freetds.conf в приведенном выше местоположении имеет эту запись:

    [MSSQL]
    host = >IP<
    port = 1433
    tds version = 7.0
    
  • ISQL также терпит неудачу:

    isql -v MSSQL
    [S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
    [01000][unixODBC][FreeTDS][SQL Server]Adaptive Server connection failed
    [ISQL]ERROR: Could not SQLConnect
    
  • my odbc.ini:

    [MSSQL]
    Description = MS SQL Server
    Driver = FreeTDS
    TDS_Version = 7.0
    Server = >IP<
    UID = username
    PWD = password
    ReadOnly = No
    Port = 1433
    

Я полагаю, что решение действительно просто, но я просто слишком глуп, чтобы найти его...

4b9b3361

Ответ 1

Мой интуитивный инстинкт - вам нужно изменить tds version = 7.0 на tds version = 8.0 в файлах freetds.conf и odbc.ini. И вам нужно что-то в ваш файл odbcinst.ini. Вот что я работал на сервере Ubuntu 12.04, разговаривая с удаленным сервером MSSQL:

freetds.conf

# Define a connection to the MSSQL server.
[mssql]
    host = myserver
    port = 1433
    tds version = 8.0

odbc.ini

# Define a connection to the MSSQL server.
# The Description can be whatever we want it to be.
# The Driver value must match what we have defined in /etc/odbcinst.ini
# The Database name must be the name of the database this connection will connect to.
# The ServerName is the name we defined in /etc/freetds/freetds.conf
# The TDS_Version should match what we defined in /etc/freetds/freetds.conf
[mssql]
Description             = MSSQL Server
Driver                  = freetds
Database                = MyDB
ServerName              = myserver
TDS_Version             = 8.0

odbcinst.ini

# Define where to find the driver for the Free TDS connections.
[freetds]
Description     = MS SQL database access with Free TDS
Driver          = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so
Setup           = /usr/lib/i386-linux-gnu/odbc/libtdsS.so
UsageCount      = 1

Ответ 2

Сегодня я долгое время отлаживал подобную проблему. Я установил "версию TDS" в freetds.conf, но он не использовался в моем подключении ODBC. После прочтения исходного кода freetds (connectparams.c: odbc_parse_connect_string) я обнаружил, что:

  • Если ваша строка подключения использует "SERVER =", то оба freetds.conf и odbc.ini игнорируются
  • Если ваша строка подключения использует "SERVERNAME =", тогда используются настройки на соответствующем сервере freetds.conf.
  • Если ваша строка подключения использует "DSN =", тогда используются настройки в соответствующем DSN odbc.ini.

odbcinst.ini - красная селедка. FreeTDS никогда не проверяет это для настроек.

Параметры, указанные в строке подключения, всегда соблюдаются. Он также всегда уважает переменные среды, такие как TDSVER.

Ответ 3

У меня возникла такая же проблема, но моя конфигурация была уже настроена правильно. Проблема заключалась в том, что версии TDS, распознаваемые freetds.conf, были изменены в более новых версиях, но, по-видимому, старые версии по-прежнему работают в переменной среды TDSVER. Как только я установил версию в конфигурационных файлах на 7.1, а не на 8.0, все заработало.

Ответ 4

Исходная проблема TDSVER=7.0 была решена путем добавления следующего в конец моего файла odbc.ini:

[Default]
Driver=/usr/local/lib/libtdsodbc.so

Ответ 5

Вместо подключения к IP-адресу попытайтесь подключиться к названию раздела конфигурации? Например:

isql -v MSSQL