Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Sterownik go-mssqldb obsługuje uwierzytelnianie Microsoft Entra ID za pośrednictwem pakietu azuread. Ten pakiet rejestruje osobny sterownik o nazwie azuresql, który opakowuje standardowy sterownik sqlserver, dodając obsługę poświadczeń Microsoft Entra ID.
Uwaga
Wszystkie fedauth wbudowane metody uwierzytelniania wymagają nazwy azuresql sterownika (nie sqlserver). Jeśli używasz sql.Open("sqlserver", ...) z parametrem fedauth, uwierzytelnianie kończy się niepowodzeniem bez żadnego komunikatu w przypadku Login failed for user ''. Zaimportuj paczkę azuread i użyj azuresql tak, jak pokazano w poniższym przykładzie.
Wybierz przepływ uwierzytelniania FedAuth
Użyj poniższej tabeli, aby wybrać odpowiedni przepływ dla środowiska hostingowego i źródła poświadczeń:
| Jeśli musisz się połączyć z... | Zacznij od... | Użyj, gdy... |
|---|---|---|
| Rozwój lokalny | ActiveDirectoryDefault |
Chcesz ponownie użyć poświadczeń Azure CLI lub Azure Developer CLI bez konfigurowania lokalnie zasady usługi lub zarządzanej tożsamości. |
| Aplikacja hostowana w Azure z zarządzaną tożsamością | ActiveDirectoryManagedIdentity |
Chcesz przewidywalnej konfiguracji produkcji i nie chcesz mieć innych lokalnych źródeł kwalifikacji w łańcuchu. |
| A CI/CD pipeline in Azure DevOps | ActiveDirectoryAzurePipelines |
Twój pipeline już korzysta z połączenia z usługą Azure i udostępnia SYSTEM_ACCESSTOKEN. |
| Kubernetes z Azure Workload Identity | ActiveDirectoryWorkloadIdentity |
Twój pod otrzymuje plik token OIDC i chcesz tożsamość obciążenia zamiast tajemnicy klienta. |
| Główny pracownik służby z certyfikatem lub tajemnicą | ActiveDirectoryServicePrincipal |
Twoja aplikacja uwierzytelnia się jako rejestracja aplikacji i zarządzasz sekretem klienta lub certyfikatem. |
| Narzędzie, które już ma token dostępu |
ActiveDirectoryServicePrincipalAccessToken lub własny dostawca tokenów |
Twoja aplikacja pobiera i odświeża tokeny spoza sterownika. |
| Token użytkownika delegowany z upstream web API | ActiveDirectoryOnBehalfOf |
Musisz wymienić token użytkownika na token o zakresie SQL w usłudze warstwy pośredniej. |
| Narzędzie deweloperskie lub narzędzie interaktywne |
ActiveDirectoryInteractive, ActiveDirectoryDeviceCode, ActiveDirectoryAzClilub ActiveDirectoryAzureDeveloperCli |
Na miejscu jest użytkownik, aby się zalogować, lub chcesz użyć ponownie istniejącej lokalnej sesji CLI. |
| Aplikacja dostępna wyłącznie na Windows, która obsługuje zintegrowane wymagania uwierzytelniania |
ActiveDirectoryIntegrated (zaawansowane) |
Dostarczasz niestandardową logikę pozyskiwania tokenów dla scenariuszy zintegrowanych. |
Jeśli używasz tych samych parametrów połączenia lokalnie i w hostingu na platformie Azure, ActiveDirectoryDefault to dobry punkt wyjścia. W środowisku produkcyjnym użyj ActiveDirectoryManagedIdentity lub ActiveDirectoryServicePrincipal, aby uniknąć opóźnienia związanego z łańcuchem poświadczeń.
Zainstaluj pakiet Azure.
Pobierz podpakiet azuread, który rejestruje sterownik azuresql:
go get github.com/microsoft/go-mssqldb/azuread
Użyj sterownika AzureSQL
Zaimportuj pakiet azuread (zamiast bazowego pakietu go-mssqldb lub jako dodatek do niego) i nawiązuj połączenia, używając nazwy sterownika azuresql:
import (
"database/sql"
_ "github.com/microsoft/go-mssqldb/azuread"
)
func main() {
db, err := sql.Open("azuresql",
"sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false")
// ...
}
Wszystkie poniższe przykłady dotyczą Azure SQL. Zachowaj encrypt=true&TrustServerCertificate=false w ciągu połączenia, aby sterownik weryfikował certyfikat serwera.
Typy uprawnień Fedauth
Ustaw fedauth parametr połączenia na jedną z następujących wartości. Większość typów mapuje się na dane uwierzytelniające Azure Identity z pakietuazidentity.
ActiveDirectoryServicePrincipalAccessToken a niestandardowe API dostawców tokenów korzystają z tokenów dostarczanych przez dzwoniących.
ActiveDirectoryDefault
Używa azidentity.DefaultAzureCredential, który kolejno sprawdza następujące źródła uwierzytelniania:
- Zmienne środowiskowe (
AZURE_TENANT_ID,AZURE_CLIENT_ID, i tak dalej). - Tożsamość obciążenia roboczego dla platformy Kubernetes.
- Tożsamość zarządzana.
- Poświadczenia Azure CLI.
- Poświadczenia Azure Developer CLI
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false
Używaj tego typu na potrzeby programowania lokalnego, ponieważ automatycznie używa poświadczeń Azure CLI. W środowisku produkcyjnym używaj bezpośrednio ActiveDirectoryManagedIdentity lub ActiveDirectoryServicePrincipal.
DefaultAzureCredential przechodzi przez każde źródło poświadczeń przy pierwszym połączeniu, co powoduje dodatkowe opóźnienie, które jest zbędne dla obciążeń produkcyjnych.
ActiveDirectoryManagedIdentity
Uwierzytelnia się za pomocą zarządzanej tożsamości przypisanej przez system lub przez użytkownika. Dla tożsamości przypisanej przez użytkownika podaj identyfikator klienta w parametrze:user id
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryManagedIdentity&encrypt=true&TrustServerCertificate=false
Z tożsamością przypisaną przez użytkownika:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryManagedIdentity&user id=<client-id>&encrypt=true&TrustServerCertificate=false
Note
ActiveDirectoryMSI to alias dla elementu ActiveDirectoryManagedIdentity.
ActiveDirectoryServicePrincipal
Uwierzytelnia się jako podmiot usługi (rejestracja aplikacji) za pomocą identyfikatora klienta i tajemnicy klienta:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryServicePrincipal&user id=<client-id>&password=<client-secret>&encrypt=true&TrustServerCertificate=false
Do uwierzytelniania nazwy głównej usługi opartego na certyfikacie użyj clientcertpath=<path-to-certificate> wraz z password=<certificate-password>.
Note
ActiveDirectoryApplication to alias dla elementu ActiveDirectoryServicePrincipal.
ActiveDirectoryServicePrincipalAccessToken
Używa uprzednio uzyskanego tokenu dostępu jednostki usługi, który aplikacja przekazuje bezpośrednio w parametrach połączenia:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryServicePrincipalAccessToken&password=<access-token>&encrypt=true&TrustServerCertificate=false
Używaj tego przepływu tylko wtedy, gdy twoja aplikacja już uzyskuje i odświeża token dostępu poza sterownikiem. W większości scenariuszy komunikacji między usługami należy preferować ActiveDirectoryServicePrincipal lub niestandardowego dostawcę tokenów.
ActiveDirectoryPassword
Ważna
Opcja uwierzytelniania ActiveDirectoryPassword (uwierzytelnianie hasłem Microsoft Entra ID) została wycofana w sterownikach Microsoft SQL. Ten proces uwierzytelniania wysokiego ryzyka jest niezgodny z obowiązkowym uwierzytelnianiem wieloskładnikowym (MFA) w usłudze Microsoft Entra i może nie działać w dzierżawcach, w których wymuszane jest MFA. Zaplanuj migrację do innej metody uwierzytelniania Microsoft Entra.
Microsoft Entra ID uwierzytelnianie hasłem jest oparte na przyznaniu poświadczeń hasła właściciela zasobu OAuth 2.0 (ROPC), co umożliwia aplikacji logowanie użytkownika bezpośrednio przy użyciu obsługi hasła.
Microsoft zaleca, aby nie używać przepływu ROPC, ponieważ jest on niezgodny z uwierzytelnianiem wieloskładnikowym. W większości scenariuszy dostępne są bezpieczniejsze alternatywy i zalecane. Ten przepływ wymaga wysokiego stopnia zaufania w aplikacji i niesie ze sobą ryzyko, które nie są obecne w innych przepływach. Użyj tego przepływu tylko wtedy, gdy bezpieczniejsze przepływy nie są opłacalne. Firma Microsoft odchodzi od tego przepływu uwierzytelniania wysokiego ryzyka, aby chronić użytkowników przed złośliwymi atakami. Aby uzyskać więcej informacji, zobacz Planowanie obowiązkowego uwierzytelniania wieloskładnikowego dla platformy Azure.
Gdy użytkownik jest obecny podczas logowania, użyj uwierzytelniania ActiveDirectoryInteractive lub ActiveDirectoryIntegrated, aby zastosować atrybuty dziennika inspekcji do zalogowanego użytkownika i zasad dostępu warunkowego.
W przypadku nienadzorowanych scenariuszy komunikacji między usługami postępuj zgodnie z wskazówkami dotyczącymi kont usług Microsoft Entra:
- Jeśli aplikacja działa w infrastrukturze Azure, użyj activedirectoryMSI (lub ActiveDirectoryManagedIdentity w niektórych sterownikach). Tożsamości zarządzane eliminują obciążenie związane z utrzymywaniem i rotacją kluczy tajnych oraz certyfikatów.
- Jeśli tożsamość zarządzana nie jest dostępna (na przykład aplikacja działa poza platformą Azure), użyj ActiveDirectoryServicePrincipal. Jeśli sterownik to obsługuje, preferowane jest użycie certyfikatu klienta zamiast wpisu tajnego klienta. W przypadku certyfikatu klucz prywatny pozostaje na kliencie, a do Microsoft Entra jest wysyłane tylko podpisane potwierdzenie w celu uwierzytelnienia klienta. Jeśli klucz jest przechowywany w sprzęcie (na przykład w module TPM lub HSM) albo oznaczony jako nieeksportowalny, nie można go wyeksportować w postaci ciągu znaków tak, jak można to zrobić z kluczem tajnym klienta.
- Nie używaj konta użytkownika Microsoft Entra jako konta usługi.
Uwierzytelnia się za pomocą nazwy użytkownika i hasła Microsoft Entra:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryPassword&user id=<user>@mydomain.com&password=<password>&applicationclientid=<app-id>&encrypt=true&TrustServerCertificate=false
Parametr applicationclientid jest wymagany dla tego przepływu.
ActiveDirectoryInteractive
Otwiera interaktywny komunikat logowania użytkownika w przeglądarce. Odpowiednie do lokalnych narzędzi programistycznych:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryInteractive&user id=<user>@mydomain.com&applicationclientid=<app-id>&encrypt=true&TrustServerCertificate=false
Parametr applicationclientid jest wymagany dla tego przepływu.
ActiveDirectoryDeviceCode
Wyświetla kod urządzenia, który użytkownik ma wpisać w .https://microsoft.com/devicelogin Przydatne w środowiskach bez przeglądarki:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDeviceCode&encrypt=true&TrustServerCertificate=false
ActiveDirectoryAzCli
Używa tokena z zalogowanej sesji Azure CLI:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryAzCli&encrypt=true&TrustServerCertificate=false
ActiveDirectoryAzureDeveloperCli
Używa tokena z zalogowanej sesji Azure Developer CLI (azd) :
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryAzureDeveloperCli&encrypt=true&TrustServerCertificate=false
ActiveDirectoryEnvironment
Odczytuje poświadczenia z zmiennych środowiskowych. Biblioteka Azure Identity inspektuje zmienne takie jak AZURE_TENANT_ID, AZURE_CLIENT_ID, oraz AZURE_CLIENT_SECRET:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryEnvironment&encrypt=true&TrustServerCertificate=false
ActiveDirectoryWorkloadIdentity
Uwierzytelnia się za pomocą federacji tożsamości obciążeń. Stosuj tę metodę w podach Kubernetes z konfiguracją Azure Workload Identity.
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryWorkloadIdentity&encrypt=true&TrustServerCertificate=false
ActiveDirectoryAzurePipelines
Uwierzytelnia się za pomocą połączenia usługi Azure Pipelines. Dostarcz parametry pipeline w parametry połączenia lub pozwól sterownikowi odczytać brakujące wartości ze zmiennych środowiskowych Azure Pipelines.
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryAzurePipelines&user id=<client-id>@<tenant-id>&serviceconnectionid=<service-connection-id>&systemtoken=<system-access-token>&encrypt=true&TrustServerCertificate=false
Ustaw parametry zgodnie z wymaganiami sterownika:
| Parameter | Description |
|---|---|
user id |
Identyfikator klienta jednostki usługi, opcjonalnie po którym następuje @tenant-id. |
serviceconnectionid |
Identyfikator połączenia usługi z Azure DevOps. |
systemtoken |
Token dostępu systemu potoków ($(System.AccessToken)). |
ActiveDirectoryClientAssertion
Uwierzytelnia się za pomocą asercji klienta (podpisanego tokena JWT) zamiast sekretu klienta. Podaj podpisany JWT w parametrze clientassertion:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryClientAssertion&user id=<client-id>@<tenant-id>&clientassertion=<jwt-token>&encrypt=true&TrustServerCertificate=false
ActiveDirectoryOnBehalfOf
Uwierzytelnia się za pomocą przepływu On-Behalf-Of (OBO). Sterownik wymienia token użytkownika z systemu nadrzędnego na nowy token przeznaczony dla programu SQL Server.
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryOnBehalfOf&user id=<client-id>@<tenant-id>&password=<client-secret>&userassertion=<user-token>&encrypt=true&TrustServerCertificate=false
Etap uwierzytelniania klienta może używać password, clientcertpath, lub clientassertion, ale userassertion jest to zawsze wymagane.
ActiveDirectoryIntegrated
Obsługuje zaawansowany workflow z zintegrowanym uwierzytelnianiem. Ten tryb wymaga niestandardowej logiki pozyskiwania tokenów przez dostawcę tokenów.
Używaj tego trybu tylko na Windows. Na Linuksie i macOS używaj niestandardowego dostawcy tokenów do procesu uwierzytelniania.
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryIntegrated&encrypt=true&TrustServerCertificate=false
Dostawca niestandardowych tokenów
Jeśli żaden z wbudowanych fedauth typów nie pasuje do twojego scenariusza, użyj jednego z tych API dostawców tokenów, aby dostarczyć własną logikę pozyskiwania tokenów:
NewSecurityTokenConnector (Zalecany)
Użyj tego API, gdy masz wstępnie pozyskany token dostępu OAuth2:
import (
"context"
"database/sql"
"log"
"github.com/microsoft/go-mssqldb"
)
connector, err := mssql.NewSecurityTokenConnector(
"sqlserver://<server>.database.windows.net?database=AdventureWorks2025&encrypt=true&TrustServerCertificate=false",
func(ctx context.Context) (string, error) {
// Return a pre-acquired OAuth2 access token.
return myTokenProvider(ctx)
},
)
if err != nil {
log.Fatal(err)
}
db := sql.OpenDB(connector)
NewAccessTokenConnector (Uproszczone API)
Użyj tego API do prostszego pozyskiwania tokenów bez obsługi kontekstu.
import (
"database/sql"
"log"
"github.com/microsoft/go-mssqldb"
)
connector, err := mssql.NewAccessTokenConnector(
"sqlserver://<server>.database.windows.net?database=AdventureWorks2025&encrypt=true&TrustServerCertificate=false",
func() (string, error) {
// Return a pre-acquired OAuth2 access token.
return mySimpleTokenProvider()
},
)
if err != nil {
log.Fatal(err)
}
db := sql.OpenDB(connector)
NewActiveDirectoryTokenConnector (niestandardowe przepływy pracy ADAL)
Korzystaj z tego API do niestandardowych procesów pozyskiwania tokenów Azure AD, gdy ani fedauth wbudowane tryby, ani API SecurityToken nie pasują do Twojej sytuacji:
import (
"context"
"database/sql"
"log"
"github.com/microsoft/go-mssqldb"
)
connector, err := mssql.NewActiveDirectoryTokenConnector(
"sqlserver://<server>.database.windows.net?database=AdventureWorks2025&encrypt=true&TrustServerCertificate=false",
mssql.FedAuthADALWorkflowPassword,
func(ctx context.Context, serverSPN, stsURL string) (string, error) {
// Custom ADAL workflow using server-provided SPN and STS URL.
return myCustomADALFlow(ctx, serverSPN, stsURL)
},
)
if err != nil {
log.Fatal(err)
}
db := sql.OpenDB(connector)
Takie podejście jest przydatne, gdy musisz zintegrować się z niestandardowym dostawcą tożsamości, wdrożyć buforowanie tokenów lub obsłużyć typ poświadczenia nieobjęty pakietem azuread . Większość aplikacji powinna korzystać z NewSecurityTokenConnector z wcześniej uzyskanym tokenem.
Typowe opcje uprawnień
Te parametry mają zastosowanie dla wielu typów fedauth:
| Parameter | Description |
|---|---|
applicationclientid |
ID aplikacji klienta. Wymagane dla ActiveDirectoryPassword i ActiveDirectoryInteractive. |
clientcertpath |
Ścieżka do pliku certyfikatu klienta PEM lub PFX dla uwierzytelniania usługi opartego na certyfikatach lub uwierzytelniania On-Behalf-Of. |
clientassertion |
Podpisana asercja JWT do uwierzytelniania ActiveDirectoryClientAssertion lub On-Behalf-Of. |
serviceconnectionid |
Identyfikator połączenia usługi Azure Pipelines. |
systemtoken |
token dostępu systemu Azure Pipelines |
userassertion |
Token użytkownika nadrzędnego dla ActiveDirectoryOnBehalfOf. |
tokenfilepath |
Ścieżka do pliku tokenu OIDC dla ActiveDirectoryWorkloadIdentity w Kubernetes. |
additionallyallowedtenants |
Lista dodatkowych identyfikatorów dzierżawców oddzielonych przecinkami, aby umożliwić potrzebne uwierzytelnienie wielodzierżawcze. |
disableinstancediscovery |
Ustaw wartość true, aby wyłączyć wykrywanie instancji; używaj tej opcji tylko wtedy, gdy kontrolujesz adres URL autorytetu. |
sendcertificatechain |
Ustaw na true wysyłanie łańcucha certyfikatów do uwierzytelniania opartego na certyfikatach. |