Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ovladač go-mssqldb podporuje autentizaci Microsoft Entra ID prostřednictvím balíčkuazuread. Tento balíček registruje samostatný ovladač s názvem azuresql, který obaluje standardní ovladač sqlserver a přidává podporu přihlašovacích údajů Microsoft Entra ID.
Caution
Všechny vestavěné fedauth autentizační metody vyžadují název ovladače azuresql (nikoli sqlserver). Pokud použijete sql.Open("sqlserver", ...) s parametremfedauth, autentizace tiše selže s .Login failed for user '' Importujte azuread balíček a použijte azuresql tak, jak je ukázáno v následujícím příkladu.
Vyberte fedauthův tok
Použijte následující tabulku k výběru vhodného toku pro vaše hostitelské prostředí a zdroj přihlašovacích údajů:
| Pokud potřebuješ spojit z... | Začni s... | Použijte, když... |
|---|---|---|
| Místní rozvoj | ActiveDirectoryDefault |
Chcete znovu použít přihlašovací údaje Azure CLI nebo Azure Developer CLI bez nutnosti lokálně konfigurovat principal služby nebo spravovanou identitu. |
| Aplikace hostovaná v Azure s řízenou identitou | ActiveDirectoryManagedIdentity |
Chcete předvídatelnou výrobní konfiguraci a nechcete mít v řetězci další místní zdroje kvalifikace. |
| A CI/CD pipeline in Azure DevOps | ActiveDirectoryAzurePipelines |
Váš kanál už používá připojení ke službě Azure a zpřístupňuje SYSTEM_ACCESSTOKEN. |
| Kubernetes s Azure Workload Identity | ActiveDirectoryWorkloadIdentity |
Váš pod obdrží soubor s tokenem OIDC a místo tajného klíče klienta chcete použít identitu úlohy. |
| Hlavní představitel služby s tajemstvím nebo certifikátem | ActiveDirectoryServicePrincipal |
Vaše aplikace se ověřuje pomocí registrace aplikace a vy spravujete tajný klíč klienta nebo certifikát. |
| Nástroj, který už má přístupový token |
ActiveDirectoryServicePrincipalAccessToken nebo poskytovatel vlastních tokenů |
Vaše aplikace získává a obnovuje tokeny mimo řidiče. |
| Delegovaný uživatelský token z upstream webového API | ActiveDirectoryOnBehalfOf |
Musíte vyměnit uživatelský token za SQL zaměřený token ve střední službě. |
| Nástroj pro vývojáře nebo interaktivní nástroj |
ActiveDirectoryInteractive, ActiveDirectoryDeviceCode, ActiveDirectoryAzClinebo ActiveDirectoryAzureDeveloperCli |
Člověk je přítomen k přihlášení nebo chcete znovu použít stávající lokální CLI relaci. |
| Aplikace pouze pro Windows, která spravuje požadavky na integrovanou autentizaci |
ActiveDirectoryIntegrated (pokročilé) |
Poskytujete vlastní logiku získávání tokenů pro integrované scénáře. |
Pokud sdílíte jeden připojovací řetězec napříč lokálním vývojem a Azure hostingem, ActiveDirectoryDefault je to dobrý výchozí bod. Pro produkční prostředí použijte ActiveDirectoryManagedIdentity nebo ActiveDirectoryServicePrincipal, abyste se vyhnuli latenci řetězce přihlašovacích údajů.
Nainstalovat balíček AzureR
Stáhněte si subbalíčekazuread, který registruje ovladač:azuresql
go get github.com/microsoft/go-mssqldb/azuread
Použijte ovladač AzureSQL
Importujte azuread balíček (místo nebo navíc k základnímu go-mssqldb balíčku) a otevřete spojení pomocí názvu ovladače 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")
// ...
}
Všechny následující příklady cílí na Azure SQL. Udržujte encrypt=true&TrustServerCertificate=false v připojovací řetězec, aby ovladač ověřoval serverový certifikát.
Typy oprávnění Fedauth
Nastavte fedauth parametr spojení na jednu z následujících hodnot. Většina typů odpovídá přihlašovacím údajům Azure Identity z balíčku azidentity.
ActiveDirectoryServicePrincipalAccessToken a API pro poskytovatele tokenů na míru používají tokeny dodané volajícím.
ActiveDirectoryDefault
Používá azidentity.DefaultAzureCredential, která zkouší následující zdroje přihlašovacích údajů v pořadí:
- Proměnné prostředí (
AZURE_TENANT_ID,AZURE_CLIENT_ID, a tak dále). - Identita úlohy pro Kubernetes.
- Spravovaná identita
- Azure CLI přihlašovací údaje.
- Azure Developer CLI přihlašovací údaje.
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false
Tento typ používejte pro lokální vývoj, protože automaticky zachytává přihlašovací údaje pro Azure CLI. V produkčním prostředí použijte přímo ActiveDirectoryManagedIdentity nebo ActiveDirectoryServicePrincipal.
DefaultAzureCredential Prochází každý zdroj přihlašovacích údajů při prvním připojení, což přidává latenci, kterou produkční zátěže nepotřebují.
ActiveDirectoryManagedIdentity
Autentizuje se systémově přiřazenou nebo uživatelem přiřazenou spravovanou identitou. Pro uživatelem přiřazenou identitu uveďte ID klienta v parametru user id :
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryManagedIdentity&encrypt=true&TrustServerCertificate=false
S uživatelem přiřazenou identitou:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryManagedIdentity&user id=<client-id>&encrypt=true&TrustServerCertificate=false
Note
ActiveDirectoryMSI je alias pro ActiveDirectoryManagedIdentity.
ActiveDirectoryServicePrincipal
Ověřuje se jako instanční objekt služby (registrace aplikace) pomocí ID klienta a tajného klíče klienta:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryServicePrincipal&user id=<client-id>&password=<client-secret>&encrypt=true&TrustServerCertificate=false
Pro ověřování instančního objektu služby pomocí certifikátu použijte clientcertpath=<path-to-certificate> společně s password=<certificate-password>.
Note
ActiveDirectoryApplication je alias pro ActiveDirectoryServicePrincipal.
ActiveDirectoryServicePrincipalAccessToken
Používá předem získaný přístupový token instančního objektu služby, který vaše aplikace předává přímo v připojovacím řetězci:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryServicePrincipalAccessToken&password=<access-token>&encrypt=true&TrustServerCertificate=false
Tento postup používejte pouze tehdy, když vaše aplikace již získá a obnoví přístupový token mimo ovladač. Pro většinu scénářů služby preferujte ActiveDirectoryServicePrincipal nebo poskytovatele vlastních tokenů.
ActiveDirectoryPassword
Important
Možnost ověřování ActiveDirectoryPassword (ověřování hesla Microsoft Entra ID) je v ovladačích MICROSOFT SQL zastaralá. Tento tok ověřování s vysokým rizikem není kompatibilní s povinným Microsoft Entra vícefaktorovým ověřováním (MFA) a nemusí fungovat v tenantech, ve kterých se vynucuje vícefaktorové ověřování. Naplánujte migraci na jinou metodu ověřování Microsoft Entra.
Ověřování heslem v Microsoft Entra ID je založeno na grantu OAuth 2.0 Resource Owner Password Credentials (ROPC), který umožňuje aplikaci přihlásit uživatele tím, že přímo pracuje s jeho heslem.
Microsoft doporučuje nepoužívat tok ROPC, protože není kompatibilní s vícefaktorovým ověřováním. Ve většině scénářů jsou k dispozici a doporučeny bezpečnější alternativy. Tento tok vyžaduje vysokou míru důvěryhodnosti v aplikaci a nese rizika, která nejsou přítomna v jiných tocích. Tento tok používejte pouze tehdy, pokud bezpečnější toky nejsou proveditelné. Microsoft odchází od tohoto vysoce rizikového toku ověřování, aby chránil uživatele před škodlivými útoky. Další informace najdete v tématu Plánování povinného vícefaktorového ověřování pro Azure.
Pokud je při přihlašování přítomen uživatel, použijte ověřování ActiveDirectoryInteractive nebo ActiveDirectoryIntegrated, aby byla auditní stopa přiřazena přihlášenému uživateli a aby se uplatnily zásady podmíněného přístupu.
V případě bezobslužných scénářů mezi službami postupujte podle pokynů k účtu služby Microsoft Entra:
- Pokud vaše aplikace běží na Azure infrastruktuře, použijte ActiveDirectoryMSI (nebo ActiveDirectoryManagedIdentity v některých ovladačích). Spravované identity eliminují režii při údržbě a obměně tajných kódů a certifikátů.
- Pokud spravovaná identita není dostupná (například aplikace běží mimo Azure), použijte ActiveDirectoryServicePrincipal. Pokud ho ovladač podporuje, upřednostňujte klientský certifikát před tajným klíčem klienta. S certifikátem zůstane privátní klíč v klientovi a do Microsoft Entra k ověření klienta se odešle jenom podepsaný kontrolní výraz. Pokud je klíč uložen v hardwaru (například v modulu TPM nebo HSM) nebo je označen jako neexportovatelný, nelze jej zkopírovat jako textový řetězec tak, jako to lze u tajného klíče klienta.
- Nepoužívejte Microsoft Entra uživatelský účet jako účet služby.
Autentizuje se uživatelským jménem a heslem 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 je pro tento tok vyžadován.
ActiveDirectoryInteractive
Otevře uživateli interaktivní přihlašovací výzvu v prohlížeči. Vhodné pro nástroje místního rozvoje:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryInteractive&user id=<user>@mydomain.com&applicationclientid=<app-id>&encrypt=true&TrustServerCertificate=false
Parametr applicationclientid je pro tento tok vyžadován.
ActiveDirectoryDeviceCode
Zobrazuje kód zařízení, který uživatel zadá na .https://microsoft.com/devicelogin Užitečné pro prostředí bez prohlížeče:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDeviceCode&encrypt=true&TrustServerCertificate=false
ActiveDirectoryAzCli
Používá token z přihlášené Azure CLI relace:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryAzCli&encrypt=true&TrustServerCertificate=false
ActiveDirectoryAzureDeveloperCli
Používá token z přihlášené relace Azure Developer CLI (azd)
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryAzureDeveloperCli&encrypt=true&TrustServerCertificate=false
ActiveDirectoryEnvironment
Čte přihlašovací údaje z proměnných prostředí. Knihovna Azure Identity kontroluje proměnné jako AZURE_TENANT_ID, AZURE_CLIENT_ID, a AZURE_CLIENT_SECRET:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryEnvironment&encrypt=true&TrustServerCertificate=false
ActiveDirectoryWorkloadIdentity
Ověřuje se pomocí federace identit úloh. Použijte tuto metodu v Kubernetes podech s konfigurovanou Azure Workload Identity.
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryWorkloadIdentity&encrypt=true&TrustServerCertificate=false
ActiveDirectoryAzurePipelines
Autentizuje pomocí připojení služby Azure Pipelines. Zadejte parametry pipeline do připojovací řetězec, nebo nechte ovladač číst chybějící hodnoty z proměnných prostředí 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
Nastavte parametry podle požadavků ovladače:
| Parameter | Description |
|---|---|
user id |
ID klienta hlavního servisu, volitelně následované .@tenant-id |
serviceconnectionid |
ID připojení služby z Azure DevOps. |
systemtoken |
Přístupový token systému pipeline ($(System.AccessToken)). |
ActiveDirectoryClientAssertion
Autentizuje se pomocí klientské aserce (podepsaného JWT tokenu) místo klientského tajemství. Uveďte podepsaný JWT v parametru clientassertion :
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryClientAssertion&user id=<client-id>@<tenant-id>&clientassertion=<jwt-token>&encrypt=true&TrustServerCertificate=false
ActiveDirectoryOnBehalfOf
Autentizuje pomocí toku On-Behalf-Of (OBO). Ovladač vymění upstream uživatelský token za nový token zaměřený na 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
Klientská autentizační část může použít password, clientcertpath, nebo clientassertion, ale userassertion je vždy vyžadována.
ActiveDirectoryIntegrated
Podporuje pokročilý workflow s integrovanou autentizací. Tento režim vyžaduje vlastní logiku získávání tokenů prostřednictvím poskytovatele tokenů.
Tento režim používejte pouze na Windows. Na Linuxu a macOS používejte pro autentizační tok vlastního poskytovatele tokenů.
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryIntegrated&encrypt=true&TrustServerCertificate=false
Poskytovatel vlastních tokenů
Pokud žádný z vestavěných fedauth typů neodpovídá vašemu scénáři, použijte jedno z těchto API poskytovatelů tokenů, které vám zajistí vlastní logiku získávání tokenů:
NewSecurityTokenConnector (doporučeno)
Použijte toto API, pokud máte předem získaný přístupový token 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 (zjednodušené API)
Použijte toto API pro jednodušší získávání tokenů bez zpracování kontextu.
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 (Vlastní pracovní postupy ADAL)
Použijte toto API pro vlastní workflow získávání tokenů Azure AD, pokud ani vestavěné fedauth režimy, ani SecurityToken API neodpovídají vaší situaci:
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)
Tento přístup je užitečný, když potřebujete integrovat s vlastním poskytovatelem identity, implementovat cachování tokenů nebo zpracovat typ přihlašovacích údajů, který balíček nepokrývá azuread . Většina aplikací by měla používat NewSecurityTokenConnector s předem získaným tokenem.
Běžné možnosti kvalifikace
Tyto parametry platí pro více typů fedauth:
| Parameter | Description |
|---|---|
applicationclientid |
ID klientské aplikace. Vyžaduje se pro ActiveDirectoryPassword a ActiveDirectoryInteractive. |
clientcertpath |
Cesta k souboru klientského certifikátu PEM nebo PFX pro instanční objekt služby založený na certifikátu nebo ověřování On-Behalf-Of. |
clientassertion |
Podepsal jsem JWT tvrzení pro ActiveDirectoryClientAssertion nebo On-Behalf-Of autentizaci. |
serviceconnectionid |
ID připojení služby Azure Pipelines. |
systemtoken |
Token systémového přístupu Azure Pipelines |
userassertion |
Upstream uživatelský token pro ActiveDirectoryOnBehalfOf. |
tokenfilepath |
Cesta k souboru tokenu OIDC pro ActiveDirectoryWorkloadIdentity v Kubernetes. |
additionallyallowedtenants |
Čárkami oddělený seznam dalších ID tenantů, která se mají povolit, pokud je vyžadováno víceklientské ověřování. |
disableinstancediscovery |
Nastavte na true pro zakázání objevování instance; použijte pouze pokud ovládáte autoritní URL. |
sendcertificatechain |
Nastavte na hodnotu true, aby se odesílal řetězec certifikátů pro ověřování pomocí certifikátů. |