首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server SQLCMD命名实例登录超时已过期

SQL Server SQLCMD命名实例登录超时已过期
EN

Stack Overflow用户
提问于 2018-12-05 04:11:02
回答 1查看 4.4K关注 0票数 3

当我尝试连接到一个命名实例时,我从linux上的sqlcmd得到了一个错误。我在下面定义的docker容器中运行所有这些。

FROM microsoft/mssql-server-linux:2017-latest
RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y krb5-user
RUN apt-get install -y vim-common netcat

CMD ["/bin/bash"]

然后,我配置krb5.conf并为我想要使用的帐户运行kinit。这一切都很好。

我在这里阅读:https://docs.microsoft.com/en-us/sql/ssms/scripting/sqlcmd-connect-to-the-database-engine?view=sql-server-2017

其中之一应该可以连接到命名实例:

/opt/mssql-tools/bin/sqlcmd -S 'np:\\server\pipe\MSSQLi1\sql\query' -E -C
/opt/mssql-tools/bin/sqlcmd -S 'np:\\server\pipe\MSSQL$i1\sql\query' -E -C
/opt/mssql-tools/bin/sqlcmd -S 'lpc:server\i1' -E -C
/opt/mssql-tools/bin/sqlcmd -S 'server\i1' -E -C

它们都不起作用。所有这些命令的错误都是相同的。它是:

Sqlcmd:错误: Microsoft ODBC Driver 17 for SQL Server :登录超时。

Sqlcmd:错误: Microsoft ODBC Driver 17 for SQL Server : MAX_PROVS:无法打开与远程SQL Server实例87的共享内存连接。。

Sqlcmd:错误: Microsoft ODBC Driver 17 for SQL Server :建立与SQL Server的连接时出现与网络有关的错误或特定于实例的错误。找不到或无法访问服务器。检查实例名称是否正确,以及SQL Server是否配置为允许远程连接。有关详细信息,请参阅SQL Server联机丛书。

显然,sqlcmd正在尝试连接到错误的端口。

因此,我能够使用:

echo '020000' | xxd -r -p | nc -u server 1434

来查询SQL Server的命名实例列表,就像我期望sqlcmd自己做的那样。SQL Server愉快地回复了它的列表,该列表中就是我正在寻找的实例,位于端口60655上。

随后,我尝试了以下成功的命令:

/opt/mssql-tools/bin/sqlcmd -S 'server,60655\i1' -E -C

现在,我的问题是:如何让sqlcmd解析命名实例的端口并连接到它?只要我显式地提供命名实例的端口,我就能够正确连接。

更新更多信息:

我查看了SQL Server浏览器的规范,了解到我可以这样做来请求实例i1(对于ascii‘i1’,6931是十六进制):

echo '046931' | xxd -r -p | nc -w 1 -u server 1434

在docker容器中,打印以下内容:

RServerName;SERVER;InstanceName;I1;IsClustered;No;Version;13.2.5026.0;tcp;60655;;

因此,SQL Server浏览器工作正常。

然后,我尝试在主机上运行以下代码:

nc -l -u 1434

在docker容器中:

/opt/mssql-tools/bin/sqlcmd -S 'host\i2'

而且netcat没有收到任何消息,这意味着sqlcmd甚至没有尝试与sql server浏览器进行通信。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53620686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档