SQL Server e autenticazione di Windows con go-mssqldb

Il go-mssqldb driver supporta l'autenticazione SQL Server, l'autenticazione integrata Windows (SSPI), NTLM e Kerberos. Questo articolo copre ogni metodo con esempi di stringa di connessione e esempi di codice.

Per l'autenticazione Microsoft Entra ID, vedi Microsoft Entra ID autenticazione.

Scegliere un metodo di autenticazione

Usa il metodo più forte che si adatti al tuo ambiente e alla tua piattaforma identitare:

Preferisci questo ordine metodo Usarlo quando
1 Microsoft Entra ID Ti stai collegando ad Azure SQL e puoi usare l'identità gestita, l'identità del carico di lavoro o un altro flusso Entra senza memorizzare password.
2 Autenticazione integrata Windows (SSPI) La tua app gira su Windows e può usare direttamente l'identità attuale di Windows.
3 Kerberos Sei su Linux o macOS e hai già ticket Kerberos, keytab o un ambiente di dominio gestito.
4 NTLM Hai bisogno dell'autenticazione del dominio, ma Kerberos non è disponibile né pratico.
5 Autenticazione di SQL Server Non hai un'opzione di identità integrata e devi usare un login e una password SQL.

Se più di un metodo funziona, preferisci quello che evita segreti di lunga durata e corrisponde al sistema di identità nativo della piattaforma ospitante.

Autenticazione di SQL Server

L'autenticazione SQL Server utilizza un nome di accesso e una password memorizzati in SQL Server. Fornisci i parametri user id e password:

Formato di URL

Note

Nelle stringhe di connessione URL, codificare i caratteri speciali nel nome utente o nella password usando la codifica percentuale. I nomi utente per l'autenticazione di Windows usano %5C come separatore di dominio, ad esempio sqlserver://DOMAIN%5Cusername:password@host. Nelle stringhe di connessione ADO e ODBC, si usa la forma letterale DOMAIN\username .

Specifica il nome utente e la password nell'URL:

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

Formato ADO

Usa le chiavi user id e password in una stringa di connessione in stile ADO:

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

Esempio di codice

Connettiti con l'autenticazione SQL Server e verifica la connessione:

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)
    }
}

Autenticazione integrata Windows (SSPI)

Su Windows, il driver utilizza SSPI (Security Support Provider Interface) per autenticarsi utilizzando le credenziali dell'utente Windows attuale. La stringa di connessione non ha bisogno di nome utente o password.

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

Note

L'autenticazione integrata di Windows tramite SSPI funziona solo quando l'applicazione Go è attiva su Windows e l'utente attuale ha accesso all'istanza di SQL Server.

Autenticazione NTLM

L'autenticazione NTLM funziona su tutte le piattaforme (Windows, Linux e macOS). Fornisci un nome utente e una password qualificati per il dominio:

Formato URL NTLM

Codifica con URL la barra inversa in DOMAIN\<user> come %5C:

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

Note

Nel formato URL, devi codificare in URL la barra inversa in DOMAIN\<user> come %5C.

Formato NTLM ADO

La barra inversa nel nome utente indica al driver l'autenticazione NTLM:

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

Il driver rileva il backslash nel nome utente e utilizza automaticamente NTLM.

Autenticazione Kerberos

L'autenticazione Kerberos funziona su Linux e macOS quando il sistema ha una configurazione valida di Kerberos. Il driver utilizza il krb5 package per l'autenticazione Kerberos. Ci sono tre metodi per fornire le credenziali.

Prerequisiti

  • Un file valido krb5.conf (percorso predefinito: /etc/krb5.conf).
  • Il SQL Server deve avere un Nome Principale di Servizio (SPN) registrato.

Metodo 1: File Keytab

Un file keytab contiene chiavi principali Kerberos criptate. Specifica il percorso del file keytab e il regno dell'utente:

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

Metodo 2: Cache delle credenziali

Usa una cache credenziale Kerberos esistente creata da kinit.

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

Metodo 3: Credenziali grezze

Fornisci la password direttamente nella stringa di connessione. Il driver utilizza le credenziali fornite per eseguire lo scambio di autenticazione Kerberos.

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

Parametri di Kerberos

Parametro Predefinito Descrizione
krb5-configfile /etc/krb5.conf Percorso verso il file di configurazione di Kerberos.
krb5-realm - Nome del regno di Kerberos, come MYDOMAIN.COM.
krb5-keytabfile - Percorso verso il file keytab.
krb5-credcachefile - Percorso verso il file cache delle credenziali.
krb5-dnslookupkdc true Usa i record DNS SRV per localizzare il KDC.
krb5-udppreferencelimit 1 Dimensione massima del messaggio prima di passare da UDP a TCP.
ServerSPN - Sovrascrivi lo SPN generato automaticamente.