我在使用freetds从红帽子框连接到我的Microsoft SQL Server 2005时遇到问题。 我的最终目标是能够使用php的PDO进行连接,但在使用“tsql”进行testing时似乎无法连接。
我不认为这是一个防火墙问题,因为我可以telnet到它就好了。
$ telnet <ip> 1433 Trying <ip>... Connected to <ip>. Escape character is '^]'.
运行下面的命令会产生以下结果:
$ TDSVER=7.1 tsql -H <ip> -p 1433 -U <user> -P <pass> locale is "en_US.UTF-8" locale charset is "UTF-8" using default charset "UTF-8" 5Error 20003 (severity 6): Adaptive Server connection timed out OS error 115, "Operation now in progress" Error 20002 (severity 9): Adaptive Server connection failed There was a problem connecting to the server
我相信这是正确的configuration,因为如果我在本地Debian机器上运行相同的命令,它似乎成功。
$ TDSVER=7.1 tsql -H <ip> -p 1433 -U <user> -P <pass> locale is "en_US.UTF-8" locale charset is "UTF-8" using default charset "UTF-8" 1>
我试图连接设置“TDSVER = 7.0”,“TDSVER = 7.2”,“TDSVER = 8.0”,他们都不工作。
这里是错误日志:
09:50:45.013838 17363 (log.c:196):Starting log file for FreeTDS 0.91 on 2014-05-09 09:50:45 with debug flags 0xffff. 09:50:45.014138 17363 (iconv.c:330):tds_iconv_open(0x18e63e0, UTF-8) 09:50:45.014334 17363 (iconv.c:187):local name for ISO-8859-1 is ISO-8859-1 09:50:45.014349 17363 (iconv.c:187):local name for UTF-8 is UTF-8 09:50:45.014354 17363 (iconv.c:187):local name for UCS-2LE is UCS-2LE 09:50:45.014358 17363 (iconv.c:187):local name for UCS-2BE is UCS-2BE 09:50:45.014362 17363 (iconv.c:349):setting up conversions for client charset "UTF-8" 09:50:45.014366 17363 (iconv.c:351):preparing iconv for "UTF-8" <-> "UCS-2LE" conversion 09:50:45.014376 17363 (iconv.c:391):preparing iconv for "ISO-8859-1" <-> "UCS-2LE" conversion 09:50:45.014389 17363 (iconv.c:394):tds_iconv_open: done 09:50:45.014400 17363 (net.c:205):Connecting to <ip> port 1433 (TDS version 7.1) 09:50:45.014577 17363 (net.c:270):tds_open_socket: connect(2) returned "Operation now in progress" 09:50:45.019725 17363 (net.c:310):tds_open_socket() succeeded 09:50:45.019751 17363 (util.c:156):Changed query state from DEAD to IDLE 09:50:45.019767 17363 (net.c:741):Sending packet <censored> 09:50:50.021625 17363 (util.c:331):tdserror(0x18e6140, 0x18e63e0, 20003, 115) 09:50:50.021743 17363 (util.c:361):tdserror: client library returned TDS_INT_CANCEL(2) 09:50:50.021751 17363 (util.c:384):tdserror: returning TDS_INT_CANCEL(2) 09:50:50.021796 17363 (util.c:156):Changed query state from IDLE to DEAD 09:50:50.021808 17363 (login.c:466):login packet rejected 09:50:50.021813 17363 (util.c:331):tdserror(0x18e6140, 0x18e63e0, 20002, 0) 09:50:50.021823 17363 (util.c:361):tdserror: client library returned TDS_INT_CANCEL(2) 09:50:50.021828 17363 (util.c:384):tdserror: returning TDS_INT_CANCEL(2) 09:50:50.021833 17363 (mem.c:615):tds_free_all_results()
这是我的/etc/freetds.conf文件
# $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $ # # This file is installed by FreeTDS if no file by the same # name is found in the installation directory. # # For information about the layout of this file and its settings, # see the freetds.conf manpage "man freetds.conf". # Global settings are overridden by those in a database # server specific section [global] # TDS protocol version tds version = 7.1 # Whether to write a TDSDUMP file for diagnostic purposes # (setting this to /tmp is insecure on a multi-user system) dump file = /tmp/freetds.log debug flags = 0xffff # Command and connection timeouts timeout = 5 #connect timeout = 10 # If you get out-of-memory errors, it may mean that your client # is trying to allocate a huge buffer for a TEXT field. # Try setting 'text size' to a more reasonable limit text size = 64512 # A typical Sybase server #[egServer50] # host = symachine.domain.com # port = 5000 # tds version = 5.0 # A typical Microsoft server #[egServer70] # host = ntmachine.domain.com # port = 1433 # tds version = 7.0 # Define a connection to the MSSQL server. [mssql] host = <ip> port = 1433 tds version = 7.1
编辑:
我在免费的TDS文档中看到,我假设使用7.2,但是这似乎不起作用。
http://www.freetds.org/userguide/choosingtdsprotocol.htm
编辑2:
我也试过用sqsh
sqsh -D <dbname> -S <ipaddy> -U <user> -P <password> sqsh-2.5 Copyright (C) 1995-2001 Scott C. Gray Portions Copyright (C) 2004-2014 Michael Peppler and Martin Wesdorp This is free software with ABSOLUTELY NO WARRANTY For more information type '\warranty' Open Client Message Layer 0, Origin 0, Severity 78, Number 35 Adaptive Server connection timed out
这个问题是一个防火墙问题。
据我所知,当我做到这一点
telnet <ip> 1433 Trying <ip>... Connected to <ip>.
它实际上没有连接到服务器。 如果我给了它一分钟,它会断开。 我在机器上安装了Wireshark,并注意到没有响应从服务器发送到远程login请求。
另一个certificate,这是一个防火墙的问题是,我可以从另一台机器,而不是从服务器连接到数据库。 所以我做了一个SSH隧道来显示它不是应用程序configuration的方式,而是networking。
ssh -L 1433:theServerGivingMeIssues:1433 SQLserver
我可以连接到没有隧道的SQL服务器,但我不能与隧道。