go-mssqldb na Linux i macOS

Sterownik go-mssqldb to czysta biblioteka Go, która kompiluje natywnie na Linuksie i macOS bez zewnętrznych zależności C. Ten artykuł omawia konfigurację specyficzną dla platformy dla uwierzytelniania i certyfikatów.

Installation

Instalacja jest taka sama na wszystkich platformach:

go get github.com/microsoft/go-mssqldb

Nie jest potrzebny żaden sterownik ODBC, FreeTDS ani inne biblioteki C.

Uwierzytelnianie SQL

Uwierzytelnianie SQL działa identycznie na Linuksie, macOS i Windows:

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

Uwierzytelnianie NTLM

Uwierzytelnianie NTLM jest obsługiwane na wszystkich platformach. Podaj nazwę użytkownika kwalifikowaną do domeny:

Format adresu URL

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

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

Format ADO

Ukośnik w nazwie użytkownika wywołuje uwierzytelnianie NTLM:

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

Sterownik wykrywa ukośnik w nazwie użytkownika i automatycznie używa NTLM. Nie jest wymagana dodatkowa konfiguracja na Linuksie ani macOS.

Uwierzytelnianie Kerberos

Uwierzytelnianie Kerberos w systemach Linux i macOS wykorzystuje pakiet krb5, wbudowany w sterownik. Nie ma zewnętrznych zależności bibliotek.

Prerequisites

  1. Ważny plik konfiguracyjny Kerberos. Domyślna ścieżka to /etc/krb5.conf:

    [libdefaults]
        default_realm = MYDOMAIN.COM
        dns_lookup_kdc = true
    
    [realms]
        MYDOMAIN.COM = {
            kdc = dc1.mydomain.com
        }
    
  2. Instancja programu SQL Server musi mieć zarejestrowaną nazwę główną usługi (SPN) (na przykład MSSQLSvc/<server>.mydomain.com:1433).

Połącz się za pomocą pliku keytab

Określ ścieżkę pliku keytab oraz obszar Kerberos w parametry połączenia:

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

Połącz się z pamięcią podręczną danych uwierzytelniających

Najpierw utwórz zgłoszenie:

kinit <user>@MYDOMAIN.COM

Następnie połącz się, używając zbuforowanego poświadczenia:

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

Parametry Kerberosa

Parameter Domyślny Description
krb5-configfile /etc/krb5.conf Ścieżka do pliku konfiguracyjnego Kerberos.
krb5-realm - Obszar Kerberosa (na przykład 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 znaleźć Centrum Dystrybucji Kluczy (KDC).
krb5-udppreferencelimit 1 Maksymalny rozmiar wiadomości UDP przed przejściem na TCP.

Więcej informacji można znaleźć w sekcji SQL Server i Windows authentication.

Uwierzytelnianie systemu Windows (SSPI) nie jest dostępne

Na Linuksie i macOS uwierzytelnianie zintegrowane w Windows (SSPI / trusted_connection=yes) nie jest dostępne. Skorzystaj z jednej z następujących alternatyw:

Method Parametry połączenia
NTLM sqlserver://DOMAIN%5Cuser:password@host?database=db
Kerberos (tabulator klawiszy) 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
Uwierzytelnianie SQL sqlserver://user:password@host?database=db
Microsoft Entra ID sqlserver://host?database=db&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false (użyj sterownika azuresql)

Konfiguracja certyfikatu

Na Linuksie i macOS certyfikaty TLS używane z parametrami certificate or serverCertificate muszą być plikami zakodowanymi przez PEM. Kierowca odczytuje je, korzystając bezpośrednio z pakietu crypto/tls Go.

Systemowy magazyn zaufanych certyfikatów

Sterownik korzysta z domyślnego magazynu certyfikatów systemu operacyjnego. W systemie Linux ten magazyn certyfikatów zaufania zazwyczaj znajduje się w /etc/ssl/certs/ lub /etc/pki/tls/certs/. W systemie macOS używany jest systemowy pęk kluczy.

Aby dodać niestandardowy certyfikat CA do magazynu systemowego:

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

Alternatywnie, można użyć parametru połączenia certificate , aby bezpośrednio określić certyfikat CA bez zmiany pamięci systemowej:

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