SQL Server und Windows Authentication mit go-mssqldb

Der Treiber go-mssqldb unterstützt SQL Server-Authentifizierung, Windows integrierte Authentifizierung (SSPI), NTLM und Kerberos. Dieser Artikel behandelt jede Methode mit Verbindungszeichenfolge-Beispielen und Codebeispielen.

Für die Microsoft Entra ID-Authentifizierung siehe Microsoft Entra ID Authentifizierung.

Auswählen einer Authentifizierungsmethode

Verwenden Sie die beste Methode, die zu Ihrer Umgebung und Identitätsplattform passt:

Bevorzuge diese Reihenfolge Methode Verwenden Sie ihn, wenn
1 Microsoft Entra ID Du verbindest dich mit Azure SQL und kannst Managed Identity, Workload Identity oder einen anderen Entra-Flow verwenden, ohne Passwörter zu speichern.
2 Windows integrierte Authentifizierung (SSPI) Deine App läuft unter Windows und kann die aktuelle Windows-Identität direkt verwenden.
3 Kerberos Du spielst unter Linux oder macOS und hast bereits Kerberos-Tickets, Keytabs oder eine verwaltete Domain-Umgebung.
4 NTLM Du brauchst eine Domain-Authentifizierung, aber Kerberos ist nicht verfügbar oder praktikabel.
5 SQL Server Authentifizierung Du hast keine integrierte Identitätsoption und musst einen SQL-Login und ein Passwort verwenden.

Wenn mehr als eine Methode funktioniert, bevorzugen Sie diejenige, die langjährige Geheimnisse vermeidet und mit dem nativen Identitätssystem der Host-Plattform übereinstimmt.

SQL Server Authentifizierung

Die SQL Server-Authentifizierung verwendet einen Anmeldenamen und ein Passwort, die in SQL Server gespeichert sind. Geben Sie die Parameter user id und password an:

URL-Format

Hinweis

Für URL-Verbindungszeichenfolgen müssen Sonderzeichen im Benutzernamen oder dem Passwort prozentkodiert werden. Benutzernamen für die Windows-Authentifizierung verwenden %5C als Domänentrennzeichen, z. B. sqlserver://DOMAIN%5Cusername:password@host. In ADO- und ODBC-Verbindungsstrings verwenden Sie die Literalform DOMAIN\username .

Geben Sie Benutzernamen und Passwort in der URL an:

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

ADO-Format

Verwenden Sie in einer Verbindungszeichenfolge im ADO-Stil die Schlüssel user id und password:

server=<server>;user id=<user>;password=<password>;database=AdventureWorks2025;Encrypt=true

Code-Beispiel

Verbinden Sie sich mit der SQL Server-Authentifizierung und überprüfen Sie die Verbindung:

package main

import (
    "database/sql"
    "log"

    _ "github.com/microsoft/go-mssqldb"
)

func main() {
    db, err := sql.Open("sqlserver",
        "sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025&encrypt=true")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    if err = db.Ping(); err != nil {
        log.Fatal(err)
    }
}

Windows integrierte Authentifizierung (SSPI)

Unter Windows verwendet der Treiber SSPI (Security Support Provider Interface) zur Authentifizierung mithilfe der aktuellen Zugangsdaten des Windows-Nutzers. Der Verbindungszeichenfolge benötigt keinen Benutzernamen oder Passwort.

sqlserver://<server>?database=AdventureWorks2025&trusted_connection=yes&encrypt=true

Hinweis

Die integrierte Authentifizierung von Windows über SSPI funktioniert nur, wenn die Go-Anwendung auf Windows läuft und der aktuelle Benutzer Zugriff auf die SQL Server-Instanz hat.

NTLM-Authentifizierung

NTLM-Authentifizierung funktioniert auf allen Plattformen (Windows, Linux und macOS). Geben Sie einen domänenqualifizierten Benutzernamen und Passwort an:

NTLM-URL-Format

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

sqlserver://DOMAIN%5C<user>:<password>@<server>?database=AdventureWorks2025&encrypt=true

Hinweis

Im URL-Format müssen Sie den Backslash in DOMAIN\<user> als %5C URL-codieren.

NTLM ADO Format

Der Backslash im Benutzernamen signalisiert die NTLM-Authentifizierung an den Treiber:

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

Der Treiber erkennt den Backslash im Benutzernamen und verwendet NTLM automatisch.

Kerberos-Authentifizierung

Die Kerberos-Authentifizierung funktioniert unter Linux und macOS, wenn das System eine gültige Kerberos-Konfiguration hat. Der Treiber verwendet das Paket für die krb5 Kerberos-Authentifizierung. Es gibt drei Methoden, um Zugangsdaten bereitzustellen.

Voraussetzungen

  • Eine gültige krb5.conf Datei (Standardpfad: /etc/krb5.conf).
  • Der SQL Server muss einen registrierten Service Principal Name (SPN) besitzen.

Methode 1: Keytab-Datei

Eine Keytab-Datei enthält verschlüsselte Kerberos-Hauptschlüssel. Gib den Keytab-Dateipfad und das Realm des Benutzers an:

sqlserver://<user>@MYREALM@<server>:1433?database=AdventureWorks2025&krb5-realm=MYREALM&krb5-keytabfile=/path/to/user.keytab&encrypt=true

Methode 2: Zugangsdaten-Cache

Verwenden Sie einen bestehenden Kerberos-Anmeldedaten-Cache, der von erstellt wird kinit.

sqlserver://<user>@MYREALM@<server>:1433?database=AdventureWorks2025&krb5-realm=MYREALM&krb5-credcachefile=/tmp/krb5cc_1000&encrypt=true

Methode 3: Rohzugangsdaten

Gib das Passwort direkt in der Verbindungszeichenfolge an. Der Treiber verwendet die bereitgestellten Zugangsdaten, um den Kerberos-Authentifizierungsaustausch durchzuführen.

sqlserver://<user>@MYREALM:<password>@<server>:1433?database=AdventureWorks2025&krb5-realm=MYREALM&encrypt=true

Kerberos-Parameter

Parameter Standard Description
krb5-configfile /etc/krb5.conf Pfad zur Kerberos-Konfigurationsdatei.
krb5-realm - Kerberos-Reichsname, wie 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 KDC zu lokalisieren.
krb5-udppreferencelimit 1 Maximale Nachrichtengröße vor dem Wechsel von UDP zu TCP.
ServerSPN - Überschreiben Sie das automatisch generierte SPN.