错误:TCP提供程序:错误代码0x2746。在Linux中通过终端安装Sql期间

Sub*_*i K 45 linux sql-server tcpclient

我正在尝试通过遵循文档https://docs.microsoft.com/pl-pl/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-2017在Linux中设置ms-sql服务器

SQL服务器状态为活动(正在运行)

执行命令时出现以下错误

sqlcmd -S localhost -U SA -P '<YourPassword>'
Run Code Online (Sandbox Code Playgroud)

错误:

Sqlcmd:错误:SQL Server的Microsoft ODBC驱动程序17:TCP提供程序:错误代码0x2746。Sqlcmd:错误:SQL Server的Microsoft ODBC驱动程序17:客户端无法建立连接。

我也通过给出命令来尝试

sqlcmd -S 127.0.0.1 -U SA -P '<YourPassword>' 
Run Code Online (Sandbox Code Playgroud)

但是问题没有解决,并且显示相同的错误。

当我尝试输入错误的密码时,它也会显示相同的错误。

请帮助我解决这个问题。提前致谢 !

小智 87

恢复为14.0.3192.2-2会有所帮助。

但是,不仅在从Ubuntu 16.04升级到18.04的情况下,而且在Ubuntu 18.04上的每次SQL Server 2017安装中,也可以使用Ola774指示的方法解决问题。

看来Microsoft现在在cu16中为cu10中应用的ssl版本问题弄乱了自己的补丁(https://techcommunity.microsoft.com/t5/SQL-Server/Installing-SQL-Server-2017-for-Linux -Ubuntu-18-04-LTS / ba-p / 385983)。但是链接ssl 1.0.0库是可行的。

因此,请执行以下操作:

  1. 停止SQL Server

    sudo systemctl stop mssql-server 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 通过以下方式打开服务配置的编辑器

    sudo systemctl edit mssql-server 
    
    Run Code Online (Sandbox Code Playgroud)

这将为原始服务配置创建替代。第一次使用覆盖文件(或更确切地说是“插入文件”)为空是正确的。

  1. 在编辑器中,将以下行添加到文件中并保存:

    [Service]
    Environment="LD_LIBRARY_PATH=/opt/mssql/lib" 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建指向OpenSSL 1.0的符号链接以供SQL Server使用:

    sudo ln -s /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 /opt/mssql/lib/libssl.so 
    sudo ln -s /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /opt/mssql/lib/libcrypto.so 
    
    Run Code Online (Sandbox Code Playgroud)
  3. 启动SQL Server

    sudo systemctl start mssql-server 
    
    Run Code Online (Sandbox Code Playgroud)

  • systemctl编辑mssql-server为空。我不知道这是否可以预期。添加环境路径并创建符号链接解决了我的问题。mssql-server:已安装:14.0.3223.3-15 (5认同)
  • 对我来说(Ubuntu 18.04)在步骤2中运行“ sudo nano /lib/systemd/system/mssql-server.service”以编辑服务配置。否则,配置就像@stinkyjak一样为空。另外,您必须在第5步之前运行“ sudo systemctl daemon-reload”。 (2认同)
  • 我刚刚在Ubuntu 18.04.3上安装了SQL Server 2019(15.0.2000.5),上面列出的内容仍然是答案 (2认同)

小智 31

如果您在使用 OpenSSL1.1.1 的 Debian 10 上遇到客户端问题,修复方法是恢复到以前默认的较弱密钥长度。这样做:

修改/etc/ssl/openssl.cnf配置文件如下(仅供参考,参见下面 Debian 10 中 OpenSSL 1.1.1 的已知问题):

将最后一行从 更改CipherString = DEFAULT@SECLEVEL=2CipherString = DEFAULT@SECLEVEL=1

https://github.com/microsoft/msphpsql/issues/1021

https://wiki.debian.org/ContinuousIntegration/TriagingTips/openssl-1.1.1

  • 只是插话说这也是我的解决办法。看起来比降级 openssl 安全得多 (2认同)
  • 如果您不想降低整个系统的安全性,可以在本地修改`/etc/ssl/openssl.cnf`的副本,并为需要与SQL Server通信的进程设置环境变量`OPENSSL_CONF` 指向它。 (2认同)

小智 24

sudo apt-get install mssql-server=14.0.3192.2-2
Run Code Online (Sandbox Code Playgroud)

恢复此版本对我有用。

我的情况是在Ubuntu Server 18.04.2上全新安装(所有最新版本),从sqlcmd接收到客户端连接错误:

Sqlcmd:错误:SQL Server的Microsoft ODBC驱动程序17:TCP提供程序:错误代码0x2746


Ale*_*age 15

简单地:

TCP 提供程序:错误代码 0x2746

这可能是 openssl 与 sql-server 协议/版本的问题。

检查您的 openssl 版本。在终端上运行以下命令openssl version

$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017
Run Code Online (Sandbox Code Playgroud)

如果您的 openssl 版本不是 1.0,那么您可能希望通过以下选项之一解决连接问题:

选项 1:解决您的 openssl

sed -i -E 's/(CipherString\s*=\s*DEFAULT@SECLEVEL=)2/\11/' /etc/ssl/openssl.cnf
Run Code Online (Sandbox Code Playgroud)

是的,它是.cnf。

如果您的/etc/ssl/openssl.cnf文件中有 SECLEVEL,此命令会将您的 SECLEVEL 更改为 1 。完毕。

选项 2:降级 openssl。

如果您的 openssl 版本是 1.1,您可能希望它是 1.0。这种方法是基本的:下载源代码,配置并制作二进制文件。构建所有内容可能需要几分钟时间:

cd /usr/local/src/
wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1k.tar.gz
tar -xvf /usr/local/src/openssl-1.0.1k.tar.gz
cd /usr/local/src/openssl-1.0.1k
./config --prefix=/usr/local/ --openssldir=/usr/local/openssl
make
make test
make install
mv /usr/bin/openssl /usr/bin/openssl-bak
Run Code Online (Sandbox Code Playgroud)

然后

cp -p /usr/local/openssl/bin/openssl /usr/bin/openssl
Run Code Online (Sandbox Code Playgroud)

或者

cp -p /usr/local/ssl/bin/openssl /usr/bin/openssl
ll -ld /usr/bin/openssl
openssl version
Run Code Online (Sandbox Code Playgroud)

如果您需要对某些特殊事物的见解,请发表评论:docker 图像或不同的系统等。

  • 选项 1 为我解决了从 docker 容器连接到 SQL Server 实例的问题,这个问题几乎花了一整天的时间才解决。SECLEVEL 1 工作正常。有关 seclevel 参考,请参阅 https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set_security_level.html#DEFAULT-CALLBACK-BEHAVIOUR (4认同)
  • 如果您不想降低整个系统的安全性,可以在本地修改`/etc/ssl/openssl.cnf`的副本,并为需要与SQL Server通信的进程设置环境变量`OPENSSL_CONF` 指向它。 (2认同)

Hab*_*een 11

您可以回滚到以前版本的命令:sudo apt-get install mssql-server=14.0.3192.2-2保留新版本通过以下MSSQL_Ubuntu的回答

禁用 mssql-server软件包上的更新

sudo apt-mark hold mssql-server
Run Code Online (Sandbox Code Playgroud)

这不会阻止您在需要时手动进行更新。


小智 8

从Ubuntu 16.04升级到18.04仍会导致一些问题

少数系统可能需要1.0版的OpenSSL库才能连接到SQL Server。可以按以下步骤使用OpenSSL 1.0:

停止SQL Server sudo systemctl停止mssql-server 打开服务配置的编辑器 sudo systemctl edit mssql-server 在编辑器中,将以下行添加到文件中并保存: [Service] Environment =“ LD_LIBRARY_PATH = / opt / mssql / lib” 为SQL Server创建指向OpenSSL 1.0的符号链接,以使用 sudo ln -s /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 /opt/mssql/lib/libssl.so sudo ln -s / usr / lib / x86_64-linux-gnu / libcrypto.so.1.0.0 /opt/mssql/lib/libcrypto.so 启动SQL Server sudo systemctl启动mssql-server 希望对您有所帮助


小智 5

同样的问题。这很糟糕,因为我现在在开发中,而那个“伟大的”更新只会消磨我的工作时间。

更新: MS SQL 版本回滚对我有帮助,但不幸的是我必须删除所有数据。感谢这是我的开发机器。下面的所有笔记都经过测试

ijin -> lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description:    Linux Mint 19 Tara
Release:        19
Codename:       tara
Run Code Online (Sandbox Code Playgroud)

1) 我已经卸载了 MS SQL 及其数据

sudo rm -rf /var/opt/mssql
sudo apt-get purge mssql-server mssql-tools
sudo apt-get autoremove
sudo apt-get autoclean
Run Code Online (Sandbox Code Playgroud)

2) 检查存储库中可用的 MS SQL 版本

ijin -> apt-cache policy mssql-server
Run Code Online (Sandbox Code Playgroud)

3) 安装自定义 MS SQL

sudo apt-get install mssql-server=15.0.1600.8-1 mssql-tools
Run Code Online (Sandbox Code Playgroud)

4) 设置

sudo /opt/mssql/bin/mssql-conf setup
Run Code Online (Sandbox Code Playgroud)

5) 内存限制,服务器代理

sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true 
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 3072
Run Code Online (Sandbox Code Playgroud)

4)重启,状态

sudo service mssql-server restart
sudo service mssql-server status
Run Code Online (Sandbox Code Playgroud)

openssl包和更新的 MS SQL 的交互可能存在一些问题,我无法确定它是否属实,但在谷歌上搜索了一些关于它的注释。所以你可以使用

apt-cache policy openssl
sudo apt-get install openssl=<version>
openssl version
Run Code Online (Sandbox Code Playgroud)

更改 openssl 版本并尝试连接。