繁体   English   中英

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

[英]sqlcmd login failed when connecting SQL Server from Ubuntu

SQL Server 2016安装在Windows Server 2012 R2服务器“ dev”上,并且sql Server服务正在侦听端口1433上的所有IP。我可以使用sqlcmd从本地和另一个远程Windows Server 2012连接到它。命令很简单: sqlcmd -S dev \\ INSTACE -d数据库-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开发人员1433)。

感谢提示或帮助。

顺便说一句,我不是在使用freetds,而是在Ubuntu 16.04上使用OOTB Microsoft ODBC驱动程序。

另一点:刚刚使用jdbc测试过,可以使用jdbc从Ubuntu连接SQL Server。

最后,可以通过以下方法解决此问题:1)在SQL Server端的每个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'

正确的命令是:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM