Проблема с подключением к SQL Server 2005 через FreeTDS на FreeBSD
Я пытаюсь подключиться к SQL Server 2005 с сервера FreeBSD с помощью следующей команды:
tsql -H DEV -p 1433 -U ****
Это приводит к следующему сообщению об ошибке:
locale is "C"
locale charset is "US-ASCII"
Password:
Msg 20004, Level 9, State 0, Server OpenClient, Line 0
Read from SQL server failed.
Msg 20014, Level 9, State 0, Server OpenClient, Line 0
Login incorrect.
There was a problem connecting to the server
Поскольку в сообщении об ошибке указано "Логин неверен", первым делом я должен убедиться, что я действительно ввожу правильное имя пользователя и пароль. Это логин SQL Server (т.е. не аутентификация Windows), и я убедился, что он правильно введен с учетом регистра. Обратите внимание, что я могу подключиться, используя тот же логин из Windows-клиента, без каких-либо проблем.
Моим следующим шагом было создание дампа из FreeTDS:
util.c:288:Starting log file for FreeTDS 0.64
on 2011-04-12 16:29:57 with debug flags 0x4fff.
iconv.c:195:names for ISO-8859-1: ISO-8859-1
iconv.c:195:names for UTF-8: UTF-8
iconv.c:195:names for UCS-2LE: UCS-2LE
iconv.c:195:names for UCS-2BE: UCS-2BE
iconv.c:361:iconv to convert client-side data to the "US-ASCII" character set
iconv.c:514:tds_iconv_info_init: converting "US-ASCII"->"UCS-2LE"
net.c:168:Connecting to 10.5.5.226 port 1433.
net.c:673:Sending packet
...snipped...
net.c:673:Sending packet
...snipped...
token.c:310:tds_process_login_tokens()
util.c:119:Changing query state from IDLE to DEAD
token.c:2252:tds_client_msg: #20004: "Read from SQL server failed.". Connection state is now 4.
token.c:314:looking for login token, got 0()
token.c:105:tds_process_default_tokens() marker is 0()
token.c:108:leaving tds_process_default_tokens() connection dead
util.c:119:Changing query state from DEAD to DEAD
token.c:2252:tds_client_msg: #20014: "Login incorrect.". Connection state is now 4.
mem.c:519:tds_free_all_results()
Еще одна вещь, которую я проверил, заключается в том, что экземпляр SQL Server принимает удаленные соединения через TCP/IP. Я также могу подключиться к SQL Server через порт 1433 с компьютера с FreeBSD, так что, похоже, проблема с подключением отсутствует.
Итак, на данный момент я мертв в воде. Будем очень благодарны за любую помощь в диагностике этих сообщений об ошибках или предложении попробовать другие вещи.
2 ответа
Я закончил, следуя инструкциям здесь, и теперь все работает отлично:
http://kipb7.wordpress.com/2008/06/12/pyodbc-unixodbc-freetds-config/
Появляется сообщение об ошибке "Ошибка DB-Lib 20004, уровень серьезности 9: сбой чтения с сервера SQL".
В Linux/*nix вы можете столкнуться со следующим поведением: import _mssql c=_mssql.connect('hostname:portnumber','user','pass') Traceback (последний вызов был последним): File "", строка 1, в _mssql.DatabaseException: сообщение об ошибке DB-Lib 20004, уровень серьезности 9: Ошибка чтения с сервера SQL. Сообщение об ошибке DB-Lib 20014, серьезность 9: Логин неверен.
Это может произойти, если выполнено одно из следующих действий:
- файл freetds.conf не найден
- версия tds в файле freetds.conf не является 7.0 или 4.2
- любой набор символов указан в freetds.conf
- нераспознанный набор символов передается методу _mssql.connect() или pymssql.connect().
"Неверный логин" после этой ошибки является ложным, реальные сообщения "Неверный логин" имеют код =18456 и серьезность =14.