无法使用除 SSMS 之外的任何东西连接到 SQL Server 2016 SP1
Posted
技术标签:
【中文标题】无法使用除 SSMS 之外的任何东西连接到 SQL Server 2016 SP1【英文标题】:Unable to connect to SQL Server 2016 SP1 with anything except SSMS 【发布时间】:2018-07-12 07:46:49 【问题描述】:过去 11 个小时我一直在研究它,但我仍然无法弄清楚。它最初是一个 JAVA 连接问题,但此时我能够确认,能够连接到远程 SQL Server 实例的唯一工具是 SQL Server Management Studio。 JDBC 失败,Windows 7 ODBC 失败,Linux 的 DataStage 客户端失败,Visual Studio 2017 数据连接也失败。这是适用于其他服务器的示例 .Net 代码 (C#),但我遇到问题的服务器除外:
[TestCase(true)]
[TestCase(false)]
public void TestMethod(bool encrypt)
var sscsb = new SqlConnectionStringBuilder
DataSource = $"server\\instance,port",
NetworkLibrary = "dbmssocn",
PacketSize = 4096,
InitialCatalog = database,
IntegratedSecurity = false,
UserID = user,
Password = password,
Encrypt = encrypt,
TrustServerCertificate = true,
;
try
using (var conn = new SqlConnection(sscsb.ConnectionString))
conn.Open();
Assert.Pass("Connected");
catch (Exception e)
Assert.Fail(e.Message);
尝试从这个测试类连接时返回的错误很简单:
Message: Login failed for user 'etldstg'.
在 JAVA 中,取决于 TLS 设置的组合(请注意,登录始终使用自签名证书加密),有时我会得到:
The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "SQL Server did not return a response. The connection has been closed. ClientConnectionId:37dc2f52-c952-4f50-8fc9-62c3bdd84041".
我知道 JAVA 不支持 DHE 密码
Ignoring unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
Ignoring unsupported cipher suite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
Ignoring unsupported cipher suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
Ignoring unsupported cipher suite: TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
Ignoring unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
Ignoring unsupported cipher suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
Ignoring unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
Ignoring unsupported cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA256
Ignoring unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
Ignoring unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
Ignoring unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
Ignoring unsupported cipher suite: TLS_RSA_WITH_AES_128_CBC_SHA256
Ignoring unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
Ignoring unsupported cipher suite: TLS_RSA_WITH_AES_128_GCM_SHA256
Ignoring unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
Ignoring unsupported cipher suite: TLS_RSA_WITH_AES_256_GCM_SHA384
Ignoring unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
Ignoring unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
Ignoring unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
Ignoring unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
Ignoring unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
Ignoring unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
Ignoring unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
Ignoring unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
Ignoring unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
Ignoring unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
Ignoring unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
Ignoring unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
此时,我无法要求服务器管理员遵循微软的建议和Disable DHE by registry hacking
所以,我被困住了。有没有人见过类似的东西?你是怎么解决的?
【问题讨论】:
用户 etldstg 在数据库引擎上是否有工作帐户? 是的,正如我所提到的,我可以很好地连接到 SSMS。相同的用户,相同的密码,相同的一切。 SSMS 不使用不同的网络库吗? 也许这个答案适用于您的问题:***.com/a/9001761/44522 不,我也强迫了。只想确认一下。此外,当我查看 JAVA 中的 TLS 调试时,它确实显示正在尝试连接,当我将 TLSv1 用于 sslProtocol.. 【参考方案1】:首先检查您网络上服务器之间的路由是否打开。
如果是另一个问题,您可以要求管理员查看 SQL Server 实例上的 TCP/IP 协议是否处于活动状态。您可以通过在服务器上打开 SQL Server 配置管理器并检查网络协议来做到这一点。
【讨论】:
这并不能解释为什么 SSMS 可以工作,但其他人不能。感谢您的贡献。 明确一点,我可以连接到服务器正在侦听的端口,所以这不是路由问题。以上是关于无法使用除 SSMS 之外的任何东西连接到 SQL Server 2016 SP1的主要内容,如果未能解决你的问题,请参考以下文章
无法启动T-SQL调试。未能连接到计算器"."。这是在主机名解析时通常出现的暂时错误……
从 SSMS 连接到在容器内运行的 SQL Server Express