Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Treiber go-mssqldb unterstützt die Microsoft Entra ID-Authentifizierung über das Paketazuread. Dieses Paket registriert einen separaten Treiber namens azuresql, der den Standardtreiber sqlserver mit Unterstützung von Microsoft Entra ID-Anmeldeinformationen kapselt.
Achtung
Alle eingebauten fedauth Authentifizierungsmethoden benötigen den Treibernamen azuresql (nicht sqlserver). Wenn du sql.Open("sqlserver", ...) mit einem fedauth-Parameter verwendest, schlägt die Authentifizierung mit Login failed for user '' stillschweigend fehl. Importieren Sie das Paket azuread und verwenden Sie azuresql, wie im folgenden Beispiel.
Wähle einen Fedauth-Fluss
Verwenden Sie die folgende Tabelle, um den passenden Ablauf für Ihre Hosting-Umgebung und die Quelle der Zugangsdaten auszuwählen:
| Wenn du eine Verbindung herstellen musst ... | Fang an mit... | Verwenden, wenn ... |
|---|---|---|
| Lokale Entwicklung | ActiveDirectoryDefault |
Sie möchten Azure CLI- oder Azure-Entwickler-CLI-Anmeldedaten wiederverwenden, ohne einen Service Principal oder eine verwaltete Identität lokal konfigurieren zu müssen. |
| Eine von Azure gehostete App mit einer verwalteten Identität | ActiveDirectoryManagedIdentity |
Du möchtest eine vorhersehbare Produktionskonfiguration und keine anderen lokalen Anmeldeinformationsquellen innerhalb der Kette. |
| Eine CI/CD-Pipeline in Azure DevOps | ActiveDirectoryAzurePipelines |
Deine Pipeline verwendet bereits eine Azure-Serviceverbindung und stellt SYSTEM_ACCESSTOKEN bereit. |
| Kubernetes mit Azure Workload Identity | ActiveDirectoryWorkloadIdentity |
Dein Pod erhält eine OIDC-Tokendatei und du möchtest eine Workload-Identität statt eines Client-Geheimnisses. |
| Ein Dienstprinzipal mit einem Geheimnis oder Zertifikat | ActiveDirectoryServicePrincipal |
Deine App authentifiziert sich als App-Registrierung und du verwaltest das Client-Geheimnis oder Zertifikat. |
| Ein Werkzeug, das bereits einen Zugriffstoken besitzt |
ActiveDirectoryServicePrincipalAccessToken oder einen benutzerdefinierten Token-Anbieter |
Deine App erwirbt und aktualisiert Token außerhalb des Fahrers. |
| Ein delegiertes Benutzertoken aus einer Upstream-Web-API | ActiveDirectoryOnBehalfOf |
Du musst ein Benutzertoken in einem Dienst der mittleren Ebene gegen ein SQL-bereichsgebundenes Token austauschen. |
| Ein Entwickler-Tool oder interaktives Dienstprogramm |
ActiveDirectoryInteractive, ActiveDirectoryDeviceCode, ActiveDirectoryAzCli oder ActiveDirectoryAzureDeveloperCli |
Ein Mensch ist anwesend, um sich anzumelden, oder du möchtest eine bestehende lokale CLI-Sitzung wiederverwenden. |
| Eine ausschließlich Windows-App, die integrierte Authentifizierungsanforderungen übernimmt |
ActiveDirectoryIntegrated (fortgeschritten) |
Du stellst eine benutzerdefinierte Token-Erfassungslogik für integrierte Szenarien bereit. |
Wenn du eine Verbindungszeichenfolge zwischen lokaler Entwicklung und Azure-Hosting teilst, ActiveDirectoryDefault ist das ein guter Anfang. Für die Produktion verwenden ActiveDirectoryManagedIdentity oder ActiveDirectoryServicePrincipal um die Latenz der Zugangsdatenkette zu vermeiden.
Installiere das azuread-Paket
Laden Sie das azuread Unterpaket herunter, das den Treiber azuresql registriert:
go get github.com/microsoft/go-mssqldb/azuread
Verwenden Sie den azuresql-treiber
Importiere das azuread Paket (statt oder zusätzlich zum Basispaket go-mssqldb ) und öffne Verbindungen mit dem azuresql Treibernamen:
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")
// ...
}
Alle folgenden Beispiele zielen auf Azure SQL ab. Behalten Sie encrypt=true&TrustServerCertificate=false in der Verbindungszeichenfolge bei, damit der Treiber das Serverzertifikat überprüft.
Arten von Fedauth-Zertifikaten
Setzen Sie den Verbindungsparameter fedauth auf einen der folgenden Werte. Die meisten Typen werden einer Azure Identity-Anmeldeinformation aus dem Paket azidentity zugeordnet.
ActiveDirectoryServicePrincipalAccessToken und benutzerdefinierte Token-Provider-APIs verwenden vom Anrufer bereitgestellte Tokens.
ActiveDirectoryDefault
Verwendet azidentity.DefaultAzureCredential, das die folgenden Zugangsquellen in der Reihenfolge ausprobiert:
- Umweltvariablen (
AZURE_TENANT_ID,AZURE_CLIENT_ID, und so weiter). - Workload-Identität für Kubernetes.
- Verwaltete Identität.
- Azure CLI-Anmeldeinformationen
- Azure Developer CLI-Zugangsdaten.
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false
Verwenden Sie diesen Typ für die lokale Entwicklung, da er automatisch Azure CLI-Zugangsdaten erkennt. Für den Produktiveinsatz verwenden Sie ActiveDirectoryManagedIdentity oder ActiveDirectoryServicePrincipal direkt.
DefaultAzureCredential durchläuft bei der ersten Verbindung jede Quelle für Anmeldeinformationen, was zu zusätzlicher Latenz führt, die für Produktionsworkloads nicht erforderlich ist.
ActiveDirectoryManagedIdentity
Authentifiziert sich mit einer vom System zugewiesenen oder vom Benutzer zugewiesenen verwalteten Identität. Für eine benutzerdefinierte Identität geben Sie die Client-ID im Parameter user id an:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryManagedIdentity&encrypt=true&TrustServerCertificate=false
Mit einer benutzerdefinierten Identität:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryManagedIdentity&user id=<client-id>&encrypt=true&TrustServerCertificate=false
Note
ActiveDirectoryMSI ist ein Alias für ActiveDirectoryManagedIdentity.
ActiveDirectoryServicePrincipal
Authentifiziert sich als Service Principal (App-Registrierung) mit einer Client-ID und einem Client-Geheimnis:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryServicePrincipal&user id=<client-id>&password=<client-secret>&encrypt=true&TrustServerCertificate=false
Für die zertifikatsbasierte Service-Principal-Authentifizierung verwenden Sie clientcertpath=<path-to-certificate> zusammen mit password=<certificate-password>.
Note
ActiveDirectoryApplication ist ein Alias für ActiveDirectoryServicePrincipal.
ActiveDirectoryServicePrincipalAccessToken
Verwendet ein vorab erworbenes Service Principal Access Token, das Ihre Anwendung direkt in der Verbindungszeichenfolge weitergibt:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryServicePrincipalAccessToken&password=<access-token>&encrypt=true&TrustServerCertificate=false
Verwenden Sie diesen Fluss nur, wenn Ihre Anwendung bereits den Zugriffstoken außerhalb des Treibers erfasst und aktualisiert hat. Für die meisten Service-to-Service-Szenarien sollten Sie ActiveDirectoryServicePrincipal oder einen benutzerdefinierten Tokenanbieter verwenden.
ActiveDirectoryPassword
Important
Die ActiveDirectoryPassword-Authentifizierungsoption (Microsoft Entra ID Kennwortauthentifizierung) ist in den Microsoft SQL-Treibern veraltet. Dieser Hochrisiko-Authentifizierungsfluss ist mit der verpflichtenden Microsoft Entra-Mehrstufigen Authentifizierung (MFA) nicht kompatibel und funktioniert möglicherweise nicht in Mandanten, in denen MFA erzwungen wird. Planen Sie die Migration zu einer anderen Microsoft Entra Authentifizierungsmethode.
Microsoft Entra ID Kennwortauthentifizierung basiert auf der OAuth 2.0 Resource Owner Password Credentials (ROPC)-Erteilung, die es einer Anwendung ermöglicht, sich beim Benutzer direkt anzumelden, indem es sein Kennwort direkt verarbeitet.
Microsoft empfiehlt, den ROPC-Fluss nicht zu verwenden, da er nicht mit MFA kompatibel ist. In den meisten Szenarien sind sicherere Alternativen verfügbar und empfohlen. Dieser Fluss erfordert ein hohes Vertrauen in die Anwendung und trägt Risiken, die in anderen Flüssen nicht vorhanden sind. Verwenden Sie diesen Fluss nur, wenn sicherere Flüsse nicht lebensfähig sind. Microsoft entfernt sich von diesem Authentifizierungsfluss mit hohem Risiko, um Benutzer vor böswilligen Angriffen zu schützen. Weitere Informationen finden Sie unter Planung für die obligatorische mehrstufige Authentifizierung für Azure.
Wenn ein Benutzer bei der Anmeldung vorhanden ist, verwenden Sie die ActiveDirectoryInteractive- oder ActiveDirectoryIntegrated-Authentifizierung, sodass die Attribute des Überwachungspfads für den angemeldeten Benutzer und die Richtlinien für bedingten Zugriff gelten.
Befolgen Sie für unbeaufsichtigte Dienst-zu-Dienst-Szenarien die Microsoft Entra Richtlinien für das Dienstkonto:
- Wenn Ihre Anwendung in Azure Infrastruktur ausgeführt wird, verwenden Sie ActiveDirectoryMSI (oder ActiveDirectoryManagedIdentity in einigen Treibern). Verwaltete Identitäten beseitigen den Aufwand für die Verwaltung und Rotation von Geheimnissen und Zertifikaten.
- Wenn verwaltete Identität nicht verfügbar ist (z. B. wird die Anwendung außerhalb Azure ausgeführt), verwenden Sie ActiveDirectoryServicePrincipal. Wo der Treiber dies unterstützt, bevorzugen Sie ein Clientzertifikat über einen geheimen Clientschlüssel. Bei einem Zertifikat bleibt der private Schlüssel auf dem Client, und nur eine signierte Assertion wird an Microsoft Entra gesendet, um den Client zu authentifizieren. Wenn der Schlüssel in Hardware gespeichert ist (z. B. in einem TPM oder HSM) oder als nicht exportierbar gekennzeichnet ist, kann er nicht wie ein Clientgeheimnis als Zeichenfolge extrahiert werden.
- Verwenden Sie kein Microsoft Entra Benutzerkonto als Dienstkonto.
Authentifiziert sich mit einem Microsoft Entra-Benutzernamen und Passwort:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryPassword&user id=<user>@mydomain.com&password=<password>&applicationclientid=<app-id>&encrypt=true&TrustServerCertificate=false
Der Parameter applicationclientid ist für diesen Fluss erforderlich.
ActiveDirectoryInteractive
Öffnet einen browserbasierten interaktiven Anmeldeprompt für den Nutzer. Geeignet für lokale Entwicklungstools:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryInteractive&user id=<user>@mydomain.com&applicationclientid=<app-id>&encrypt=true&TrustServerCertificate=false
Der Parameter applicationclientid ist für diesen Fluss erforderlich.
ActiveDirectoryDeviceCode
Zeigt einen Gerätecode an, den der Benutzer bei eingeben muss https://microsoft.com/devicelogin. Nützlich für Umgebungen ohne Browser:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDeviceCode&encrypt=true&TrustServerCertificate=false
ActiveDirectoryAzCli
Verwendet das Token aus der angemeldeten Azure CLI-Sitzung:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryAzCli&encrypt=true&TrustServerCertificate=false
ActiveDirectoryAzureDeveloperCli
Verwendet das Token aus der angemeldeten Azure Developer CLI (azd)-Sitzung:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryAzureDeveloperCli&encrypt=true&TrustServerCertificate=false
ActiveDirectoryEnvironment
Liest Zugangsdaten aus Umgebungsvariablen aus. Die Azure Identity-Bibliothek inspiziert Variablen wie AZURE_TENANT_ID, AZURE_CLIENT_ID, und AZURE_CLIENT_SECRET:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryEnvironment&encrypt=true&TrustServerCertificate=false
ActiveDirectoryWorkloadIdentity
Authentifiziert sich mithilfe von Workload Identity Federation. Verwenden Sie diese Methode in Kubernetes-Pods mit konfigurierter Azure Workload Identity.
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryWorkloadIdentity&encrypt=true&TrustServerCertificate=false
ActiveDirectoryAzurePipelines
Authentifiziert sich durch die Verwendung einer Azure Pipelines-Serviceverbindung. Geben Sie die Pipeline-Parameter in der Verbindungszeichenfolge bereit oder lassen Sie den Treiber fehlende Werte aus Azure Pipelines-Umgebungsvariablen lesen.
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
Stellen Sie die Parameter wie vom Treiber gefordert ein:
| Parameter | Description |
|---|---|
user id |
Service Principal Client ID, optional gefolgt von @tenant-id. |
serviceconnectionid |
Service Connection ID von Azure DevOps. |
systemtoken |
Der Pipeline-System-Zugriffstoken ($(System.AccessToken)). |
ActiveDirectoryClientAssertion
Authentifiziert sich durch Verwendung einer Client-Assertion (ein signiertes JWT-Token) statt eines Client-Geheimnisses. Gib das signierte JWT im Parameter clientassertion an:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryClientAssertion&user id=<client-id>@<tenant-id>&clientassertion=<jwt-token>&encrypt=true&TrustServerCertificate=false
ActiveDirectoryOnBehalfOf
Authentifiziert sich mithilfe des On-Behalf-Of (OBO)-Flows. Der Treiber tauscht ein Upstream-Benutzertoken gegen ein neues Token, das auf SQL Server zugeschnitten ist.
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
Für den Teil der Clientauthentifizierung können password, clientcertpath oder clientassertion verwendet werden, aber userassertion ist immer erforderlich.
ActiveDirectoryIntegrated
Unterstützt einen fortschrittlichen integrierten Authentifizierungs-Workflow. Dieser Modus erfordert eine benutzerdefinierte Token-Erfassungslogik über einen Token-Anbieter.
Verwenden Sie diesen Modus nur unter Windows. Unter Linux und macOS verwenden Sie einen benutzerdefinierten Token-Anbieter für Ihren Authentifizierungsfluss.
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryIntegrated&encrypt=true&TrustServerCertificate=false
Custom Token-Anbieter
Wenn keiner der eingebauten fedauth Typen zu Ihrem Szenario passt, verwenden Sie eine dieser Token-Provider-APIs, um Ihre eigene Token-Erwerbslogik bereitzustellen:
NewSecurityTokenConnector (Empfohlen)
Verwenden Sie diese API, wenn Sie ein vorab erworbenes OAuth2-Zugriffstoken haben:
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 (vereinfachte API)
Nutzen Sie diese API für eine einfachere Token-Erfassung ohne Kontextverarbeitung.
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 (benutzerdefinierte ADAL-Workflows)
Nutzen Sie diese API für benutzerdefinierte Azure AD Token-Erwerbungs-Workflows, wenn weder die eingebauten fedauth Modi noch die SecurityToken-APIs zu Ihrem Szenario passen:
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)
Dieser Ansatz ist nützlich, wenn Sie sich mit einem benutzerdefinierten Identitätsanbieter integrieren, Token-Caching implementieren oder einen Credential-Typ verwalten müssen, der nicht vom Paket azuread abgedeckt ist. Die meisten Anwendungen sollten NewSecurityTokenConnector mit einem zuvor abgerufenen Token verwenden.
Gängige Qualifikationsoptionen
Diese Parameter gelten für mehrere Fedauth-Typen:
| Parameter | Description |
|---|---|
applicationclientid |
Client-Anwendungs-ID. Erforderlich für ActiveDirectoryPassword und ActiveDirectoryInteractive. |
clientcertpath |
Pfad zu einer PEM- oder PFX-Client-Zertifikatsdatei für die zertifikatbasierte Service-Principal- oder On-Behalf-Of-Authentifizierung. |
clientassertion |
Signierte JWT-Assertion für ActiveDirectoryClientAssertion oder die On-Behalf-Of-Authentifizierung. |
serviceconnectionid |
Azure Pipelines-Dienstverbindungs-ID. |
systemtoken |
Azure Pipelines-Systemzugriffstoken. |
userassertion |
Upstream-Benutzertoken für ActiveDirectoryOnBehalfOf. |
tokenfilepath |
Pfad zur OIDC-Tokendatei für ActiveDirectoryWorkloadIdentity in Kubernetes. |
additionallyallowedtenants |
Kommagetrennte Liste zusätzlicher Mandanten-IDs, die zugelassen werden, wenn eine Multitenantauthentifizierung erforderlich ist. |
disableinstancediscovery |
Auf true festgelegt, um die Instanzerkennung zu deaktivieren; nur verwenden, wenn Sie die Autorisierungs-URL verwalten. |
sendcertificatechain |
Stellen Sie auf true ein, um die Zertifikatskette für zertifikatsbasierte Authentifizierung zu senden. |