go-mssqldb unter Linux und macOS

Der Treiber go-mssqldb ist eine reine Go-Bibliothek und kompiliert nativ unter Linux und macOS ohne externe C-Abhängigkeiten. Dieser Artikel behandelt plattformspezifische Konfigurationen für Authentifizierung und Zertifikate.

Installation

Die Installation ist auf allen Plattformen gleich:

go get github.com/microsoft/go-mssqldb

Es werden weder ein ODBC-Treiber noch FreeTDS oder andere C-Bibliotheken benötigt.

SQL-Authentifizierung

SQL-Authentifizierung funktioniert identisch unter Linux, macOS und Windows:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025

NTLM-Authentifizierung

NTLM-Authentifizierung wird auf allen Plattformen unterstützt. Geben Sie einen domänenqualifizierten Benutzernamen an:

URL-Format

URL-kodieren Sie den Backslash in DOMAIN\user als %5C:

sqlserver://CONTOSO%5C<user>:<password>@<server>:1433?database=mydb

ADO-Format

Der Backslash im Benutzernamen löst die NTLM-Authentifizierung aus:

server=<server>;user id=DOMAIN\<user>;password=<password>;database=AdventureWorks2025

Der Treiber erkennt den Backslash im Benutzernamen und verwendet NTLM automatisch. Auf Linux oder macOS sind keine zusätzlichen Konfigurationen erforderlich.

Kerberos-Authentifizierung

Die Kerberos-Authentifizierung unter Linux und macOS verwendet das krb5 im Treiber eingebaute Paket. Es gibt keine externen Bibliotheksabhängigkeiten.

Prerequisites

  1. Eine gültige Kerberos-Konfigurationsdatei. Der Standardpfad ist /etc/krb5.conf:

    [libdefaults]
        default_realm = MYDOMAIN.COM
        dns_lookup_kdc = true
    
    [realms]
        MYDOMAIN.COM = {
            kdc = dc1.mydomain.com
        }
    
  2. Die SQL Server-Instanz muss einen Service Principal Name (SPN) registriert haben (zum Beispiel MSSQLSvc/<server>.mydomain.com:1433).

Verbinden Sie sich mit einem Keytab

Spezifizieren Sie den Keytab-Dateipfad und das Kerberos-Reich in der Verbindungszeichenfolge:

sqlserver://<user>@MYDOMAIN.COM@<server>:1433?database=AdventureWorks2025&krb5-realm=MYDOMAIN.COM&krb5-keytabfile=/etc/<user>.keytab

Verbinden Sie sich mit einem Zugangsdaten-Cache

Erstens: Hol dir ein Ticket:

kinit <user>@MYDOMAIN.COM

Dann verbinden Sie sich mit der zwischengespeicherten Zugangsdaten:

sqlserver://<user>@MYDOMAIN.COM@<server>:1433?database=AdventureWorks2025&krb5-realm=MYDOMAIN.COM&krb5-credcachefile=/tmp/krb5cc_1000

Kerberos-Parameter

Parameter Vorgabe Description
krb5-configfile /etc/krb5.conf Pfad zur Kerberos-Konfigurationsdatei.
krb5-realm - Kerberos-Reich (zum Beispiel, MYDOMAIN.COM).
krb5-keytabfile - Pfad zur Keytab-Datei.
krb5-credcachefile - Pfad zur Credential-Cache-Datei.
krb5-dnslookupkdc true Verwenden Sie DNS-SRV-Datensätze, um das Key Distribution Center (KDC) zu finden.
krb5-udppreferencelimit 1 Maximale UDP-Nachrichtengröße vor dem Wechsel zu TCP.

Weitere Informationen finden Sie unter SQL Server und Windows-Authentifizierung.

Windows Authentication (SSPI) ist nicht verfügbar

Unter Linux und macOS ist Windows integrierte Authentifizierung (SSPI / trusted_connection=yes) nicht verfügbar. Nutzen Sie eine der folgenden Alternativen:

Methode Verbindungszeichenfolge
NTLM sqlserver://DOMAIN%5Cuser:password@host?database=db
Kerberos (Tastentab) sqlserver://user@REALM@host?database=db&krb5-realm=REALM&krb5-keytabfile=/path
Kerberos (cache) sqlserver://user@REALM@host?database=db&krb5-realm=REALM&krb5-credcachefile=/path
SQL-Authentifizierung sqlserver://user:password@host?database=db
Microsoft Entra ID sqlserver://host?database=db&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false (Treiber azuresql verwenden)

Zertifikatkonfiguration

Unter Linux und macOS müssen TLS-Zertifikate, die mit den Parametern certificateserverCertificate verwendet werden, PEM-kodierte Dateien sein. Der Treiber liest sie, indem er direkt das crypto/tls-Paket von Go verwendet.

Systemvertrauensspeicher

Der Treiber verwendet den Standard-Vertrauensspeicher für Zertifikate des Betriebssystems. Unter Linux befindet sich dieser Vertrauensspeicher typischerweise bei /etc/ssl/certs/ oder /etc/pki/tls/certs/. Auf macOS wird der Systemschlüsselbund verwendet.

Um ein benutzerdefiniertes CA-Zertifikat zum Systemspeicher hinzuzufügen:

Ubuntu/Debian:

sudo cp myca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

RHEL/Fedora:

sudo cp myca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust

macOS:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain myca.crt

Alternativ verwenden Sie den certificate Verbindungsparameter, um das CA-Zertifikat direkt anzugeben, ohne den Systemspeicher zu verändern:

sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true&certificate=/path/to/ca-cert.pem