Herstellen einer Verbindung über Linux oder macOS

ODBC-Treiber herunterladen

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 useDatenbankname, 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 Nein 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 Nein 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.

Weitere Informationen