Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
go-mssqldb sürücüsü, azuread paketi aracılığıyla Microsoft Entra ID kimlik doğrulamasını destekler. Bu paket, Microsoft Entra ID kimlik bilgisi desteğiyle standart sqlserver sürücüsünü saran, azuresql adlı ayrı bir sürücüyü kaydeder.
Dikkat
Tüm yerleşik kimlik doğrulama yöntemleri fedauth sürücü adını gerektirir azuresql (değil sqlserver).
fedauth parametresiyle sql.Open("sqlserver", ...) kullanırsanız, kimlik doğrulaması Login failed for user '' ile sessizce başarısız olur. Aşağıdaki örnekte gösterildiği gibi azuread paketini içe aktarın ve azuresql kullanın.
fedauth akışını seçin
Aşağıdaki tabloyu kullanarak barındırma ortamınız ve kimlik kaynağınız için uygun akışı seçin:
| Bağlantı kurmanız gerekirse... | Şununla başlayın... | Ne zaman kullan... |
|---|---|---|
| Yerel kalkınma | ActiveDirectoryDefault |
Azure CLI veya Azure Developer CLI kimlik bilgilerini yerel olarak hizmet esası veya yönetilen kimlik yapılandırmadan yeniden kullanmak istersiniz. |
| Yönetilen kimliğe sahip, Azure’da barındırılan bir uygulama | ActiveDirectoryManagedIdentity |
Öngörülebilir bir üretim yapılandırması istersiniz ve zincirde diğer yerel kimlik kaynaklarını istemezsiniz. |
| Azure DevOps'ta bir CI/CD işlem hattı | ActiveDirectoryAzurePipelines |
İşlem hattınız zaten bir Azure hizmet bağlantısı kullanıyor ve SYSTEM_ACCESSTOKEN öğesini kullanıma sunuyor. |
| Azure İş Yükü Kimliği ile Kubernetes | ActiveDirectoryWorkloadIdentity |
Podunuz bir OIDC token dosyası alır ve istemci sırrı yerine iş yükü kimliği istersiniz. |
| Gizli anahtara veya sertifikaya sahip bir hizmet sorumlusu | ActiveDirectoryServicePrincipal |
Uygulamanız bir uygulama kaydı olarak doğrulanır ve müşteri sırrını veya sertifikasını siz yönetirsiniz. |
| Halihazırda bir erişim belirtecine sahip olan bir araç |
ActiveDirectoryServicePrincipalAccessToken veya özel token sağlayıcısı |
Uygulamanız tokenları sürücü dışında alır ve yeniler. |
| Bir üst web API'sinden gelen atanmış kullanıcı belirteci | ActiveDirectoryOnBehalfOf |
Orta seviye bir hizmette kullanıcı tokenını SQL kapsamlı bir token ile değiştirmeniz gerekir. |
| Bir geliştirici aracı veya etkileşimli yardımcı araç |
ActiveDirectoryInteractive, ActiveDirectoryDeviceCode, ActiveDirectoryAzCliveya ActiveDirectoryAzureDeveloperCli |
Bir insan giriş yapmak için hazır ya da mevcut yerel CLI oturumunu tekrar kullanmak istersiniz. |
| Entegre kimlik doğrulama gereksinimlerini yöneten sadece Windows için bir uygulama |
ActiveDirectoryIntegrated (ileri) |
Entegre senaryolar için özel token edinme mantığı sağlarsınız. |
Yerel geliştirme ve Azure hosting arasında tek bir bağlantı dizesi paylaşıyorsanız, ActiveDirectoryDefault bu iyi bir başlangıç noktasıdır. Üretimde, kimlik bilgisi zinciri gecikmesini önlemek için ActiveDirectoryManagedIdentity veya ActiveDirectoryServicePrincipal kullanın.
Azureread paketini kur
azuresql sürücüsünü kaydeden azuread alt paketini indirin:
go get github.com/microsoft/go-mssqldb/azuread
Azure SQL sürücüsünü kullanın
azuread paketini (temel go-mssqldb paketinin yerine veya ona ek olarak) içe aktarın ve bağlantıları azuresql sürücü adını kullanarak açın:
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")
// ...
}
Aşağıdaki tüm örnekler Azure SQL'i hedefliyor. Sürücünün sunucu sertifikasını doğrulaması için bağlantı dizesinde encrypt=true&TrustServerCertificate=false değerini koruyun.
Fedauth kimlik bilgisi türleri
Bağlantı parametresini fedauth aşağıdaki değerlerden birine ayarlayın. Çoğu tür, azidentity paketinden bir Azure Identity kimlik bilgisine eşlenir.
ActiveDirectoryServicePrincipalAccessToken ve özel token sağlayıcı API'leri, çağıran tarafından sağlanan tokenları kullanır.
ActiveDirectoryDefault
Sırayla aşağıdaki kimlik bilgisi kaynaklarını deneyen azidentity.DefaultAzureCredential kullanır:
- Çevre değişkenleri (
AZURE_TENANT_ID,AZURE_CLIENT_ID, ve benzeri). - Kubernetes için iş yükü kimliği.
- Yönetilen kimlik.
- Azure CLI kimlik bilgileri.
- Azure Developer CLI kimlik bilgileri.
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false
Bu tipi yerel geliştirme için kullanın çünkü Azure CLI kimlik bilgilerini otomatik olarak alır. Üretim için, doğrudan ActiveDirectoryManagedIdentity veya ActiveDirectoryServicePrincipal kullanın.
DefaultAzureCredential İlk bağlantıdaki her kimlik kaynağını gözden geçirir, bu da üretim iş yüklerinin ihtiyaç duymadığı gecikmeyi artırır.
ActiveDirectoryManagedIdentity
Sistem tarafından atanan veya kullanıcı tarafından atanan yönetilen bir kimlik ile kimlik doğrulama yapar. Kullanıcı tarafından atanan bir kimlik için, parametrede user id istemci kimliğini girin:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryManagedIdentity&encrypt=true&TrustServerCertificate=false
Kullanıcı tarafından atanan bir kimlik ile:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryManagedIdentity&user id=<client-id>&encrypt=true&TrustServerCertificate=false
Uyarı
ActiveDirectoryMSI , için ActiveDirectoryManagedIdentitybir diğer addır.
ActiveDirectoryServicePrincipal
Bir istemci kimliği ve istemci parolasıyla hizmet sorumlusu (uygulama kaydı) olarak kimlik doğrulaması yapar:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryServicePrincipal&user id=<client-id>&password=<client-secret>&encrypt=true&TrustServerCertificate=false
Sertifika tabanlı hizmet ana doğrulaması için, clientcertpath=<path-to-certificate> birlikte kullanın password=<certificate-password>.
Uyarı
ActiveDirectoryApplication , için ActiveDirectoryServicePrincipalbir diğer addır.
ActiveDirectoryServicePrincipalAccessToken
Uygulamanızın doğrudan bağlantı dizesi'e aktardığı önceden edinilmiş bir hizmet ana erişim belirteci kullanır:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryServicePrincipalAccessToken&password=<access-token>&encrypt=true&TrustServerCertificate=false
Bu akışı yalnızca uygulamanız sürücü dışındaki erişim token'ını zaten edinip yenilediğinde kullanın. Çoğu servisten servise senaryoda, ActiveDirectoryServicePrincipal veya özel bir belirteç sağlayıcısını tercih edin.
Active Directory Parolası
Important
ActiveDirectoryPassword kimlik doğrulama seçeneği (parola kimlik doğrulaması Microsoft Entra ID) Microsoft SQL sürücülerinde kullanım dışıdır. Bu yüksek riskli kimlik doğrulama akışı zorunlu Microsoft Entra çok faktörlü kimlik doğrulaması (MFA) ile uyumsuzdur ve MFA'nın zorlandığı kiracılarda çalışmayabilir. Farklı bir Microsoft Entra kimlik doğrulama yöntemine geçmeyi planlayın.
Microsoft Entra ID parola kimlik doğrulaması, OAuth 2.0 Kaynak Sahibi Parola Kimlik Bilgileri (ROPC) iznini temel alır ve bu da bir uygulamanın parolasını doğrudan işleyerek kullanıcıda oturum açmasına olanak tanır.
Microsoft, MFA ile uyumsuz olduğundan ROPC akışını kullanmamanızı önerir. Çoğu senaryoda daha güvenli alternatifler kullanılabilir ve önerilir. Bu akış, uygulamaya yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskleri taşır. Bu akışı yalnızca daha güvenli akışlar uygun olmadığında kullanın. Microsoft, kullanıcıları kötü amaçlı saldırılardan korumak için bu yüksek riskli kimlik doğrulama akışından uzaklaşıyor. Daha fazla bilgi için bkz. Azure için zorunlu çok faktörlü kimlik doğrulamasını planlama.
Oturum açma sırasında bir kullanıcı mevcutsa, denetim izinin oturum açan kullanıcıya atfedilmesi ve Koşullu Erişim ilkelerinin uygulanması için ActiveDirectoryInteractive veya ActiveDirectoryIntegrated kimlik doğrulamasını kullanın.
Katılımsız hizmetten hizmete senaryoları için Microsoft Entra hizmet hesabı kılavuzunu izleyin:
- Uygulamanız Azure altyapıda çalışıyorsa ActiveDirectoryMSI (veya bazı sürücülerde ActiveDirectoryManagedIdentity) kullanın. Yönetilen kimlikler, gizli anahtarların ve sertifikaların yönetimi ile yenilenmesinden kaynaklanan ek yükü ortadan kaldırır.
- Yönetilen kimlik kullanılamıyorsa (örneğin, uygulama Azure dışında çalışır), ActiveDirectoryServicePrincipal kullanın. Sürücü destekliyorsa, istemci parolası yerine istemci sertifikasını tercih edin. Sertifikayla, özel anahtar istemcide kalır ve istemcinin kimliğini doğrulamak için Microsoft Entra yalnızca imzalı bir onay gönderilir. Anahtar donanımda (TPM veya HSM gibi) depolanıyorsa ya da dışarı aktarılamaz olarak işaretlenmişse, istemci gizli anahtarında olduğu gibi dize olarak dışarı kopyalanamaz.
- hizmet hesabı olarak Microsoft Entra kullanıcı hesabı kullanmayın.
Microsoft Entra kullanıcı adı ve şifresiyle kimlik doğrulaması:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryPassword&user id=<user>@mydomain.com&password=<password>&applicationclientid=<app-id>&encrypt=true&TrustServerCertificate=false
Bu akış için parametre applicationclientid gereklidir.
ActiveDirectoryInteractive
Kullanıcı için tarayıcı tabanlı etkileşimli giriş isteğini açar. Yerel geliştirme araçları için uygundur:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryInteractive&user id=<user>@mydomain.com&applicationclientid=<app-id>&encrypt=true&TrustServerCertificate=false
Bu akış için parametre applicationclientid gereklidir.
ActiveDirectoryDeviceCode
Kullanıcının https://microsoft.com/devicelogin adresine girmesi için bir cihaz kodu görüntüler. Tarayıcısı olmayan ortamlar için faydalı:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDeviceCode&encrypt=true&TrustServerCertificate=false
ActiveDirectoryAzCli
Giriş yapmış Azure CLI oturumundan gelen tokenı kullanır:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryAzCli&encrypt=true&TrustServerCertificate=false
ActiveDirectoryAzureDeveloperCli
Oturum açılmış Azure Developer CLI (azd) oturumundan tokenı kullanır:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryAzureDeveloperCli&encrypt=true&TrustServerCertificate=false
ActiveDirectoryEnvironment
Ortam değişkenlerinden kimlik bilgilerini okur. Azure Identity kütüphanesi, AZURE_TENANT_ID, AZURE_CLIENT_ID ve AZURE_CLIENT_SECRET gibi değişkenleri inceler:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryEnvironment&encrypt=true&TrustServerCertificate=false
ActiveDirectoryWorkloadIdentity
İş yükü kimlik federasyonu kullanarak kimlik doğrulama yapar. Bu yöntemi Azure Workload Identity konfigured edilmiş Kubernetes podlarında kullanın.
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryWorkloadIdentity&encrypt=true&TrustServerCertificate=false
ActiveDirectoryAzurePipelines
Azure Pipelines service bağlantısı kullanılarak kimlik doğrulaması yapılır. Pipeline parametrelerini bağlantı dizesi'te sağlayın veya sürücünün Azure Pipelines ortam değişkenlerinden eksik değerleri okumasına izin verin.
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
Sürücünün gerektirdiği parametreleri ayarlayın:
| Parametre | Description |
|---|---|
user id |
Hizmet ana istemci kimliği, isteğe bağlı olarak @tenant-id. |
serviceconnectionid |
Azure DevOps'taki hizmet bağlantısı kimliği. |
systemtoken |
Boru hattı sistemi erişim belirtecesi ($(System.AccessToken)). |
ActiveDirectoryClientAssertion
İstemci sırrı yerine istemci assertion'u (imzalı bir JWT tokenı) kullanarak kimlik doğrulama yapar. İmzalı JWT'yi clientassertion parametresinde belirtin:
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryClientAssertion&user id=<client-id>@<tenant-id>&clientassertion=<jwt-token>&encrypt=true&TrustServerCertificate=false
ActiveDirectoryOnBehalfOf
On-Behalf-Of (OBO) akışını kullanarak doğrulama yapar. Sürücü, üst akış kullanıcı belirtecini SQL Server kapsamına sahip yeni bir belirteçle değiştirir.
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
İstemci kimlik doğrulama ayağı, password, clientcertpath veya clientassertion kullanabilir, ancak userassertion her zaman gereklidir.
ActiveDirectoryIntegrated
Gelişmiş Entegre kimlik doğrulama iş akışını destekler. Bu mod, bir token sağlayıcı aracılığıyla özel token edinme mantığı gerektirir.
Bu modu sadece Windows'ta kullanın. Linux ve macOS'ta, kimlik doğrulama akışınız için özel token sağlayıcısı kullanın.
sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryIntegrated&encrypt=true&TrustServerCertificate=false
Özel token sağlayıcı
Eğer yerleşik tiplerin hiçbiri senaryonuza uymuyorsa fedauth , kendi token edinme mantığınızı sağlamak için şu token sağlayıcı API'lerinden birini kullanın:
NewSecurityTokenConnector (Tavsiye edilir)
Önceden edinilmiş bir OAuth2 erişim tokenınız olduğunda bu API'yi kullanın:
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 (Basitleştirilmiş API)
Bu API'yi bağlam işlemeden daha basit token edinimi için kullanın.
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 (Özel ADAL İş Akışları)
Yerleşik modlar ve SecurityToken API'leri senaryonuza uymadığında, özel Azure AD token edinim iş akışları fedauth için bu API'yi kullanın:
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)
Bu yaklaşım, özel bir kimlik sağlayıcısıyla entegre olmanız gerektiğinde, token önbellekleme uygulamanız veya pakette azuread kapsanmayan bir kimlik hattı türünü yönetmeniz gerektiğinde faydalıdır. Çoğu uygulama önceden alınmış bir token ile kullanmalıdır NewSecurityTokenConnector .
Yaygın kimlik seçenekleri
Bu parametreler birden fazla fedauth türü arasında geçerlidir:
| Parametre | Description |
|---|---|
applicationclientid |
İstemci uygulama kimliği.
ActiveDirectoryPassword ve ActiveDirectoryInteractive için gereklidir. |
clientcertpath |
Sertifika tabanlı hizmet ana veya On-Behalf-Of kimlik doğrulaması için PEM veya PFX istemci sertifika dosyasına giden yol. |
clientassertion |
ActiveDirectoryClientAssertion veya On-Behalf-Of kimlik doğrulaması için imzalı JWT beyanı. |
serviceconnectionid |
Azure Pipelines hizmet bağlantısı kimliği. |
systemtoken |
Azure Pipelines sistem erişim belirteci. |
userassertion |
ActiveDirectoryOnBehalfOf için üst akış kullanıcı belirteci. |
tokenfilepath |
Kubernetes'te ActiveDirectoryWorkloadIdentity için OIDC belirteç dosyasının yolu. |
additionallyallowedtenants |
Çok kiracılı kimlik doğrulama gerektiğinde izin verilecek ek kiracı kimliklerinin virgülle ayrılmış listesi. |
disableinstancediscovery |
Örnek keşfini devre dışı bırakmak için true olarak ayarlayın; yalnızca yetkili URL'sini kontrol ediyorsanız kullanın. |
sendcertificatechain |
Sertifika tabanlı kimlik doğrulaması için sertifika zincirini göndermek üzere true olarak ayarlayın. |