Fehler: TCP-Anbieter: Fehlercode 0x2746. Während des SQL-Setups unter Linux über das Terminal

71

Ich versuche, den ms-sql-Server unter Linux einzurichten, indem ich der Dokumentation https://docs.microsoft.com/pl-pl/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-2017 folge

Der SQL Server-Status lautet Aktiv (Wird ausgeführt).

Beim Ausführen des Befehls wird der folgende Fehler angezeigt

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

Error:

SQLcmd: Fehler: Microsoft ODBC-Treiber 17 für SQL Server: TCP-Anbieter: Fehlercode 0x2746. SQLqd: Fehler: Microsoft ODBC-Treiber 17 für SQL Server: Client kann keine Verbindung herstellen.

Ich habe es auch versucht, indem ich den Befehl gegeben habe

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

Es wird jedoch der gleiche Fehler angezeigt. Wenn ich das falsche Passwort ausprobiert habe, wird auch der gleiche Fehler angezeigt.

Suba Nandhini K.
quelle
In SSMS manifestiert sich dies als Fehler 10054, der natürlich 0x2746 dezimal ist. Vielen Dank, dass Sie diese Frage gestellt haben. Sie haben einer Menge Menschen geholfen.
Lynn Crumbling
Diese Antwort vereinfacht, was Sie tun müssen: stackoverflow.com/a/61111267/9535070
ofundefined

Antworten:

119

[UPDATE 17.03.2020: Microsoft hat SQL Server 2019 CU3 mit einem Ubuntu 18.04-Repository veröffentlicht. Siehe: https://techcommunity.microsoft.com/t5/sql-server/sql-server-2019-now-available-on-ubuntu-18-04-supported-on-sles/ba-p/1232210 . Ich hoffe, dass dies jetzt ohne SSL-Probleme voll kompatibel ist. Ich habe es nicht getestet.]

Das Zurücksetzen auf 14.0.3192.2-2 hilft.

Es ist jedoch möglich, das Problem auch mit der von Ola774 angegebenen Methode zu lösen, nicht nur bei einem Upgrade von Ubuntu 16.04 auf 18.04, sondern bei jeder Installation von SQL Server 2017 unter Ubuntu 18.04.

Es scheint, dass Microsoft jetzt in cu16 einen eigenen Patch für die in cu10 angewendeten Probleme mit der SSL-Version durcheinander gebracht hat ( https://techcommunity.microsoft.com/t5/SQL-Server/Installing-SQL-Server-2017-for-Linux) -on-Ubuntu-18-04-LTS / ba-p / 385983 ). Das Verknüpfen der SSL 1.0.0-Bibliotheken funktioniert jedoch.

Gehen Sie also einfach wie folgt vor:

  1. Stoppen Sie SQL Server

    sudo systemctl stop mssql-server 
    
  2. Öffnen Sie den Editor für die Dienstkonfiguration von

    sudo systemctl edit mssql-server 
    

Dadurch wird eine Überschreibung für die ursprüngliche Dienstkonfiguration erstellt. Es ist richtig, dass die Override-Datei, genauer gesagt "Drop-in-File", bei der ersten Verwendung leer ist.

  1. Fügen Sie im Editor die folgenden Zeilen zur Datei hinzu und speichern Sie sie:

    [Service]
    Environment="LD_LIBRARY_PATH=/opt/mssql/lib" 
    
  2. Erstellen Sie symbolische Links zu OpenSSL 1.0, damit SQL Server Folgendes verwenden kann:

    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. Starten Sie SQL Server

    sudo systemctl start mssql-server 
    
MSSQL_Ubuntu
quelle
6
systemctl edit mssql-server war leer. Ich weiß nicht, ob das zu erwarten war. Durch Hinzufügen des Umgebungspfads und Erstellen von Symlinks wurde mein Problem behoben. mssql-server: Installiert: 14.0.3223.3-15
stinkyjak
Vielen Dank! Diese Lösung funktioniert für mssql-server Version 15.0.1900.25-1.
SergeyUr
3
Für mich (Ubuntu 18.04) führen Sie in Schritt 2 "sudo nano /lib/systemd/system/mssql-server.service" aus, um die Dienstkonfiguration zu bearbeiten. Ansonsten ist die Konfiguration leer, wie @stinkyjak geschrieben hat. Zusätzlich müssen Sie "sudo systemctl daemon-reload" vor Schritt 5
ausführen
1
In Debian 9 musste ich dasselbe tun, aber symbolische Links zu libssl.so.1.0.2 und libcrypto.so.1.0.2 zeigen. Vielen Dank!
BigBother
4
Ich habe gerade SQL Server 2019 (15.0.2000.5) unter Ubuntu 18.04.3 installiert und was oben aufgeführt ist, ist immer noch die Antwort
Lance Perry
28
sudo apt-get install mssql-server=14.0.3192.2-2

Das Zurücksetzen auf diese Version hat bei mir funktioniert.

Mein Szenario war eine Neuinstallation (alles neueste Version) auf Ubuntu Server 18.04.2, bei der der Clientverbindungsfehler von sqlcmd empfangen wurde:

SQLcmd: Fehler: Microsoft ODBC-Treiber 17 für SQL Server: TCP-Anbieter: Fehlercode 0x2746

Kurt Preston
quelle
Vielen Dank für Ihre Lösung aus Kolumbien
JALF
22

Wenn Sie Probleme mit dem Client unter Debian 10 mit OpenSSL1.1.1 haben, müssen Sie auf die zuvor standardmäßig schwächere Schlüssellänge zurückgreifen. Um dies zu tun:

Ändern /etc/ssl/openssl.cnf Konfigurationsdatei wie folgt (siehe bekannte Probleme mit OpenSSL 1.1.1 in Debian 10 unten):

Ändern Sie die letzte Zeile von CipherString = DEFAULT@SECLEVEL=2nachCipherString = DEFAULT@SECLEVEL=1

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

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

Miktea
quelle
Ich mischte mich nur ein, um zu sagen, dass dies auch meine Lösung war. Scheint viel sicherer als das Herabstufen von openssl
Quinten
Ich würde dies ein Dutzend Mal positiv bewerten, wenn ich könnte. Nachdem ich 2 Tage lang meinen Kopf gegen den Fehlercode 0x2746 geschlagen hatte, während ich versuchte, meinen Entwicklungscontainer von Python 3.7 auf 3.8 zu aktualisieren, erzwang er ein Upgrade von Debian Stretch auf Buster, das diese Änderung einführte und die gesamten Arbeiten brach ... Dies löste es wie folgt ein Champion!
Vaelek
2
Wenn Sie die Sicherheit nicht für das gesamte System herabstufen möchten, können Sie eine lokale, geänderte Kopie von haben /etc/ssl/openssl.cnfund für den Prozess, der mit SQL Server kommunizieren muss, die Umgebungsvariable so einstellen OPENSSL_CONF, dass sie darauf verweist.
Liori
20

Ein Upgrade von Ubuntu 16.04 auf 18.04 führt immer noch zu einigen Problemen

Für einige Systeme ist möglicherweise Version 1.0 der OpenSSL-Bibliotheken erforderlich, um eine Verbindung zu SQL Server herzustellen. Die Verwendung von OpenSSL 1.0 kann wie folgt erfolgen:

Stoppen Sie SQL Server

sudo systemctl stop mssql-server

Öffnen Sie den Editor für die Dienstkonfiguration

sudo systemctl edit mssql-server

Fügen Sie im Editor die folgenden Zeilen zur Datei hinzu und speichern Sie sie:

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

Erstellen Sie symbolische Links zu OpenSSL 1.0, damit SQL Server sie verwenden kann

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

Starten Sie SQL Server

sudo systemctl start mssql-server

ich hoffe das hilft

Ola774
quelle
Vielen Dank! Genau das haben wir gebraucht. Scheint, als ob die Symlinks bei der Installation nicht erstellt wurden? Nicht verwandt, aber wir mussten auch einen Symlink zu sqlcmd von mssql-tools in / bin erstellen, da sonst nicht darauf zugegriffen werden konnte. Alle drei Probleme nach der Installation hatten mit nicht erstellten Symlinks zu tun.
Radai
14

Sie können entweder Rollback auf die vorherige Version mit dem Befehl sudo apt-get install mssql-server=14.0.3192.2-2oder halten Sie die neue Version von folgenden MSSQL_Ubuntu Antwort .

Auch deaktivieren Sie die Updates auf dem MSSQL-Server - Paket:

sudo apt-mark hold mssql-server

Dies hindert Sie nicht daran, es manuell zu aktualisieren, wenn Sie dies wünschen.

Habardeen
quelle
10

Einfach:

TCP-Anbieter: Fehlercode 0x2746

Dies ist wahrscheinlich ein Problem mit dem Protokoll / der Version von openssl vs. sql-server.

Überprüfen Sie Ihre openssl-Version. Führen Sie den folgenden Befehl auf Ihrem Terminal aus openssl version:

$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

Wenn Ihre openssl-Version nicht 1.0 ist, möchten Sie das Verbindungsproblem möglicherweise mit einer der folgenden Optionen lösen:

Option 1: Umgehen Sie Ihr openssl

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

Ja, es ist .cnf.

Dieser Befehl ändert Ihr SECLEVEL in 1, wenn Sie es in Ihrer /etc/ssl/openssl.cnfDatei haben. Getan.

Option 2: Downgrade openssl.

Wenn Ihre openssl-Version 1.1 ist, möchten Sie wahrscheinlich 1.0. Diese Methode ist grundlegend: Laden Sie den Quellcode herunter, konfigurieren Sie die Binärdatei und erstellen Sie sie. Es kann einige Minuten dauern, bis alles fertig ist:

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

dann

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

oder

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

Hinterlassen Sie Kommentare, wenn Sie Einblicke für etwas Besonderes benötigen: Docker-Image oder ein anderes System usw.

ofundefined
quelle
3
Option 1 löste für mich ein Problem beim Herstellen einer Verbindung zu SQL Server-Instanzen aus einem Docker-Container, dessen Ermittlung fast einen ganzen Tag dauerte. SECLEVEL 1 hat gut funktioniert. Weitere Referenzen finden Sie unter openssl.org/docs/man1.1.1/man3/…
mgefvert
Wenn Sie die Sicherheit nicht für das gesamte System herabstufen möchten, können Sie eine lokale, geänderte Kopie von haben /etc/ssl/openssl.cnfund für den Prozess, der mit SQL Server kommunizieren muss, die Umgebungsvariable so einstellen OPENSSL_CONF, dass sie darauf verweist.
Liori
5

Gleiches Problem. Es ist schrecklich, weil ich jetzt in der Entwicklung bin und dieses "großartige" Update nur meine Arbeitszeit tötet.

Update: Das Rollback der MS SQL-Version hat mir geholfen, aber leider muss ich alle meine Daten entfernen. Danke, dass es meine Entwicklungsmaschine war. Alle Hinweise unten getestet am

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

1) Ich habe MS SQL und seine Daten entfernt

sudo rm -rf /var/opt/mssql
sudo apt-get purge mssql-server mssql-tools
sudo apt-get autoremove
sudo apt-get autoclean

2) Überprüfen Sie die verfügbaren Versionen von MS SQL im Repository

ijin -> apt-cache policy mssql-server

3) Benutzerdefiniertes MS SQL installiert

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

4) Einrichtung

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

5) Mem Limit, Server Agent

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

4) Neustart, Status

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

Wahrscheinlich gibt es einige Probleme mit der Interaktion von openssl- Paket und aktualisiertem MS SQL. Ich kann nicht feststellen, ob es wahr ist oder nicht, habe aber ein paar Anmerkungen dazu gegoogelt. So können Sie verwenden

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

Um die openssl-Version zu ändern und eine Verbindung herzustellen.

Ilya Rogojin
quelle
Ich empfehle die Lösung von @MSSQL_Ubuntu mit der env var und den Symlinks zu neuen SSL- und Crypto-Bibliotheken. Das heißt, bis MS das Update behebt. Das Spülen hat vorher funktioniert, aber dann hatte ich das Problem später und es tat es nicht.
Stinkyjak
10x rette meinen Tag
Valentin Petkov
Für mich funktionierte Download libssl1.0.0_1.0.2l-1_bpo8 + 1_amd64.deb und openssl_1.0.2l-1_bpo8 + 1_amd64.deb und extrahiere libssl.so.1.0.0 und libcrypto.so.1.0.0 nach / opt / mssql / lib und ich haben sie als libssl.so bzw. libcrypto.so bezeichnet.
Joseph Moreno
1
Dies half mir mit Debian 10 (Buster)
Phoenix
4

SQL Server wurde heute auf die Version 14.0.3223.3-15 (Ubuntu 18.04.2 LTS) aktualisiert und hat genau das gleiche Problem für lokale und Remoteverbindungen. Das Zurücksetzen auf die vorherige Version (in meinem Fall 14.0.3192.2-2) hat bei mir funktioniert:

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

Listen Sie die auf Ihrem Computer installierten Versionen auf:

apt-cache policy mssql-server

Alexey Busygin
quelle
4

Nachdem ich einige Lösungen ausprobiert hatte, fand ich Folgendes:
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

Fügen Sie diese Zeilen hinzu:

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

Starten Sie dann den Server neu:

sudo systemctl start mssql-server
Patrick
quelle
3

Ich hatte das gleiche Problem in einem Docker-Container. Ich musste msodbc, mssql-tools und lib ssl herunterstufen:

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

Jetzt funktioniert es wie ein Zauber.

Nur für den Fall, ältere Versionen des ms odbc-Treibers und der Tools finden Sie hier: https://packages.microsoft.com/debian/9/prod/pool/main/m/

Für openssl: http://security-cdn.debian.org/debian-security/pool/updates/main/o/openssl1.0/

X99
quelle
msodbcsql17=17.3.1.1-1Paket nicht gefunden.
Necro
2

Ich habe das gleiche Problem mit SQL Server 2019 (RTM - 15.0.2000.5) unter Debian 10 festgestellt. Beide haben versucht, eine lokale Verbindung mit sqlcmd oder remote über SSMS herzustellen.

Die gleiche Auflösung wie oben erwähnt konnte dies für mich lösen. Meine OpenSSL-Version war 1.0.2, dies sollte für jede verfügbare Version angepasst werden.

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

Jetzt funktionieren sowohl lokale als auch Remoteverbindungen einwandfrei

gp van eron
quelle
1

In diesem Moment funktioniert nur diese Version, sieht aus wie ein Problem in openssl.

Arbeiten an Debian 9.

Stellen Sie vor allem sicher, dass Sie eine gültige Sicherung der Datenbank haben.

Sie müssen mssql-server löschen

apt-get remove --purge mssql-server

und danach überprüfen und löschen Sie / var / opt / mssql und / opt / mssql.

Verwenden Sie als nächstes diese Version 15.0.1700.37-2

apt-get install mssql-server = 15.0.1700.37-2

Nach der Konfiguration sollten Sie in der Lage sein, eine Verbindung zum MSSQL-Server 2019 unter localhost oder 127.0.0.1 herzustellen

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

Michał Majewski
quelle
0

Nach 2 Tagen Arbeit an diesem Problem habe ich es endlich gelöst! In meinem Fall verwende ich Fedora 28, daher habe ich für Benutzer von RHEL dieses Tutorial befolgt:

Installieren von Microsoft SQL Server unter Red Hat Enterprise Linux 8 Beta

Verwenden Sie Python 3? Anscheinend müssen Sie vor der Installation zu Python 2 wechseln, indem Sie den folgenden Code verwenden (ich denke, in Ubuntu würde das auch funktionieren):

sudo alternatives --config python

Erstellen Sie ein Repository unter https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo

Laden Sie es herunter und installieren Sie es, ohne Abhängigkeiten aufzulösen.

Danach können Sie das Setup für mssql-conf ausführen:

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

Fahren Sie ab diesem Schritt mit dem Microsoft-Dokumentations-Tutorial fort.

Microsoft Tutorial zur Installation von SQL Server 2017 unter RHEL
Microsoft Tutorial zur Installation von SQL Server 2017 unter Ubuntu

Hinweis: Ich habe in einigen Foren gelesen, dass SQL Server 2019 dieses Problem möglicherweise verursacht. Daher empfehle ich, die Version 2017 zu installieren.

Rafael Machado
quelle
0

Ich habe das gleiche Problem.

Mein Betriebssystem ist Ubuntu 18.10

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

In meinem Fall konnte ich meinen SQL Server nicht eingeben, da die folgende Meldung angezeigt wurde

SQLqd: Fehler: Microsoft ODBC-Treiber 17 für SQL Server: Anmeldung für Benutzer 'sa' fehlgeschlagen. Grund: Der Server befindet sich im Skript-Upgrade-Modus. Derzeit kann nur ein Administrator eine Verbindung herstellen.

Dann folgte ich der ServerFault-Antwort

In meinem Fall dauerte jeder Befehl eine Weile.

Hiroyuki Terauchi
quelle