Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Drivrutinen go-mssqldb stöder Microsoft Entra ID-autentisering via paketetazuread. Detta paket registrerar en separat drivrutin med namnet azuresql, som omsluter standarddrivrutinen sqlserver med stöd för autentiseringsuppgifter för Microsoft Entra ID.
Försiktighet
Alla inbyggda autentiseringsmetoder fedauth kräver drivrutinsnamnet azuresql (inte sqlserver). Om du använder sql.Open("sqlserver", ...) med en fedauth-parameter misslyckas autentiseringen tyst med Login failed for user ''. Importera paketet azuread och använd azuresql som visas i följande exempel.
Välj ett fedauth-flöde
Använd följande tabell för att välja lämpligt flöde för din hostingmiljö och källa till legitimation:
| Om du behöver koppla upp dig från... | Börja med... | Använd när... |
|---|---|---|
| Lokal utveckling | ActiveDirectoryDefault |
Du vill återanvända Azure CLI- eller Azure-utvecklarens CLI-uppgifter utan att konfigurera en tjänstehuvudperson eller hanterad identitet lokalt. |
| En Azure-hostad app med en hanterad identitet | ActiveDirectoryManagedIdentity |
Du vill ha en förutsägbar produktionskonfiguration och vill inte ha andra lokala inloggningskällor i kedjan. |
| A CI/CD pipeline in Azure DevOps | ActiveDirectoryAzurePipelines |
Din pipeline använder redan en Azure-tjänsteanslutning och exponerar SYSTEM_ACCESSTOKEN. |
| Kubernetes med Azure Workload Identity | ActiveDirectoryWorkloadIdentity |
Din pod får en OIDC-tokenfil och du vill ha arbetsbelastningsidentitet istället för en klienthemlighet. |
| En tjänstehuvudman med en hemlighet eller certifikat | ActiveDirectoryServicePrincipal |
Din app autentiseras som en appregistrering och du hanterar klienthemligheten eller certifikatet. |
| Ett verktyg som redan har en åtkomsttoken |
ActiveDirectoryServicePrincipalAccessToken eller en anpassad tokenleverantör |
Din app samlar in och uppdaterar tokens utanför föraren. |
| En delegerad användartoken från ett uppströms webb-API | ActiveDirectoryOnBehalfOf |
Du behöver byta en användartoken mot en SQL-scoped token i en mellanklassig tjänst. |
| Ett utvecklarverktyg eller interaktivt verktyg |
ActiveDirectoryInteractive, ActiveDirectoryDeviceCode, ActiveDirectoryAzClieller ActiveDirectoryAzureDeveloperCli |
En person är närvarande för att logga in, eller så vill du återanvända en befintlig lokal CLI-session. |
| En Windows-only app som hanterar integrerade autentiseringskrav |
ActiveDirectoryIntegrated (avancerad) |
Du tillhandahåller anpassad tokeninsamlingslogik för integrerade scenarier. |
Om du delar en reťazec pripojenia mellan lokal utveckling och Azure-hosting ActiveDirectoryDefault är det en bra startpunkt. I produktion använder du ActiveDirectoryManagedIdentity eller ActiveDirectoryServicePrincipal för att undvika latensen i autentiseringskedjan.
Installera azuread-paketet
Ladda ner underpaketet azuread som registrerar drivrutinen azuresql :
go get github.com/microsoft/go-mssqldb/azuread
Använd azuresql-drivrutinen
Importera paketet azuread (istället för eller som tillägg till baspaketet go-mssqldb ) och öppna anslutningar genom att använda drivrutinsnamnet 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")
// ...
}
Alla följande exempel riktar sig mot Azure SQL. Behåll encrypt=true&TrustServerCertificate=false i anslutningssträngen så att drivrutinen validerar servercertifikatet.
Fedauth-behörighetstyper
Sätt anslutningsparametern fedauth till ett av följande värden. De flesta typer mappas till en Azure Identity-legitimation från paketetazidentity.
ActiveDirectoryServicePrincipalAccessToken och anpassade tokenleverantörs-API:er använder tokens som anroparen tillhandahåller.
ActiveDirectoryDefault
Använder azidentity.DefaultAzureCredential, som försöker använda följande källor för autentiseringsuppgifter i följande ordning:
- Miljövariabler (
AZURE_TENANT_ID,AZURE_CLIENT_ID, och så vidare). - Arbetslastsidentitet för Kubernetes.
- Hanterad identitet.
- Autentiseringsuppgifter för Azure CLI.
- Autentiseringsuppgifter för Azure Developer CLI.
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false
Använd denna typ för lokal utveckling eftersom den automatiskt plockar upp Azure CLI-uppgifter. I produktion använder du ActiveDirectoryManagedIdentity eller ActiveDirectoryServicePrincipal direkt.
DefaultAzureCredential går igenom varje inloggningskälla på den första anslutningen, vilket lägger till latens som produktionsarbetsbelastningar inte behöver.
ActiveDirectoryManagedIdentity
Autentiserar med en systemtilldelad eller användartilldelad hanterad identitet. För en användartilldelad identitet, ange klient-ID i parametern user id :
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryManagedIdentity&encrypt=true&TrustServerCertificate=false
Med en användartilldelad identitet:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryManagedIdentity&user id=<client-id>&encrypt=true&TrustServerCertificate=false
Anmärkning
ActiveDirectoryMSI är ett alias för ActiveDirectoryManagedIdentity.
ActiveDirectoryServicePrincipal
Autentisera som tjänsteprincipal (appregistrering) med ett klient-ID och klienthemlighet:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryServicePrincipal&user id=<client-id>&password=<client-secret>&encrypt=true&TrustServerCertificate=false
För autentisering av certifikatbaserade tjänstehuvudpersoner, använd clientcertpath=<path-to-certificate> tillsammans med password=<certificate-password>.
Anmärkning
ActiveDirectoryApplication är ett alias för ActiveDirectoryServicePrincipal.
ActiveDirectoryServicePrincipalAccessToken
Använder en förinköpt service principal access-token som din applikation skickar direkt i reťazec pripojenia:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryServicePrincipalAccessToken&password=<access-token>&encrypt=true&TrustServerCertificate=false
Använd detta flöde endast när din applikation redan har hämtat och uppdaterat åtkomsttoken utanför drivrutinen. För de flesta service-to-service-scenarier, föredra ActiveDirectoryServicePrincipal eller en anpassad tokenleverantör.
ActiveDirectoryPassword
Important
Autentiseringsalternativet ActiveDirectoryPassword (Microsoft Entra ID-lösenordsautentisering) har fasats ut i Microsoft SQL-drivrutinerna. Det här högriskautentiseringsflödet är inte kompatibelt med obligatorisk Microsoft Entra multifaktorautentisering (MFA) och kanske inte fungerar i klientorganisationer där MFA tillämpas. Planera att migrera till en annan Microsoft Entra autentiseringsmetod.
Microsoft Entra ID:s lösenordsautentisering baseras på OAuth 2.0 Resource Owner Password Credentials (ROPC)-beviljandet, vilket gör det möjligt för ett program att logga in användaren genom att direkt hantera användarens lösenord.
Microsoft rekommenderar att du inte använder ROPC-flödet eftersom det är inkompatibelt med MFA. I de flesta scenarier är säkrare alternativ tillgängliga och rekommenderas. Det här flödet kräver en hög grad av förtroende för programmet och medför risker som inte finns i andra flöden. Använd endast det här flödet när säkrare flöden inte är livskraftiga. Microsoft flyttar från det här högriskautentiseringsflödet för att skydda användare från skadliga attacker. Mer information finns i Planera för obligatorisk multifaktorautentisering för Azure.
När en användare är närvarande vid inloggning använder du ActiveDirectoryInteractive eller ActiveDirectoryIntegrated-autentisering så att spårningsspårsattributen för den inloggade användaren och principer för villkorsstyrd åtkomst gäller.
För obevakade tjänst-till-tjänst-scenarier följer du vägledningen för Microsoft Entra tjänstkonto:
- Om programmet körs på Azure infrastruktur använder du ActiveDirectoryMSI (eller ActiveDirectoryManagedIdentity i vissa drivrutiner). Hanterade identiteter eliminerar kostnaderna för att underhålla och rotera hemligheter och certifikat.
- Om den hanterade identiteten inte är tillgänglig (till exempel om programmet körs utanför Azure) använder du ActiveDirectoryServicePrincipal. Där drivrutinen stöder det föredrar du ett klientcertifikat framför en klienthemlighet. Med ett certifikat finns den privata nyckeln kvar på klienten och endast en signerad försäkran skickas till Microsoft Entra för att autentisera klienten. Om nyckeln lagras i maskinvara (till exempel en TPM eller HSM) eller markeras som icke-exporterbar kan den inte kopieras ut som en sträng på det sätt som en klienthemlighet kan göra.
- Använd inte ett Microsoft Entra användarkonto som ett tjänstkonto.
Autentiserar med ett Microsoft Entra-användarnamn och lösenord:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryPassword&user id=<user>@mydomain.com&password=<password>&applicationclientid=<app-id>&encrypt=true&TrustServerCertificate=false
Parametern applicationclientid krävs för detta flöde.
ActiveDirectoryInteractive
Öppnar en webbläsarbaserad interaktiv inloggningsprompt för användaren. Lämpliga för lokala utvecklingsverktyg:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryInteractive&user id=<user>@mydomain.com&applicationclientid=<app-id>&encrypt=true&TrustServerCertificate=false
Parametern applicationclientid krävs för detta flöde.
ActiveDirectoryDeviceCode
Visar en enhetskod som användaren ska ange vid https://microsoft.com/devicelogin. Användbart för miljöer utan webbläsare:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDeviceCode&encrypt=true&TrustServerCertificate=false
ActiveDirectoryAzCli
Använder token från den inloggade Azure CLI-sessionen:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryAzCli&encrypt=true&TrustServerCertificate=false
ActiveDirectoryAzureDeveloperCli
Använder token från den inloggade Azure Developer CLI (azd) sessionen:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryAzureDeveloperCli&encrypt=true&TrustServerCertificate=false
ActiveDirectoryEnvironment
Läser inloggningsuppgifter från miljövariabler. Azure Identity-biblioteket inspekterar variabler som AZURE_TENANT_ID, AZURE_CLIENT_ID, och AZURE_CLIENT_SECRET:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryEnvironment&encrypt=true&TrustServerCertificate=false
ActiveDirectoryWorkloadIdentity
Autentisera genom att använda arbetsbelastningsidentitetsfederation. Använd denna metod i Kubernetes-poddar med Azure Workload Identity konfigurerat.
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryWorkloadIdentity&encrypt=true&TrustServerCertificate=false
ActiveDirectoryAzurePipelines
Autentisera genom att använda en Azure-pipelines-tjänsteanslutning. Ange pipelineparametrarna i reťazec pripojenia, eller låt drivrutinen läsa saknade värden från Azure-pipelines-miljövariabler.
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
Ställ in parametrar som krävs av drivrutinen:
| Parameter | Description |
|---|---|
user id |
Service principal client ID, valfritt följt av @tenant-id. |
serviceconnectionid |
Service connection ID från Azure DevOps. |
systemtoken |
Pipelinesystemets åtkomsttoken ($(System.AccessToken)). |
ActiveDirectoryClientAssertion
Autentisera genom att använda en klientassertion (en signerad JWT-token) istället för en klienthemlighet. Ange den signerade JWT i parametern clientassertion :
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryClientAssertion&user id=<client-id>@<tenant-id>&clientassertion=<jwt-token>&encrypt=true&TrustServerCertificate=false
ActiveDirectoryOnBehalfOf
Autentiserar genom att använda On-Behalf-Of (OBO)-flödet. Drivrutinen byter ut en uppströms användartoken mot en ny token som är begränsad till 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
Klientautentiseringsdelen kan använda password, clientcertpath, eller clientassertion, men userassertion det krävs alltid.
ActiveDirectoryIntegrated
Stöder ett avancerat arbetsflöde för integrerad autentisering. Detta läge kräver anpassad tokeninsamlingslogik via en tokenleverantör.
Använd detta läge endast på Windows. På Linux och macOS, använd en anpassad tokenleverantör för ditt autentiseringsflöde.
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryIntegrated&encrypt=true&TrustServerCertificate=false
Leverantör av anpassade token
Om ingen av de inbyggda fedauth typerna passar ditt scenario, använd ett av dessa tokenleverantörs-API:er för att tillhandahålla din egen tokeninsamlingslogik:
NewSecurityTokenConnector (Rekommenderas)
Använd detta API när du har en förinköpt OAuth2-åtkomsttoken:
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 (Förenklat API)
Använd detta API för enklare tokeninsamling utan kontexthantering.
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 (anpassade ADAL-arbetsflöden)
Använd detta API för anpassade arbetsflöden för Azure AD-tokeninsamling när varken de inbyggda fedauth lägena eller SecurityToken-API:erna passar ditt scenario:
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)
Denna metod är användbar när du behöver integrera med en anpassad identitetsleverantör, implementera token caching eller hantera en inloggningstyp som inte täcks av paketet azuread . De flesta applikationer bör använda NewSecurityTokenConnector med en token som hämtats i förväg.
Vanliga behörighetsalternativ
Dessa parametrar gäller för flera fedauth-typer:
| Parameter | Description |
|---|---|
applicationclientid |
Klientapplikations-ID. Krävs för ActiveDirectoryPassword och ActiveDirectoryInteractive. |
clientcertpath |
Väg till en PEM- eller PFX-klientcertifikatfil för certifikatbaserad tjänsteprincip eller On-Behalf-Of-autentisering. |
clientassertion |
Signerad JWT-assertion för ActiveDirectoryClientAssertion eller autentisering med On-Behalf-Of. |
serviceconnectionid |
ID för Azure-pipelines-tjänstanslutning. |
systemtoken |
Azure-pipelines systemåtkomsttoken. |
userassertion |
Uppströms användartoken för ActiveDirectoryOnBehalfOf. |
tokenfilepath |
Väg till OIDC-tokenfilen för ActiveDirectoryWorkloadIdentity i Kubernetes. |
additionallyallowedtenants |
Komma-separerad lista över ytterligare tenant-ID som tillåts när multitenant-autentisering behövs. |
disableinstancediscovery |
Ange true för att inaktivera instansidentifiering; använd endast om du har kontroll över auktoritets-URL:en. |
sendcertificatechain |
Ställ in på true att skicka certifikatkedjan för certifikatbaserad autentisering. |