Sql-Server

在 FreeBSD 上通過 FreeTDS 連接到 SQL Server 2005 時出現問題

  • April 14, 2011

我正在嘗試使用以下命令從 FreeBSD 伺服器連接到 SQL Server 2005:

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 接受遠端連接。我還可以從 FreeBSD 機器通過 1433 埠遠端登錄到 SQL Server,因此似乎沒有一般的連接問題。

所以,此刻,我已經死在了水里。任何有關診斷這些錯誤消息或建議其他嘗試的幫助將不勝感激。

我最終按照此處的說明進行操作,現在一切正常:

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 (most recent call last): File “”, line 1, in _mssql.DatabaseException:DB-Lib 錯誤消息 20004,嚴重性 9:從 SQL 伺服器讀取失敗。DB-Lib 錯誤消息 20014,嚴重性 9:登錄不正確。

當以下情況之一為真時,可能會發生這種情況:

  • 找不到 freetds.conf 文件
  • freetds.conf 文件中的 tds 版本不是 7.0 或 4.2
  • 在 freetds.conf 中指定了任何字元集
  • 將無法辨識的字元集傳遞給 _mssql.connect() 或 pymssql.connect() 方法。

此錯誤之後的“登錄不正確”是虛假的,真正的“登錄不正確”消息的程式碼=18456 和嚴重性=14。

參考: http: //pymssql.sourceforge.net/faq.php

引用自:https://serverfault.com/questions/258991