从Ubuntu连接SQL Server时sqlcmd登录失败

时间:2017-04-23 04:04:39

标签: sql-server ubuntu sqlcmd

SQL Server 2016安装在Windows Server 2012 R2服务器“dev”上,sql server服务正在侦听端口1433上的所有IP。 我可以使用sqlcmd从本地和另一个远程Windows Server 2012连接到它。命令很简单:sqlcmd -S dev \ INSTACE -d database -U test1 -P test1

但是,当我尝试使用相同的命令从Ubuntu 16.04机器连接时,我总是遇到以下错误:

    Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : TCP Provider: Error code 0x2AF9.
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..

我也可以使用来自Ubuntu服务器的telnet连接端口1433.(telnet dev 1433)。

欣赏提示或帮助。

BTW,我没有使用freetds而是使用OOTB Microsoft ODBC驱动程序用于Ubuntu 16.04。

还有一个:刚用jdbc测试,SQL服务器可以使用jdbc从Ubuntu连接。

2 个答案:

答案 0 :(得分:0)

最后,这个问题通过以下方式解决: 1)在SQL服务器端的每个IP地址上启用TCP / IP。仅启用“IPAll”但不是每个TCP / IP地址都是不够的,包括IPV4和IPV6。 2)看起来你不能在命令中给出实例名称。在这种情况下,可以连接默认实例。我还没有想出如何处理除默认实例以外的实例名称。 3)在Windows中,你不需要报价来包装密码,但你需要在Ubuntu中。喜欢:“sqlcmd -S dev \ MyInstance -U sa -P abcd!efg”适用于Windows,但不适用于Ubuntu。在Ubuntu中,我必须这样做:“sqlcmd -S dev -U sa -P'abcd!efg'

答案 1 :(得分:-1)

正确的命令是:

sqlcmd -S dev\\\Instance,1433 -U test1 -P test1

根据设计,如果使用命名实例,则需要提供端口号,即使它是默认端口,并且双反斜杠\\也是必须的。参考:https://github.com/Microsoft/msphpsql/issues/442