Herstellen einer Verbindung über Linux oder macOS
In diesem Artikel wird beschrieben, wie Sie eine Verbindung mit einer SQL Server-Datenbank herstellen können.
Verbindungseigenschaften
Weitere Informationen zu den Schlüsselwörtern und Attributen der Verbindungszeichenfolge, die unter Linux und macOS unterstützt werden, finden Sie unter Schlüsselwörter und Attribute von DNS- und Verbindungszeichenfolgen.
Wichtig
Geben Sie beim Herstellen einer Verbindung mit einer Datenbank, welche Datenbankspiegelung verwendet (oder einen Failoverpartner hat), nicht den Namen der Datenbank in der Verbindungszeichenfolge an. Senden Sie stattdessen den Befehl use Datenbankname, um eine Verbindung mit der Datenbank herzustellen, bevor Sie Ihre Abfragen ausführen.
Einer der folgenden Werte kann an das Driver-Schlüsselwort übergeben werden:
Der Name, den Sie verwendet haben, als Sie den Treiber installiert haben.
Der Pfad zur Treiberbibliothek, welcher in der Vorlagen-INI-Datei angegeben war, die wiederum verwendet wurde, um den Treiber zu installieren.
DSNs sind optional. Sie können einen DSN zum Definieren von Verbindungszeichenfolgen-Schlüsselwörtern unter einem DSN
-Namen verwenden, auf den Sie dann in der Verbindungszeichenfolge verweisen können. Erstellen und bearbeiten Sie zum Erstellen eines DSN (falls erforderlich) die Datei ~/.odbc.ini (.odbc.ini
in Ihrem Stammverzeichnis) für einen Benutzer-DSN, auf den nur der aktuelle Benutzer bzw. die aktuelle Benutzerin zugreifen kann, oder /etc/odbc.ini
für einen System-DSN (Administratorrechte erforderlich). Die folgende „odbc.ini“-Datei ist ein Beispiel, das die minimal erforderlichen Einträge für einen DSN zeigt:
# [DSN name]
[MSSQLTest]
Driver = ODBC Driver 18 for SQL Server
# Server = [protocol:]server[,port]
Server = tcp:localhost,1433
Encrypt = yes
#
# Note:
# Port isn't a valid keyword in the odbc.ini file
# for the Microsoft ODBC driver on Linux or macOS
#
Zum Herstellen einer Verbindung mit dem oben genannten DSN in einer Verbindungszeichenfolge geben Sie das DSN
-Schlüsselwort wie folgt an: DSN=MSSQLTest;UID=my_username;PWD=my_password
Die oben aufgeführte Verbindungszeichenfolge entspricht dem Angeben einer Verbindungszeichenfolge ohne das DSN
-Schlüsselwort. Beispiel: Driver=ODBC Driver 18 for SQL Server;Server=tcp:localhost,1433;Encrypt=yes;UID=my_username;PWD=my_password
Sie können optional das Protokoll und den Port für die Verbindung mit dem Server angeben. Beispiel: Server=tcp:Servername,12345. Das einzige von Linux- und macOS-Treibern unterstützte Protokoll ist tcp
.
Um eine Verbindung mit einer benannten Instanz auf einem statischen Port herzustellen, verwenden Sie Server=servername,port_number. Das Herstellen einer Verbindung mit einem dynamischen Port wird vor Version 17.4 nicht unterstützt.
Alternativ können Sie die DSN-Informationen auch einer Vorlagendatei hinzufügen und den folgenden Befehl ausführen, um sie ~/.odbc.ini
hinzuzufügen:
odbcinst -i -s -f <template_file>
Eine umfassende Dokumentation zu INI-Dateien und odbcinst
finden Sie in der unixODBC-Dokumentation. Einträge in der für den ODBC Driver for SQL Server spezifischen Datei odbc.ini
finden Sie unter den unter Linux und macOS unterstützten Schlüsselwörtern und Attributen von DNS- und Verbindungszeichenfolgen.
Sie können die Verbindung mit isql
testen, um zu überprüfen, ob Ihr Treiber funktioniert, oder diesen Befehl verwenden:
bcp master.INFORMATION_SCHEMA.TABLES out OutFile.dat -S <server> -U <name> -P <password>
Über TLS/SSL
Für die Verschlüsselung von Verbindungen mit SQL Server können Sie Transport Layer Security (TLS) verwenden, das früher als Secure Sockets Layer (SSL) bezeichnet wurde. TLS schützt SQL Server-Benutzernamen und -Kennwörter über das Netzwerk. Zudem überprüft TLS zum Schutz vor Man-in-the-Middle-Angriffen (MITM) auch die Identität des Servers.
Das Aktivieren der Verschlüsselung erhöht die Sicherheit auf Kosten der Leistung.
Weitere Informationen dazu finden Sie unter Verschlüsseln von Verbindungen zu SQL Server und Verwenden von Verschlüsselung ohne Überprüfung.
Unabhängig von den Einstellungen für Encrypt und TrustServerCertificatewerden die Serveranmeldeinformationen (Benutzername und Kennwort) immer verschlüsselt. Die folgende Tabelle zeigt den Effekt der Einstellungen für Encrypt und TrustServerCertificate.
ODBC-Treiber 18 und neuer
Verschlüsselungseinstellung | TrustServerCertificate | Erzwingen der Verschlüsselung durch Server | Ergebnis |
---|---|---|---|
Nein | Nr. | Nein | Das Serverzertifikat wird nicht überprüft. Zwischen dem Client und dem Server verschickte Daten sind nicht verschlüsselt. |
Nein | Ja | Nein | Das Serverzertifikat wird nicht überprüft. Zwischen dem Client und dem Server verschickte Daten sind nicht verschlüsselt. |
Ja | Nr. | Nein | Serverzertifikat wird überprüft. Zwischen dem Client und dem Server verschickte Daten sind verschlüsselt. |
Ja | Ja | Nein | Das Serverzertifikat wird nicht überprüft. Zwischen dem Client und dem Server verschickte Daten sind verschlüsselt. |
Nein | Nein | Ja | Serverzertifikat wird überprüft. Zwischen dem Client und dem Server verschickte Daten sind verschlüsselt. |
Nein | Ja | Ja | Das Serverzertifikat wird nicht überprüft. Zwischen dem Client und dem Server verschickte Daten sind verschlüsselt. |
Ja | Keine | Ja | Serverzertifikat wird überprüft. Zwischen dem Client und dem Server verschickte Daten sind verschlüsselt. |
Ja | Ja | Ja | Das Serverzertifikat wird nicht überprüft. Zwischen dem Client und dem Server verschickte Daten sind verschlüsselt. |
Strict | - | - | TrustServerCertificate wird ignoriert. Serverzertifikat wird überprüft. Zwischen dem Client und dem Server verschickte Daten sind verschlüsselt. |
Hinweis
„Strict“ ist nur für Server verfügbar, die TDS 8.0-Verbindungen unterstützen.
ODBC-Treiber 17 und älter
Verschlüsselungseinstellung | TrustServerCertificate | Erzwingen der Verschlüsselung durch Server | Ergebnis |
---|---|---|---|
Nein | Nr. | Nein | Das Serverzertifikat wird nicht überprüft. Zwischen dem Client und dem Server verschickte Daten sind nicht verschlüsselt. |
Nein | Ja | Nein | Das Serverzertifikat wird nicht überprüft. Zwischen dem Client und dem Server verschickte Daten sind nicht verschlüsselt. |
Ja | Nr. | Nein | Serverzertifikat wird überprüft. Zwischen dem Client und dem Server verschickte Daten sind verschlüsselt. |
Ja | Ja | Nein | Das Serverzertifikat wird nicht überprüft. Zwischen dem Client und dem Server verschickte Daten sind verschlüsselt. |
Nein | Nein | Ja | Das Serverzertifikat wird nicht überprüft. Zwischen dem Client und dem Server verschickte Daten sind verschlüsselt. |
Nein | Ja | Ja | Das Serverzertifikat wird nicht überprüft. Zwischen dem Client und dem Server verschickte Daten sind verschlüsselt. |
Ja | Keine | Ja | Serverzertifikat wird überprüft. Zwischen dem Client und dem Server verschickte Daten sind verschlüsselt. |
Ja | Ja | Ja | Das Serverzertifikat wird nicht überprüft. Zwischen dem Client und dem Server verschickte Daten sind verschlüsselt. |
Bei Verwendung der Verbindungsverschlüsselung sollte der Name (oder die IP-Adresse) in einem allgemeinen Namen (Common Name, CN) oder einem alternativen Antragstellernamen (Subject Alternative Name, SAN) in einem TLS-/SSL-Zertifikat von SQL Server genau mit dem in der Verbindungszeichenfolge angegebenen Servernamen (oder der IP-Adresse) übereinstimmen. Das Schlüsselwort HostnameInCertificate
(v18.0+) kann verwendet werden, um einen alternativen Namen anzugeben, der zum Abgleich mit den Namen im TLS/SSL-Zertifikat verwendet wird. Wenn das Schlüsselwort angegeben wird, muss das TLS/SSL-Zertifikat von SQL Server entweder mit einem der Servernamen oder mit dem HostnameInCertificate
übereinstimmen.
Standardmäßig überprüfen verschlüsselte Verbindungen immer das Zertifikat des Servers. Wenn Sie jedoch eine Verbindung mit einem Server herstellen, der über ein selbstsigniertes Zertifikat verfügt, und nicht den strengen Verschlüsselungsmodus verwenden, können Sie die Option TrustServerCertificate
hinzufügen, um die Überprüfung des Zertifikats anhand der Liste der vertrauenswürdigen Zertifizierungsstellen zu umgehen:
Driver={ODBC Driver 18 for SQL Server};Server=ServerNameHere;Encrypt=YES;TrustServerCertificate=YES
Im strengen Verschlüsselungsmodus wird das Zertifikat immer überprüft. Als Option für die Standardzertifikatüberprüfung kann das Schlüsselwort ServerCertificate
(v18.1+) verwendet werden, um den Pfad zu einer Zertifikatdatei anzugeben, die mit dem SQL Server-Zertifikat abgeglichen werden soll. Diese Option ist nur verfügbar, wenn strenge Verschlüsselung verwendet wird. Die akzeptierten Zertifikatformate sind PEM, DER und CER. Wenn angegeben, wird das SQL Server-Zertifikat überprüft, indem festgestellt wird, ob das bereitgestellte ServerCertificate
eine exakte Übereinstimmung ist.
TLS unter Linux und macOS verwendet die OpenSSL-Bibliothek. Die folgende Tabelle zeigt die minimalen unterstützten Versionen von OpenSSL und die Zertifikatsvertrauensspeicherorte für jede Plattform:
Plattform | Minimale OpenSSL-Version | Standard-Zertifikatsvertrauensspeicherort |
---|---|---|
Debian 10, 11, 12 | 1.1.1 | /etc/ssl/certs |
Debian 9 | 1.1.0 | /etc/ssl/certs |
Debian 8.71 | 1.0.1 | /etc/ssl/certs |
OS X 10.11, macOS | 1.0.2 | /usr/local/etc/openssl/certs |
Red Hat Enterprise Linux 9 | 3.0.1 | /etc/pki/tls/cert.pem |
Red Hat Enterprise Linux 8 | 1.1.1 | /etc/pki/tls/cert.pem |
Red Hat Enterprise Linux 7 | 1.0.1 | /etc/pki/tls/cert.pem |
Red Hat Enterprise Linux 6 | 1.0.0-10 | /etc/pki/tls/cert.pem |
SUSE Linux Enterprise 15 | 1.1.0 | /etc/ssl/certs |
SUSE Linux Enterprise 11, 12 | 1.0.1 | /etc/ssl/certs |
Ubuntu 22.04, 23.04 | 3.0.2 | /etc/ssl/certs |
Ubuntu 20.04 | 1.1.1 | /etc/ssl/certs |
Ubuntu 18.04 | 1.1.0 | /etc/ssl/certs |
Ubuntu 16.04 | 1.0.2 | /etc/ssl/certs |
Ubuntu 14.04 | 1.0.1 | /etc/ssl/certs |
Alpine 3.17, 3.18 | 3.0.1 | /etc/ssl/certs |
Sie können die Verschlüsselung auch in der Verbindungszeichenfolge angeben, indem Sie die Option Encrypt
verwenden, wenn Sie SQLDriverConnect zum Herstellen der Verbindung verwenden.
Anpassen der TCP-Keep-Alive-Einstellungen
Ab ODBC-Treiber 17.4 ist konfigurierbar, wie oft der Treiber Keep-Alive-Pakete sendet und erneut überträgt, wenn er keine Antwort empfängt.
Fügen Sie entweder dem Abschnitt des Treibers in odbcinst.ini
oder dem Abschnitt des DSN in odbc.ini
die folgenden Einstellungen zum Konfigurieren hinzu. Beim Herstellen einer Verbindung mit einem DSN verwendet der Treiber die Einstellungen im Abschnitt des DSN, sofern vorhanden. Andernfalls werden, wenn nur eine Verbindung mit einer Verbindungszeichenfolge hergestellt wird, die Einstellungen im Abschnitt des Treibers in odbcinst.ini
verwendet. Wenn die Einstellung an keinem der Speicherorte vorhanden ist, verwendet der Treiber den Standardwert.
Ab ODBC Driver 17.8 können die Schlüsselwörter KeepAlive
und KeepAliveInterval
in der Verbindungszeichenfolge angegeben werden.
KeepAlive=<integer>
steuert, wie häufig TCP ein Keep-Alive-Paket sendet, um zu überprüfen, ob eine Verbindung im Leerlauf noch reagiert. Der Standardwert ist 30 Sekunden.KeepAliveInterval=<integer>
bestimmt das Intervall, das zwischen den erneuten Übertragungen von „keep-alive“ liegt, bis eine Antwort empfangen wird. Der Standardwert beträgt 1 Sekunde.