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
Я полагаю, что решение действительно просто, но я просто слишком глуп, чтобы найти его...
Ответы
Ответ 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