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.
Şunlar için geçerlidir:Azure SQL Veritabanı
Bu makalede, Azure SQL Database'da Microsoft Entra kullanıcıları oluşturabilmesi için hizmet sorumlusu yapılandırma adımları açıklanmaktadır. Bu özellik, Microsoft Entra kiracınızdaki kullanıcılar ve uygulamalar için Azure SQL kaynaklarına erişimi program aracılığıyla yönetmenize olanak tanır.
Not
Microsoft Entra ID daha önce Azure Active Directory (Azure AD) olarak biliniyordu.
Azure SQL için Microsoft Entra kimlik doğrulaması hakkında daha fazla bilgi için bkz. Microsoft Entra kimlik doğrulamasını kullanma.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Mantıksal sunucuya kimlik atama
- Sunucu kimliğine Dizin Okuyucuları rolünü atama
- Microsoft Entra ID'da uygulama kaydetme
- Azure SQL Database'de bu uygulamanın hizmet sorumlusu için veritabanı kullanıcısı oluşturma
- Hizmet sorumlusuyla Microsoft Entra veritabanı kullanıcısı oluşturma
Önkoşullar
- Mevcut bir Azure SQL Database dağıtımı. Bu öğreticide çalışan bir SQL Veritabanınız olduğu varsayılır.
- SQL veritabanınızın bulunduğu kiracıda Microsoft Entra
Privileged Role Administratorizinleri. - Az.Sql PowerShell modülünün en son sürümü.
- En son Microsoft.Graph PowerShell modülü.
Mantıksal sunucuya kimlik atama
SQL veritabanınızı barındıran Microsoft Entra kiracısını belirterek Azure bağlanın. Kiracı Kimliği, Microsoft Entra ID kaynağınızın Overview sayfasında Azure portal bulunabilir. Kiracı Kimliğini kopyalayın ve aşağıdaki PowerShell komutunu çalıştırın:
-
<TenantId>’yi Kiracı Kimliğiniz ile değiştirin.
Connect-AzAccount -Tenant <TenantId>Gelecekte kullanmak için bu öğreticiye
TenantIdkaydedin.-
Sistem tarafından atanan bir yönetilen kimlik oluşturun ve Azure içindeki
mantıksal sunucuya atayın. Aşağıdaki PowerShell komutunu yürütür: -
<ResourceGroupName>komutundaki<ServerName>ve değerlerini kaynaklarınızla değiştirin. Sunucu adınızmyserver.database.windows.netise,<ServerName>öğesinimyserverile değiştirin.
Set-AzSqlServer -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -AssignIdentity-
Sunucu kimliğinin başarıyla atandığını denetleyin. Aşağıdaki PowerShell komutunu yürütür:
-
<ResourceGroupName>ve<ServerName>öğelerini kaynaklarınızla değiştirin. Sunucu adınızmyserver.database.windows.netise,<ServerName>öğesinimyserverile değiştirin.
$xyz = Get-AzSqlServer -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> $xyz.identityÇıktınızda
PrincipalId,TypeveTenantIdgösterilir. Atanan kimlik şudur:PrincipalId.-
Ayrıca Azure portalına giderek de kimliği de de kontrol edebilirsiniz.
- Microsoft Entra ID kaynağında Enterprise applications adresine gidin. Mantıksal sunucunuzun adını yazın. Kaynakta görüntülenen Nesne Kimliği , birincil sunucu kimliğinin kimliğidir.
İpucu
Sistem tarafından atanan yönetilen kimliğe alternatif olarak, kullanıcı tarafından atanan yönetilen kimliği kullanabilirsiniz. Kullanıcı tarafından atanan yönetilen kimlik, yönetilecek kimlik sayısını azaltan ve rol atamalarını basitleştiren birden çok mantıksal sunucu arasında paylaşılabilir. Daha fazla bilgi için bkz. Azure SQL için Microsoft Entra ID'de Kullanıcı tarafından atanan yönetilen kimlik.
Dizin Okuyucuları rolüne sunucu kimliği ekleme
Sunucu kimliği, Microsoft Entra kullanıcıları ve oturum açma bilgilerini oluşturmayı ve Microsoft Entra grup üyeliklerine göre kullanıcı izinlerini uygulamak için grup genişletmeyi içeren yönetim işlevleri için Microsoft Entra ID sorgulama izinleri gerektirir. Microsoft Entra ID sorgulamak için sunucu kimliği izinleri iptal edilirse veya sunucu kimliği silinirse Microsoft Entra kimlik doğrulaması çalışmayı durdurur.
Directory Readers rolüne ekleyerek veya aşağıdaki alt düzey Microsoft Graph izinlerini atayarak sunucu kimliğine Microsoft Entra sorgu izinleri atayın:
Not
Bu betik Microsoft Entra Privileged Role Administrator veya daha yüksek bir rol tarafından yürütülmelidir.
Aşağıdaki betik, Azure SQL Database için mantıksal sunucuyu temsil eden bir kimliğe Microsoft Entra Directory Readers izni verir.
- Daha önce topladığınız
<TenantId>ileTenantIddeğerini değiştirin. - Mantıksal sunucu adınızı değiştirin
<ServerName>ile. Sunucu adınızmyserver.database.windows.netise,<ServerName>öğesinimyserverile değiştirin.
# This script grants "Directory Readers" permission to a service principal representing a logical server for Azure SQL Database
# It can be executed only by a user who is a member of the **Privileged Role Administrator** or higher role.
# To check if the "Directory Readers" role was granted, re-execute this script
Import-Module Microsoft.Graph.Authentication
$ServerIdentityName = "<ServerName>" # Enter your logical server name
$TenantId = "<TenantId>" # Enter your tenant ID
Connect-MgGraph -TenantId "<TenantId>" -Scopes "RoleManagement.ReadWrite.Directory,Application.Read.All"
# Get Microsoft Entra "Directory Readers" role and create if it doesn't exist
$roleName = "Directory Readers"
$role = Get-MgDirectoryRole -Filter "DisplayName eq '$roleName'"
if ($role -eq $null) {
# Instantiate an instance of the role template
$roleTemplate = Get-MgDirectoryRoleTemplate -Filter "DisplayName eq '$roleName'"
New-MgDirectoryRoleTemplate -RoleTemplateId $roleTemplate.Id
$role = Get-MgDirectoryRole -Filter "DisplayName eq '$roleName'"
}
# Get service principal for server
$roleMember = Get-MgServicePrincipal -Filter "DisplayName eq '$ServerIdentityName'"
$roleMember.Count
if ($roleMember -eq $null) {
Write-Output "Error: No service principal with name '$($ServerIdentityName)' found, make sure that ServerIdentityName parameter was entered correctly."
exit
}
if (-not ($roleMember.Count -eq 1)) {
Write-Output "Error: Multiple service principals with name '$($ServerIdentityName)'"
Write-Output $roleMember | Format-List DisplayName, Id, AppId
exit
}
# Check if service principal is already member of Directory Readers role
$isDirReader = Get-MgDirectoryRoleMember -DirectoryRoleId $role.Id -Filter "Id eq '$($roleMember.Id)'"
if ($isDirReader -eq $null) {
# Add principal to Directory Readers role
Write-Output "Adding service principal '$($ServerIdentityName)' to 'Directory Readers' role'..."
$body = @{
"@odata.id"= "https://graph.microsoft.com/v1.0/directoryObjects/{$($roleMember.Id)}"
}
New-MgDirectoryRoleMemberByRef -DirectoryRoleId $role.Id -BodyParameter $body
Write-Output "'$($ServerIdentityName)' service principal added to 'Directory Readers' role'."
} else {
Write-Output "Service principal '$($ServerIdentityName)' is already member of 'Directory Readers' role'."
}
Not
Bu betikten elde edilen çıkış, kimliğin Dizin Okuyucuları rolüne atanmış olup olmadığını gösterir. İzin verilip verilmediğini bilmiyorsanız betiği yeniden çalıştırabilirsiniz.
SQL Managed Instance için Directory Readers rolünü atamaya yönelik benzer bir yaklaşım için bkz. Microsoft Entra admin ayarlama.
Üretim ortamlarında yaygın bir yönetim uygulaması, Directory Readers rolünü Microsoft Entra ID rol atanabilir bir gruba atamaktır. Ardından, grup sahipleri gruba yönetilen kimlikler ekleyebilir. Bu, en az ayrıcalık ilkesini korur ve Her SQL örneğine Dizin Okuyucuları rolünü tek tek vermek için Ayrıcalıklı Rol Yöneticisi gereksinimini atlar. Bu özellik hakkında daha fazla bilgi için bkz. Azure SQL için Microsoft Entra ID Directory Okuyucuları rolü.
Microsoft Entra ID'de uygulama oluşturma
Uygulamalarınızı kaydedin. Bir uygulamayı kaydetmek için en azından Microsoft Entra ID Application Developer rolüne sahip olmanız gerekir. Rol atama hakkında daha fazla bilgi için bkz. Microsoft Entra ID'da kullanıcı rolleri atama.
Bu öğreticide iki hizmet ilkesi kullanılır. veritabanında başka kullanıcılar oluşturmak için ilk hizmet sorumlusu olan DBOwnerApp kullanılır. İkinci hizmet ilkesel öğesi myapp adlı uygulama, DBOwnerApp'in bu eğitimin ilerleyen bölümlerinde veritabanı kullanıcısı oluşturacağı uygulamadır.
Uygulamalarınızı kaydetmek için:
Azure portalında Microsoft Entra ID>App registrations>Yeni kayıt öğesini seçin.
Uygulama kaydı oluşturulduktan sonra Uygulama (istemci) kimliği değeri oluşturulur ve görüntülenir. Bu öğreticide gelecekte kullanmak üzere bu değeri kaydedin.
Uygulamanın oturum açması için bir istemci sırrı oluşturun. Oturum açmak için bir sertifika yükleyin veya bir gizli anahtar oluşturun. Bu öğreticide ileri kullanım için DBOwnerApp için istemci sırrını kaydedin.
Daha fazla bilgi için
Hizmet sorumlusu kullanıcısını oluşturma
Yeni oluşturulan dbOwnerApp hizmet sorumlusunu SQL Veritabanı kullanıcı olarak ekleyin ve ona izinler atayın.
Diğer kullanıcıları oluşturma izinlerine sahip bir Microsoft Entra kimliği kullanarak SQL Veritabanınıza bağlanın.
Önemli
Azure SQL Database'da yalnızca Microsoft Entra kullanıcılar başka Microsoft Entra kullanıcıları oluşturabilir. Sunucu yöneticisi de dahil olmak üzere SQL kimlik doğrulamasını temel alan hiçbir kullanıcı Microsoft Entra kullanıcı oluşturamıyor. başlangıçta SQL Veritabanı'nda başka Microsoft Entra kullanıcıları oluşturabilen tek kullanıcı Microsoft Entra yöneticisidir. Microsoft Entra yöneticisi başka kullanıcılar oluşturduktan sonra, uygun izinlere sahip tüm Microsoft Entra kullanıcılar başka Microsoft Entra kullanıcıları oluşturabilir.
Aşağıdaki T-SQL komutunu kullanarak SQL Veritabanı dbOwnerApp kullanıcısını oluşturun:
CREATE USER [DBOwnerApp] FROM EXTERNAL PROVIDER GODiğer Microsoft Entra kullanıcıları oluşturmak için en azından
ALTER ANY USERSQL izni gerekir. Bu izin,db_ownerüyeliği ve Microsoft Entra yöneticisi olarak atama yoluyla da devralınır. Aşağıdaki örneklerde, DBOwnerApp'e veritabanında başka Microsoft Entra kullanıcıları oluşturmasına olanak sağlayan üç farklı seçenek gösterilmektedir.DBOwnerApp'i, sp_addrolemember kullanarak rolüne
db_owner.EXEC sp_addrolemember 'db_owner', [DBOwnerApp] GODBOwnerApp'e
ALTER ANY USERizni aşağıdaki T-SQL örneğinde olduğu gibi atayabilirsiniz:GRANT ALTER ANY USER TO [DBOwnerApp] GODBOwnerApp Microsoft Entra yöneticisi olarak ayarlayabilirsiniz. Azure portalı, PowerShell veya Azure CLI komutlarını kullanın. Daha fazla bilgi için bkz. Set Microsoft Entra admin.
Hizmet ilkesi ile bir kullanıcı oluşturma
Microsoft Entra hizmet sorumlusu kullanıcı myapp'i, hizmet sorumlusu DBOwnerApp kullanarak oluşturmak için aşağıdaki betiği kullanın:
- Daha önce topladığınız
<TenantId>ileTenantIddeğerini değiştirin. - Daha önce topladığınız
<ClientId>ileClientIddeğerini değiştirin. -
<ClientSecret>değerini, daha önce oluşturduğunuz istemci gizli anahtarınızla değiştirin. - Mantıksal sunucu adınızı değiştirin
<ServerName>ile. Sunucu adınızmyserver.database.windows.netise,<ServerName>öğesinimyserverile değiştirin. - değerini SQL Veritabanı adınız ile değiştirin
<database name>.
Not
Aşağıdaki betik Microsoft.Data.SqlClient derlemesini gerektirir. NuGet paketinden yükleyin ve betiği çalıştırmadan önce DLL'yi
Add-Type -Path "path\to\Microsoft.Data.SqlClient.dll"ile yükleyin.# PowerShell script for creating a new SQL user called myapp using application DBOwnerApp with secret # DBOwnerApp is an admin for the server # Download latest MSAL - https://www.powershellgallery.com/packages/MSAL.PS Import-Module MSAL.PS $tenantId = "<TenantId>" # Microsoft Entra tenant ID where DBOwnerApp resides $clientId = "<ClientId>" # Application (client) ID recorded earlier for DBOwnerApp $clientSecret = "<ClientSecret>" # Client secret for DBOwnerApp $scopes = "https://database.windows.net/.default" # The endpoint $result = Get-MsalToken -RedirectUri $uri -ClientId $clientId -ClientSecret (ConvertTo-SecureString $clientSecret -AsPlainText -Force) -TenantId $tenantId -Scopes $scopes $Tok = $result.AccessToken #Write-host "token" $Tok $SQLServerName = "<ServerName>" # Logical server name $DatabaseName = "<database name>" # Azure SQL database name Write-Host "Create SQL connection string" $conn = New-Object Microsoft.Data.SqlClient.SqlConnection $conn.ConnectionString = "Data Source=$SQLServerName.database.windows.net;Initial Catalog=$DatabaseName;Connect Timeout=30" $conn.AccessToken = $Tok Write-host "Connect to database and execute SQL script" $conn.Open() $ddlstmt = 'CREATE USER [myapp] FROM EXTERNAL PROVIDER;' Write-host " " Write-host "SQL DDL command" $ddlstmt $command = New-Object -TypeName Microsoft.Data.SqlClient.SqlCommand($ddlstmt, $conn) Write-host "results" $command.ExecuteNonQuery() $conn.Close()Alternatif olarak, şu kodu kullanabilirsiniz: Azure SQL Database'e Microsoft Entra hizmet ilkesi kimlik doğrulaması. Betiği değiştirin ve DDL ifadesini
CREATE USER [myapp] FROM EXTERNAL PROVIDERçalıştırın. Veritabanınızda Microsoft Entra bir kullanıcı veya grup oluşturmak için aynı betiği kullanın.- Daha önce topladığınız
Aşağıdaki komutu yürüterek myapp kullanıcısının veritabanında mevcut olup olmadığını denetleyin:
SELECT name, type, type_desc, CAST(CAST(sid as varbinary(16)) as uniqueidentifier) as appId FROM sys.database_principals WHERE name = 'myapp' GOŞuna benzer bir çıktı görmeniz gerekir:
name type type_desc appId myapp E EXTERNAL_USER aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
İlgili içerik
- Microsoft Entra hizmet sorumluları ile Azure SQL
- Azure kaynakları için yönetilen kimlikler nelerdir?
- App Service ve Azure Functions için yönetilen kimlikler nasıl kullanılır
- SQL DB'de Microsoft Entra hizmet sorumlusu kimlik doğrulaması - Kod Örneği
- Microsoft Entra ID'deki uygulama ve hizmet ilkesi nesneleri
Azure PowerShell - Microsoft Entra ID'de Azure SQL için Directory Okuyucuları rolü