尝试使用 sqlcmd(从 Ubuntu 命令行)连接到 SQL Server 时出错?

2024-04-13

我在尝试连接时发现一些问题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(使用前将#替换为@)

尝试使用 sqlcmd(从 Ubuntu 命令行)连接到 SQL Server 时出错? 的相关文章

随机推荐