SQL Server i uwierzytelnianie systemu Windows w go-mssqldb

Sterownik go-mssqldb obsługuje uwierzytelnianie SQL Server, uwierzytelnianie zintegrowane z systemem Windows (SSPI), NTLM oraz Kerberos. Ten artykuł omawia każdą metodę wraz z przykładami parametry połączenia oraz przykładami kodu.

Informacje na temat uwierzytelniania Microsoft Entra ID można znaleźć w artykule uwierzytelnianie Microsoft Entra ID.

Wybieranie metody uwierzytelniania

Stosuj najsilniejszą metodę, która pasuje do Twojego środowiska i platformy tożsamości:

Wolę tę kolejność Metoda Użyj go, gdy
1 Microsoft Entra ID Łączysz się z Azure SQL i możesz używać zarządzanej tożsamości, tożsamości obciążenia lub innego przepływu Entra bez przechowywania haseł.
2 Uwierzytelnianie zintegrowane w Windows (SSPI) Twoja aplikacja działa na Windows i może bezpośrednio korzystać z obecnej tożsamości Windows.
3 Kerberos Korzystasz z systemu Linux lub macOS i masz już bilety Kerberos, pliki keytab lub zarządzane środowisko domeny.
4 NTLM Potrzebujesz uwierzytelniania domeny, ale Kerberos nie jest dostępny ani praktyczny.
5 Uwierzytelnianie programu SQL Server Nie masz opcji zintegrowanej tożsamości i musisz używać logowania SQL oraz hasła.

Jeśli działa więcej niż jedna metoda, wybierz tę, która unika długotrwałych sekretów i dopasowuje się do natywnego systemu tożsamości platformy gospodarza.

Uwierzytelnianie programu SQL Server

Uwierzytelnianie SQL Server wykorzystuje nazwę logowania i hasło przechowywane w SQL Server. Podaj parametry user id i password:

Format adresu URL

Note

W parametrach połączenia URL zakoduj znaki specjalne w nazwie użytkownika lub haśle przy użyciu kodowania procentowego. Nazwy użytkowników uwierzytelniania Windows używają %5C jako separatora domeny, na przykład sqlserver://DOMAIN%5Cusername:password@host. W łańcuchach połączeń ADO i ODBC używaj formy literalnej DOMAIN\username .

Wpisz nazwę użytkownika i hasło w adresie URL:

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

Format ADO

Użyj klawiszy user id i password w parametrach połączenia w stylu ADO:

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

Przykład kodu

Połącz się z uwierzytelnieniem SQL Server i zweryfikowaj połączenie:

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

Uwierzytelnianie zintegrowane w Windows (SSPI)

W systemie Windows sterownik korzysta z interfejsu SSPI (Security Support Provider Interface) do uwierzytelniania za pomocą danych uwierzytelniających aktualnego użytkownika Windows. Parametry połączenia nie wymagają nazwy użytkownika ani hasła.

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

Note

Uwierzytelnianie zintegrowane z Windows przez SSPI działa tylko wtedy, gdy aplikacja Go działa na Windows, a obecny użytkownik ma dostęp do instancji SQL Server.

Uwierzytelnianie NTLM

Uwierzytelnianie NTLM działa na wszystkich platformach (Windows, Linux i macOS). Podaj nazwę użytkownika i hasło kwalifikowane do domeny:

Format adresu URL NTLM

Zakoduj ukośnik odwrotny w adresie URL w DOMAIN\<user> w postaci %5C:

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

Note

W formacie adresu URL musisz zakodować odwrotny ukośnik w DOMAIN\<user> jako %5C.

Format NTLM ADO

Ukośnik w nazwie użytkownika sygnalizuje sterownikowi uwierzytelnianie NTLM:

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

Sterownik wykrywa ukośnik w nazwie użytkownika i automatycznie używa NTLM.

Uwierzytelnianie Kerberos

Uwierzytelnianie Kerberos działa na Linuksie i macOS, gdy system ma prawidłową konfigurację Kerberos. Sterownik wykorzystuje pakiet krb5 do uwierzytelniania Kerberos. Istnieją trzy metody potwierdzania uprawnień.

Wymagania wstępne

  • Poprawny krb5.conf plik (domyślna ścieżka: /etc/krb5.conf).
  • SQL Server musi mieć zarejestrowaną nazwę Główną Usługi (SPN).

Metoda 1: Plik Keytab

Plik keytab zawiera zaszyfrowane klucze główne Kerberosa. Określ ścieżkę pliku w zakładce klawiszy oraz obszar użytkownika:

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

Metoda 2: Pamięć podręczna danych uwierzytelniających

Użyj istniejącej pamięci Kerberos credential cache utworzonej przez kinit.

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

Metoda 3: Surowe uprawnienia

Podaj hasło bezpośrednio w parametrach połączenia. Sterownik wykorzystuje dostarczone dane uwierzytelniające do wymiany uwierzytelniania Kerberos.

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

Parametry Kerberosa

Parameter Default Description
krb5-configfile /etc/krb5.conf Ścieżka do pliku konfiguracyjnego Kerberos.
krb5-realm - Nazwa obszaru Kerberosa, taka jak MYDOMAIN.COM.
krb5-keytabfile - Ścieżka do pliku keytab.
krb5-credcachefile - Ścieżka do pliku pamięci podręcznej z poświadczeniami.
krb5-dnslookupkdc true Użyj rekordów DNS SRV, aby zlokalizować KDC.
krb5-udppreferencelimit 1 Maksymalny rozmiar wiadomości przed przejściem z UDP na TCP.
ServerSPN - Zastąp automatycznie wygenerowany SPN.