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


71

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

SQL Server状态为“活动(正在运行)”。

执行命令时出现以下错误

sqlcmd -S localhost -U SA -P '<YourPassword>'

错误:

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

我也尝试通过命令

sqlcmd -S 127.0.0.1 -U SA -P '<YourPassword>' 

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


从SSMS,这表现为错误10054,当然十进制为0x2746。感谢您发布此问题...您已经帮助了很多人。
林恩(Lynn)

这个答案简化了您需要做的事情:stackoverflow.com/a/61111267/9535070
ofundefined

Answers:


119

[UPDATE 17.03.2020:Microsoft已发布带有Ubuntu 18.04存储库的SQL Server 2019 CU3。请参阅:https://techcommunity.microsoft.com/t5/sql-server/sql-server-2019-now-available-on-ubuntu-18-04-supported-on-sles/ba-p/1232210。我希望现在可以完全兼容而不会出现任何SSL问题。还没有测试喷气机。]

恢复到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 
    
  2. 通过打开服务配置的编辑器

    sudo systemctl edit mssql-server 
    

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

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

    [Service]
    Environment="LD_LIBRARY_PATH=/opt/mssql/lib" 
    
  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 
    
  3. 启动SQL Server

    sudo systemctl start mssql-server 
    

6
systemctl编辑mssql-server为空。我不知道这是否可以预期。添加环境路径并创建符号链接解决了我的问题。mssql-server:已安装:14.0.3223.3-15
stinkyjak

谢谢!此解决方案适用于mssql-server版本15.0.1900.25-1。
SergeyUr

3
对我来说(Ubuntu 18.04)在步骤2中运行“ sudo nano /lib/systemd/system/mssql-server.service”以编辑服务配置。否则,配置就像@stinkyjak一样是空的。另外,您必须在步骤5之前运行“ sudo systemctl daemon-reload”
。– Hunv

1
在debian 9中,我必须做同样的事情,但是要指向libssl.so.1.0.2和libcrypto.so.1.0.2。的符号链接。谢谢!
BigBother

4
我刚刚在Ubuntu 18.04.3上安装了SQL Server 2019(15.0.2000.5),上面列出的内容仍然是答案
Lance Perry

28
sudo apt-get install mssql-server=14.0.3192.2-2

恢复此版本对我有用。

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

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


感谢您为哥伦比亚提供的解决方案
-JALF

22

如果您在使用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安全得多
-Quinten,

如果可以的话,我会投票十次。在尝试将错误容器0x2​​746从python 3.7更新到3.8的过程中,我将头撞了两天后,它强制从Debian Stretch升级到Buster,这引入了这一更改并破坏了整个工作。冠军!
Vaelek

2
如果不想降低整个系统的安全性,则可以拥有的本地修改副本/etc/ssl/openssl.cnf,对于需要与SQL Server通信的过程,可以将环境变量设置OPENSSL_CONF为指向它。
liori

20

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

某些系统可能需要1.0版的OpenSSL库才能连接到SQL Server。可以通过以下方式使用OpenSSL 1.0:

停止SQL Server

sudo systemctl stop mssql-server

打开编辑器以进行服务配置

sudo systemctl edit mssql-server

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

[Service]
Environment="LD_LIBRARY_PATH=/opt/mssql/lib"

创建指向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

启动SQL Server

sudo systemctl start mssql-server

我希望这有帮助


谢谢!这正是我们所需要的。好像没有在安装时创建符号链接?无关,但是我们还必须在/ bin中符号链接到mssql-tools的sqlcmd,因为否则无法访问它。我们遇到的所有3个安装后问题都与未创建符号链接有关。
Radai

14

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

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

sudo apt-mark hold mssql-server

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


10

只是:

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

openssl与sql-server协议/版本之间可能存在问题。

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

$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

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

选项1:解决您的openssl

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

是的,它是.cnf。

如果/etc/ssl/openssl.cnf文件中包含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

然后

cp -p /usr/local/openssl/bin/openssl /usr/bin/openssl

要么

cp -p /usr/local/ssl/bin/openssl /usr/bin/openssl
ll -ld /usr/bin/openssl
openssl version

如果您需要一些特别的见解,请发表评论:docker映像或其他系统等。


3
选项1为我解决了一个从Docker容器连接到SQL Server实例的问题,这花了整整一天的时间才弄清楚。SECLEVEL 1工作正常。有关seclevel的参考,请参见openssl.org/docs/man1.1.1/man3/…–
mgefvert

如果您不想降低整个系统的安全性,则可以拥有的本地修改副本/etc/ssl/openssl.cnf,对于需要与SQL Server通信的过程,可以将环境变量设置OPENSSL_CONF为指向它。
liori

5

同样的问题。这太糟糕了,因为即时消息正在开发人员中,而“重大”更新只会浪费我的工作时间。

更新: MS SQL版本回滚对我有帮助,但是不幸的是我必须删除所有数据。谢谢,那是我的开发机器。以下所有注释均在

ijin -> lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description:    Linux Mint 19 Tara
Release:        19
Codename:       tara

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

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

ijin -> apt-cache policy mssql-server

3)安装自定义MS SQL

sudo apt-get install mssql-server=15.0.1600.8-1 mssql-tools

4)设置

sudo /opt/mssql/bin/mssql-conf setup

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

sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true 
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 3072

4)重启,状态

sudo service mssql-server restart
sudo service mssql-server status

openssl软件包和更新的MS SQL的交互可能存在一些问题,我找不到它是否正确,但在Google上搜索了一些说明。所以你可以使用

apt-cache policy openssl
sudo apt-get install openssl=<version>
openssl version

要更改openssl版本并尝试连接。


我推荐来自@MSSQL_Ubuntu的解决方案,其中包含env var和指向新ssl和crypto库的符号链接。也就是说,直到MS修复其更新。清除之前曾起作用,但后来我遇到了问题,但没有解决。
stinkyjak

10x拯救我的一天
Valentin Petkov

对我来说,下载libssl1.0.0_1.0.2l-1_bpo8 + 1_amd64.deb和openssl_1.0.2l-1_bpo8 + 1_amd64.deb并将libssl.so.1.0.0和libcrypto.so.1.0.0解压缩到/ opt / mssql / lib,我分别将它们命名为libssl.so和libcrypto.so。
约瑟夫·莫雷诺

1
这帮助我使用了debian 10(破坏者)
凤凰城,

4

今天将SQL Server更新到版本14.0.3223.3-15(Ubuntu 18.04.2 LTS),对于本地和远程连接都出现了完全相同的问题。回滚到以前的版本(在我的情况下为14.0.3192.2-2)对我有用:

sudo apt-get install mssql-server=14.0.3192.2-2

列出计算机上安装的版本:

apt-cache policy mssql-server


4

在尝试了几种解决方案后,我发现了这一点:https :
//www.youtube.com/watch?v=mfLbCarRzpg

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

sudo systemctl stop mssql-server
sudo systemctl edit mssql-server

添加这些行:

[Service]
Environment="LD_LIBRARY_PATH=/opt/mssql/lib"

然后重新启动服务器:

sudo systemctl start mssql-server

3

我在docker容器中遇到了同样的问题,我不得不降级msodbc,mssql-tools和lib ssl:

RUN ACCEPT_EULA=Y apt-get install msodbcsql17=17.3.1.1-1 mssql-tools=17.3.0.1-1 -y
RUN wget http://security.debian.org/debian-security/pool/updates/main/o/openssl1.0/libssl1.0.2_1.0.2s-1~deb9u1_amd64.deb \
    && dpkg -i libssl1.0.2_1.0.2s-1~deb9u1_amd64.deb

现在,它就像一种魅力。

以防万一,可以在这里找到旧版本的ms odbc驱动程序和工具: https //packages.microsoft.com/debian/9/prod/pool/main/m/

对于openssl:http : //security-cdn.debian.org/debian-security/pool/updates/main/o/openssl1.0/


msodbcsql17=17.3.1.1-1找不到包。
Necro

2

我在Debian 10上遇到了与SQL Server 2019(RTM-15.0.2000.5)相同的问题,两者都试图通过sqlcmd本地连接或通过SSMS远程连接。

与上述相同的解决方案能够为我解决此问题。我的OpenSSL版本为1.0.2,应针对任何可用版本进行调整。

sudo ln -s /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2 /opt/mssql/lib/libssl.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.2 /opt/mssql/lib/libcrypto.so

sudo systemctl restart mssql-server

现在本地和远程连接都可以正常工作


1

目前,只有这个版本正在运行,在openssl中看起来像问题。

使用Debian 9。

在进行任何操作之前,请确保您具有数据库的有效备份。

您需要清除mssql-server

apt-get remove --purge mssql-server

然后检查并删除/ var / opt / mssql和/ opt / mssql。

下次使用此版本15.0.1700.37-2

apt-get安装mssql-server = 15.0.1700.37-2

配置后,您应该能够在本地主机或127.0.0.1上连接到mssql server 2019

sqlcmd -S本地主机-U SA -P'YourPassword'


0

经过2天的研究,这个问题终于解决了!就我而言,我正在使用Fedora 28,因此对于那些使用RHEL的用户,我遵循了本教程:

在Red Hat Enterprise Linux 8 Beta上安装Microsoft SQL Server

那么,您正在使用Python 3吗?显然,您需要在安装Python 2之前使用以下代码切换到Python 2(我想在Ubuntu中也可以):

sudo alternatives --config python

从中创建存储库 https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo

下载它,然后在不解决依赖关系的情况下安装它。

之后,您可以运行mssql-conf的安装程序:

sudo /opt/mssql/bin/mssql-conf setup

并从该步骤继续Microsoft文档教程。

用于在RHEL上安装SQL Server 2017的Microsoft教程
Microsoft教程在Ubuntu上安装SQL Server 2017的Microsoft教程

注意:我在一些论坛上读到SQL Server 2019可能会导致该问题,因此我建议安装2017版本。


0

我有同样的问题。

我的操作系统是Ubuntu 18.10

sudo apt-get install mssql-server=14.0.3192.2-2

然后,在我的情况下,由于出现以下消息,所以无法进入我的SQL服务器

Sqlcmd:错误:SQL Server的Microsoft ODBC驱动程序17:用户'sa'登录失败。原因:服务器处于脚本升级模式。目前只有管理员可以连接。

然后,我按照ServerFault回答

在我的情况下,每个命令都花了一段时间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.