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

问题描述:

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连接SQL Server时sqlcmd登录失败

但是,当我尝试从使用相同命令的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.. 

我还可以使用telnet从Ubuntu的服务器连接端口1433(远程登录开发1433)。

欣赏提示或帮助。

顺便说一句,我没有使用freetds,但OOTB微软的ODBC驱动程序为Ubuntu 16.04。

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

+0

尝试指定'-S dev'而不是'-S dev \ INSTACE'。没有实例名称,客户端将连接到端口1433而不查询SQL Server浏览器 –

+0

事实上,我从一开始就尝试过-S dev,但是我忘记将它包含在原始问题声明中,它也不起作用,无论如何,谢谢 – Windchill

+0

只是猜测,但是你有一个配置了相同名称('dev')的ODBC数据源吗?如果没有'-D'开关,我认为这不重要,但是如果配置了不同主机和SQLCMD的DSN尝试使用它,你会得到这些症状 –

最后,通过以下方法解决此问题: 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'