Öğretici: Microsoft Entra uygulamalarını kullanarak Microsoft Entra kullanıcıları oluşturma
Şunlar için geçerlidir: Azure SQL Veritabanı
Bu makalede, Azure SQL Veritabanı'de 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şim yönetiminin program aracılığıyla yapılandırılmasını sağlar.
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 Microsoft Entra kimlik doğrulamasını kullanma makalesine bakın.
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'de uygulama kaydetme
- Azure SQL Veritabanı'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 Veritabanı dağıtımı. Bu öğretici için çalışan bir SQL Veritabanı olduğunu varsayıyoruz.
- MICROSOFT Entra
Global Administrator
veyaPrivileged Role Administrator
SQL veritabanınızın bulunduğu kiracıdaki izinler. - Az.Sql PowerShell modülünün en son sürümü.
- Microsoft.Graph PowerShell modülünün en son sürümü.
Mantıksal sunucuya kimlik atama
SQL veritabanınızı barındıran Microsoft Entra kiracısını belirterek Azure'a bağlanın. Kiracı Kimliği, Azure portalındaki Microsoft Entra Id kaynağınızın Genel Bakış sayfasında bulunabilir. Kiracı Kimliğini kopyalayın ve aşağıdaki PowerShell komutunu çalıştırın:
- değerini Kiracı Kimliğiniz ile değiştirin
<TenantId>
.
Connect-AzAccount -Tenant <TenantId>
Bu öğreticide
TenantId
gelecekte kullanmak üzere öğesini kaydedin.- değerini Kiracı Kimliğiniz ile değiştirin
Sistem tarafından atanan bir yönetilen kimlik oluşturun ve bunu Azure'daki mantıksal sunucuya atayın. Aşağıdaki PowerShell komutunu yürütür:
- Set-AzSqlServer komutundaki ve değerlerini kaynaklarınızla değiştirin
<ResourceGroupName>
.<ServerName>
Sunucu adınız isemyserver.database.windows.net
değerini ilemyserver
değiştirin<ServerName>
.
Set-AzSqlServer -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -AssignIdentity
- Set-AzSqlServer komutundaki ve değerlerini kaynaklarınızla değiştirin
Sunucu kimliğinin başarıyla atandığını denetleyin. Aşağıdaki PowerShell komutunu yürütür:
- ve
<ServerName>
öğesini kaynaklarınızla değiştirin<ResourceGroupName>
. Sunucu adınız isemyserver.database.windows.net
değerini ilemyserver
değiştirin<ServerName>
.
$xyz = Get-AzSqlServer -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> $xyz.identity
Çıkışınızda ,
Type
veTenantId
gösterilmelidirPrincipalId
. Atanan kimlik şeklindedirPrincipalId
.- ve
Ayrıca Azure portalına giderek de kimliği de de kontrol edebilirsiniz.
- Microsoft Entra Id kaynağında Kurumsal uygulamalar'a gidin. Mantıksal sunucunuzun adını yazın. Kaynakta görüntülenen Nesne Kimliği , birincil sunucu kimliğinin kimliğidir.
Dizin Okuyucuları rolüne sunucu kimliği ekleme
Sunucu kimliği, Microsoft Entra kullanıcılarını ve oturum açma bilgilerini oluşturmayı ve Microsoft Entra grup üyeliklerine göre kullanıcı izinlerini uygulamak üzere grup genişletmeyi içeren yönetim işlevleri için Microsoft Entra Kimliğini sorgulama izinleri gerektirir. Microsoft Entra Kimliğini sorgulamak için sunucu kimliği izinleri iptal edilirse veya sunucu kimliği silinirse, Microsoft Entra kimlik doğrulaması çalışmayı durdurur.
Sunucu kimliğine, Dizin Okuyucuları rolüne ekleyerek veya aşağıdaki alt düzey Microsoft Graph izinlerini atayarak Microsoft Entra sorgu izinlerini atayın:
Not
Bu betik bir Microsoft Entra Kimliği Global Administrator
veya ile Privileged Role Administrator
yürütülmelidir.
Aşağıdaki betik, Azure SQL Veritabanı için mantıksal sunucuyu temsil eden bir kimliğe Microsoft Entra Dizin Okuyucuları izni verir.
- değerini daha önce toplanmış olanla
TenantId
değiştirin<TenantId>
. - değerini mantıksal sunucu adınız ile değiştirin
<ServerName>
. Sunucu adınız isemyserver.database.windows.net
değerini ilemyserver
değiştirin<ServerName>
.
# 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 **Global Administrator** or **Privileged Role Administrator** 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 emin değilseniz betiği yeniden çalıştırabilirsiniz.
SQL Yönetilen Örneği için Dizin Okuyucuları rolünü atamaya yönelik benzer bir yaklaşım için bkz. Microsoft Entra yöneticisini ayarlama.
Üretim ortamlarında yaygın bir yönetim uygulaması, Dizin Okuyucuları rolünü Microsoft Entra Id'de rol atanabilir bir gruba atamaktır. Ardından, grup sahipleri gruba yönetilen kimlikler ekleyebilir. Bu, en az ayrıcalık ilkesini korur ve Genel Yönetici veya Ayrıcalıklı Rol Yöneticisi'nin Dizin Okuyucuları rolünü her SQL örneğine ayrı ayrı verme gereksinimini atlar. Bu özellik hakkında daha fazla bilgi için bkz . Azure SQL için Microsoft Entra Id'de Dizin Okuyucuları rolü.
Microsoft Entra Id'de uygulama oluşturma
Uygulamalarınızı kaydedin. Bir uygulamayı kaydetmek için en azından Microsoft Entra ID Uygulama Geliştirici rolüne sahip olmanız gerekir. Rol atama hakkında daha fazla bilgi için bkz . Microsoft Entra Id'de kullanıcı rolleri atama.
Bu öğreticide iki hizmet sorumlusu kullanılır. veritabanında başka kullanıcılar oluşturmak için ilk hizmet sorumlusu olan DBOwnerApp kullanılır. İkinci hizmet sorumlusu olan myapp, DBOwnerApp'in bu öğreticinin ilerleyen bölümlerinde veritabanı kullanıcısı oluşturduğu uygulamadır.
Uygulamalarınızı kaydetmek için:
Azure portalında Microsoft Entra Id> Uygulama kayıtları> Yeni kayıt'ı 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 gizli dizisi oluşturun. Bir sertifikayı karşıya yüklemeyi veya oturum açmak için gizli dizi oluşturmayı izleyin. Bu öğreticide daha sonra kullanmak üzere DBOwnerApp için istemci gizli dizisini kaydedin.
Daha fazla bilgi için portalı kullanarak kaynaklara erişebilen bir Microsoft Entra uygulaması ve hizmet sorumlusu oluşturma makalesini gözden geçirin.
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ı bağlanın.
Önemli
Azure SQL Veritabanı'da yalnızca Microsoft Entra kullanıcıları diğer Microsoft Entra kullanıcılarını oluşturabilir. Sunucu yöneticisi de dahil olmak üzere SQL kimlik doğrulamasını temel alan hiçbir kullanıcı Microsoft Entra kullanıcısı oluşturamıyor. Microsoft Entra yöneticisi, başlangıçta SQL Veritabanı'da diğer Microsoft Entra kullanıcılarını oluşturabilen tek kullanıcıdır. Microsoft Entra yöneticisi başka kullanıcılar oluşturduktan sonra, uygun izinlere sahip tüm Microsoft Entra kullanıcıları diğer Microsoft Entra kullanıcılarını oluşturabilir.
Aşağıdaki T-SQL komutunu kullanarak SQL Veritabanı dbOwnerApp kullanıcısını oluşturun:
CREATE USER [DBOwnerApp] FROM EXTERNAL PROVIDER GO
Diğer Microsoft Entra kullanıcılarını oluşturmak için en azından
ALTER ANY USER
SQL izni gerekir. Bu izin, içinde üyelikdb_owner
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 izin veren üç farklı seçenek gösterilmektedir.DBOwnerApp'i role sp_addrolemember ile ekleyebilirsiniz:
db_owner
EXEC sp_addrolemember 'db_owner', [DBOwnerApp] GO
DBOwnerApp'e
ALTER ANY USER
izni aşağıdaki T-SQL örneğinde olduğu gibi atayabilirsiniz:GRANT ALTER ANY USER TO [DBOwnerApp] GO
DBOwnerApp'i Microsoft Entra yöneticisi olarak ayarlayabilirsiniz. Bu işlem Azure portalı, PowerShell veya Azure CLI komutları kullanılarak yapılabilir. Daha fazla bilgi için bkz . Microsoft Entra yöneticisini ayarlama.
Hizmet sorumlusu olan bir kullanıcı oluşturma
Hizmet sorumlusu DBOwnerApp kullanarak myapp Adlı Microsoft Entra hizmet sorumlusu kullanıcısı oluşturmak için aşağıdaki betiği kullanın:
- değerini daha önce toplanmış olanla
TenantId
değiştirin<TenantId>
. - değerini daha önce toplanmış olanla
ClientId
değiştirin<ClientId>
. - değerini daha önce oluşturulan istemci gizli dizinizle değiştirin
<ClientSecret>
. - değerini mantıksal sunucu adınız ile değiştirin
<ServerName>
. Sunucu adınız isemyserver.database.windows.net
değerini ilemyserver
değiştirin<ServerName>
. - değerini SQL Veritabanı adınız ile değiştirin
<database name>
.
# 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 System.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 System.Data.SqlClient.SqlCommand($ddlstmt, $conn) Write-host "results" $command.ExecuteNonQuery() $conn.Close()
Alternatif olarak, şu kodu kullanabilirsiniz: Azure SQL Veritabanı için Microsoft Entra hizmet sorumlusu kimlik doğrulaması. DDL deyimini
CREATE USER [myapp] FROM EXTERNAL PROVIDER
yürütmek için betiği değiştirin. Aynı betik, veritabanınızda bir Microsoft Entra kullanıcısı veya grubu oluşturmak için de kullanılabilir.- değerini daha önce toplanmış olanla
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 6d228f48-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Sonraki adımlar
- Azure SQL ile Microsoft Entra hizmet sorumlusu
- Azure kaynakları için yönetilen kimlikler nedir?
- App Service ve Azure İşlevleri için yönetilen kimlikleri kullanma
- SQL DB'de Microsoft Entra hizmet sorumlusu kimlik doğrulaması - Kod Örneği
- Microsoft Entra ID'de uygulama ve hizmet sorumlusu nesnelerine genel bakış
- Azure PowerShell ile Azure hizmet sorumlusu oluşturma
- Azure SQL için Microsoft Entra Id'de Dizin Okuyucuları rolü