我在尝试连接时发现一些问题SQL服务器来自 Ubuntu 机器的实例,使用sqlcmd.
所以我安装了sqlcmd正如这里所解释的:https://learn.microsoft.com/it-it/sql/linux/sql-server-linux-setup-tools?view=sql-server-ver15#ubuntu https://learn.microsoft.com/it-it/sql/linux/sql-server-linux-setup-tools?view=sql-server-ver15#ubuntu
SQL服务器似乎可以访问,因为我可以通过Telnet成功连接到其IP的1433端口。
然后我尝试通过以下方式连接到该服务器上的一个数据库:
./sqlcmd -S MY_SERVER_IP\ESB_WSO2_USER_DB
Where YOUR_SERVER_IP是该服务器的 IP,并且ESB_WSO2_USER_DB是该服务器上数据库的名称。
问题是我收到以下消息错误作为输出:
Sqlcmd:错误:适用于 SQL Server 的 Microsoft ODBC 驱动程序 17:登录超时
已到期。
Sqlcmd:错误:适用于 SQL Server 的 Microsoft ODBC 驱动程序 17
:TCP 提供商:错误代码 0x2AFA。
Sqlcmd:错误:Microsoft ODBC
SQL Server 驱动程序 17:与网络相关或特定于实例
建立与 SQL Server 的连接时发生错误。
找不到服务器或无法访问服务器。检查实例名称是否为
正确并且 SQL Server 是否配置为允许远程连接。
有关详细信息,请参阅 SQL Server 联机丛书。
那么可能是什么问题呢?这是否与我有关sqlcmd安装(可能是一些配置错误)或与我的连接字符串相关的东西?或与此相关的东西SQL服务器数据库?
该消息表示 SQL Server 可能不允许外部连接,但是...如果是这样...为什么 Telnet 连接工作正常?
-S MY_SERVER_IP\ESB_WSO2_USER_DB
表示服务器的IP,name实例的。 Windows 主机可以运行 SQL Server 的多个实例,当运行时,后面的实例需要指定与默认实例名称不同的名称(MSSQLSERVER
)并在不同的端口上运行。因此,您可以稍后指定名称,而不是端口(如果您正在运行命名服务器)。例如SRVSQLHost\DevInstance
将连接到实例DevInstance
在服务器上SRVSQLHost
; not数据库DevInstance
在实例上MSSQLSERVER
在主机上SRVSQLHost
.
您可以使用以下命令传递数据库的名称-d
转变。如果你简单地跑步sqlcmd
(在 Bash 中,而不是 Powershell 中,您需要在其中使用sqlcmd -?
)你会看到输入开关:
:~$ sqlcmd
Microsoft (R) SQL Server Command Line Tool
Version 17.4.0001.1 Linux
Copyright (c) 2012 Microsoft. All rights reserved.
usage: sqlcmd [-U login id] [-P password]
[-S server or Dsn if -D is provided]
[-H hostname] [-E trusted connection]
[-N Encrypt Connection][-C Trust Server Certificate]
[-d use database name] [-l login timeout] [-t query timeout]
[-h headers] [-s colseparator] [-w screen width]
[-a packetsize] [-e echo input] [-I Enable Quoted Identifiers]
[-c cmdend]
[-q "cmdline query"] [-Q "cmdline query" and exit]
[-m errorlevel] [-V severitylevel] [-W remove trailing spaces]
[-u unicode output] [-r[0|1] msgs to stderr]
[-i inputfile] [-o outputfile]
[-k[1|2] remove[replace] control characters]
[-y variable length type display width]
[-Y fixed length type display width]
[-p[1] print statistics[colon format]]
[-R use client regional setting]
[-K application intent]
[-M multisubnet failover]
[-b On error batch abort]
[-D Dsn flag, indicate -S is Dsn]
[-X[1] disable commands, startup script, environment variables [and exit]]
[-x disable variable substitution]
[-? show syntax summary]
请注意,Windows Powershell 上可用的某些开关在 Bash 和 Powershell for Linux 中不可用;比如参数。
所以,对于你所拥有的你想要的:
sqlcmd -S MY_SERVER_IP -d ESB_WSO2_USER_DB -U YOUR_LOGIN_NAME
(我假设你需要通过-U
切换,除非你 have 在你的 Ubuntu 实例上配置 kerberos,但你没有提到它,所以我假设没有。请注意,LOGIN
for -U
必须是 SQL 身份验证登录,而不是 AD 登录。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)