ubuntu 22.04 sqlcmd 无法连接到 ms sql server 2016

0 openssl sql-server-2016 ubuntu-22.04

我花了几天时间在谷歌搜索上寻找解决方案,但没有找到合适的解决方案。所以我把它贴在这里。

我有 3 台虚拟机。

虚拟机 1:
Windows Server 2012 R2 sp1,192.168.1.10
sql server 2016,端口 1432
sql server 2017,端口 1433

虚拟机2:
ubuntu 20.04
openssl 1.1.1p

虚拟机3:
ubuntu 22.04
openssl 3.0.2

在VM2(ubuntu 20.04)上:
连接到sql server 2016
sqlcmd -S 192.168.1.10,1432 -U test -P test
成功连接
连接到sql server 2017
sqlcmd -S 192.168.1.10,1433 -U test -P test
成功连接

在VM3(ubuntu 22.04)上:
连接到sql server 2017
sqlcmd -S 192.168.1.10,1433 -U test -P test
成功连接
连接到sql server 2016
sqlcmd -S 192.168.1.10,1432 -U test -P test
出现错误:
Sqlcmd:错误:适用于 SQL Server 的 Microsoft ODBC 驱动程序 17:TCP 提供程序:错误代码 0x2746。
Sqlcmd:错误:适用于 SQL Server 的 Microsoft ODBC 驱动程序 17:客户端无法建立连接。

然后我检查 VM1 上的 sql server 2016 日志,发现 2 个错误:
事件 ID:36888
生成致命警报并发送到远程端点。这可能会导致连接终止。TLS 协议定义的致命错误代码为 40。Windows SChannel 错误状态为 1205。
事件 ID:36874
从远程客户端应用程序收到 TLS 1.2 连接请求,但客户端应用程序不支持任何密码套件。服务器。SSL 连接请求失败。

我尝试过的:
1、修改/etc/ssl/openssl.cnf
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=1

2、降级openssl到1.1.1p

3、修改win server reg
HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2
键:Enabled Value:1

4、执行Windows更新

我已尝试了所有能找到的有关“TCP 提供程序:错误代码 0x2746”的建议。但没有一个适合我的情况。

当我们在 ubuntu 22.04 和 openssl 3.0.2 中使用 sqlcmd 到 ms sql server 2016 时,会发生此问题

任何想法?有什么建议吗?有什么解决办法吗?

小智 5

我也有同样的问题。寻找解决方案后,终于找到了这个解释

https://github.com/microsoft/msphpsql/issues/1419#issuecomment-1303626500

我继续使用 OpenSSL 3.0.2,只需要更改SECLEVEL0而不是1in/etc/ssl/openssl.conf

[system_default_sect]
CipherString = DEFAULT:@SECLEVEL=0
Run Code Online (Sandbox Code Playgroud)

它可以工作了,现在我可以使用 Ubuntu 22.04 连接到 SQL Server。