Tutorial: Membuat pengguna Microsoft Entra menggunakan aplikasi Microsoft Entra
Berlaku untuk: Azure SQL Database
Artikel ini menjelaskan cara mengonfigurasi perwakilan layanan sehingga dapat membuat pengguna Microsoft Entra di Azure SQL Database. Kemampuan ini memungkinkan konfigurasi terprogram manajemen akses ke sumber daya Azure SQL untuk pengguna dan aplikasi di penyewa Microsoft Entra Anda.
Catatan
ID Microsoft Entra sebelumnya dikenal sebagai Azure Active Directory (Azure AD).
Untuk informasi selengkapnya tentang autentikasi Microsoft Entra untuk Azure SQL, lihat artikel Menggunakan autentikasi Microsoft Entra.
Dalam tutorial ini, Anda akan mempelajari cara:
- Menetapkan identitas ke server logis
- Menetapkan peran Pembaca Direktori ke identitas server
- Mendaftarkan aplikasi di ID Microsoft Entra
- Membuat pengguna database untuk perwakilan layanan aplikasi tersebut di Azure SQL Database
- Membuat pengguna database Microsoft Entra dengan perwakilan layanan
Prasyarat
- Penyebaran Azure SQL Database yang sudah ada. Kami menganggap Anda memiliki SQL Database yang berfungsi untuk tutorial ini.
- Microsoft Entra
Global Administrator
atauPrivileged Role Administrator
izin di penyewa tempat database SQL Anda berada. - Versi terbaru modul Az.Sql PowerShell.
- Versi terbaru modul Microsoft.Graph PowerShell.
Menetapkan identitas ke server logis
Sambungkan ke Azure, menentukan penyewa Microsoft Entra yang menghosting database SQL Anda. ID Penyewa dapat ditemukan di halaman Gambaran Umum untuk sumber daya ID Microsoft Entra Anda di portal Azure. Salin ID Penyewa lalu jalankan perintah PowerShell berikut ini:
- Ganti
<TenantId>
dengan ID Penyewa Anda.
Connect-AzAccount -Tenant <TenantId>
Catat untuk
TenantId
digunakan di masa mendatang dalam tutorial ini.- Ganti
Buat identitas terkelola yang ditetapkan sistem dan tetapkan ke server logis di Azure. Jalankan perintah PowerShell berikut ini:
- Ganti
<ResourceGroupName>
dan<ServerName>
dengan sumber daya Anda di perintah Set-AzSqlServer . Jika nama server Anda adalahmyserver.database.windows.net
, ganti<ServerName>
denganmyserver
.
Set-AzSqlServer -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -AssignIdentity
- Ganti
Periksa identitas server berhasil ditetapkan. Jalankan perintah PowerShell berikut ini:
- Ganti
<ResourceGroupName>
dan<ServerName>
dengan sumber daya Anda. Jika nama server Anda adalahmyserver.database.windows.net
, ganti<ServerName>
denganmyserver
.
$xyz = Get-AzSqlServer -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> $xyz.identity
Output Anda harus menunjukkan kepada Anda
PrincipalId
,Type
, danTenantId
. Identitas yang ditugaskan adalahPrincipalId
.- Ganti
Anda juga dapat memeriksa identitas dengan masuk ke portal Microsoft Azure.
- Di sumber daya ID Microsoft Entra, buka Aplikasi perusahaan. Ketik nama server logis Anda. ID Objek yang muncul pada sumber daya adalah ID identitas server utama.
Menambahkan identitas server ke peran Pembaca Direktori
Identitas server memerlukan izin untuk mengkueri ID Microsoft Entra untuk fungsi administratif, yang mencakup pembuatan pengguna dan login Microsoft Entra, dan melakukan ekspansi grup untuk menerapkan izin pengguna berdasarkan keanggotaan grup Microsoft Entra mereka. Jika izin identitas server untuk mengkueri ID Microsoft Entra dicabut, atau identitas server dihapus, autentikasi Microsoft Entra berhenti berfungsi.
Tetapkan izin kueri Microsoft Entra ke identitas server dengan menambahkannya ke peran Pembaca Direktori atau menetapkan izin Microsoft Graph tingkat bawah berikut:
Catatan
Skrip ini harus dijalankan oleh ID Global Administrator
Microsoft Entra atau Privileged Role Administrator
.
Skrip berikut memberikan izin Pembaca Microsoft Entra Directory ke identitas yang mewakili server logis untuk Azure SQL Database.
- Ganti
<TenantId>
denganTenantId
berkumpul sebelumnya Anda. - Ganti
<ServerName>
dengan nama server logis SQL Anda. Jika nama server Anda adalahmyserver.database.windows.net
, ganti<ServerName>
denganmyserver
.
# 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'."
}
Catatan
Output dari skrip ini menunjukkan apakah identitas ditetapkan ke peran Pembaca Direktori. Anda dapat menjalankan kembali skrip jika Anda tidak yakin apakah izin diberikan.
Untuk pendekatan serupa tentang cara menetapkan peran Pembaca Direktori untuk SQL Managed Instance, lihat Menyediakan admin Microsoft Entra (SQL Managed Instance).
Di lingkungan produksi, praktik manajemen umum adalah menetapkan peran Pembaca Direktori ke grup yang dapat ditetapkan peran di ID Microsoft Entra. Kemudian, pemilik grup dapat menambahkan identitas terkelola ke grup. Ini mempertahankan prinsip hak istimewa paling sedikit, dan melewati kebutuhan administrator Global atau Administrator Peran Istimewa untuk memberikan peran Pembaca Direktori satu per satu ke setiap instans SQL. Untuk informasi selengkapnya tentang fitur ini, lihat Peran Pembaca Direktori di ID Microsoft Entra untuk Azure SQL.
Membuat aplikasi di MICROSOFT Entra ID
Daftarkan aplikasi Anda. Untuk mendaftarkan aplikasi, Anda memerlukan setidaknya peran Pengembang Aplikasi MICROSOFT Entra ID. Untuk informasi selengkapnya tentang menetapkan peran, lihat Menetapkan peran pengguna di ID Microsoft Entra.
Tutorial ini menggunakan dua perwakilan layanan. Perwakilan layanan pertama, DBOwnerApp, digunakan untuk membuat pengguna lain dalam database. Perwakilan layanan kedua, myapp, adalah aplikasi yang dibuat DBOwnerApp pengguna database untuk nanti dalam tutorial ini.
Untuk mendaftarkan aplikasi Anda:
Di portal Azure, pilih ID> Microsoft Entra Pendaftaran aplikasi> Pendaftaran baru.
Setelah pendaftaran aplikasi dibuat, nilai ID Aplikasi (klien) dihasilkan dan ditampilkan. Catat nilai ini untuk digunakan di masa mendatang dalam tutorial ini.
Buat rahasia klien agar aplikasi dapat masuk. Ikuti unggah sertifikat atau buat rahasia untuk masuk. Catat rahasia klien untuk DBOwnerApp untuk digunakan di masa mendatang dalam tutorial ini.
Untuk informasi selengkapnya, tinjau Menggunakan portal untuk membuat aplikasi Microsoft Entra dan perwakilan layanan yang dapat mengakses sumber daya.
Membuat pengguna perwakilan layanan
Tambahkan perwakilan layanan yang baru dibuat, DBOwnerApp, sebagai pengguna di SQL Database dan tetapkan izin untuk itu.
Sambungkan ke SQL Database Anda menggunakan identitas Microsoft Entra yang memiliki izin untuk membuat pengguna lain.
Penting
Hanya pengguna Microsoft Entra yang dapat membuat pengguna Microsoft Entra lainnya di Azure SQL Database. Tidak ada pengguna berdasarkan autentikasi SQL, termasuk admin server, yang dapat membuat pengguna Microsoft Entra. Admin Microsoft Entra adalah satu-satunya pengguna yang awalnya dapat membuat pengguna Microsoft Entra lainnya di SQL Database. Setelah admin Microsoft Entra membuat pengguna lain, setiap pengguna Microsoft Entra dengan izin yang tepat dapat membuat pengguna Microsoft Entra lainnya.
Buat pengguna DBOwnerApp di SQL Database menggunakan perintah T-SQL berikut:
CREATE USER [DBOwnerApp] FROM EXTERNAL PROVIDER GO
Untuk membuat pengguna Microsoft Entra lainnya, minimal,
ALTER ANY USER
izin SQL diperlukan. Izin ini juga diwariskan melalui keanggotaan didb_owner
, dan melalui penugasan sebagai admin Microsoft Entra. Contoh berikut menunjukkan tiga opsi berbeda untuk menetapkan izin ke DBOwnerApp yang memungkinkannya membuat pengguna Microsoft Entra lainnya dalam database.Anda dapat menambahkan DBOwnerApp ke
db_owner
peran dengan sp_addrolemember:EXEC sp_addrolemember 'db_owner', [DBOwnerApp] GO
Anda dapat menetapkan
ALTER ANY USER
izin ke DBOwnerApp seperti sampel T-SQL berikut:GRANT ALTER ANY USER TO [DBOwnerApp] GO
Anda dapat mengatur DBOwnerApp sebagai admin Microsoft Entra. Ini dapat dilakukan menggunakan perintah portal Azure, PowerShell, atau Azure CLI. Untuk informasi selengkapnya, lihat Menyediakan admin Microsoft Entra (SQL Database).
Membuat pengguna dengan perwakilan layanan
Gunakan skrip berikut untuk membuat pengguna perwakilan layanan Microsoft Entra myapp menggunakan perwakilan layanan DBOwnerApp:
- Ganti
<TenantId>
denganTenantId
berkumpul sebelumnya Anda. - Ganti
<ClientId>
denganClientId
berkumpul sebelumnya Anda. - Ganti
<ClientSecret>
dengan rahasia klien Anda yang dibuat sebelumnya. - Ganti
<ServerName>
dengan nama server logis SQL Anda. Jika nama server Anda adalahmyserver.database.windows.net
, ganti<ServerName>
denganmyserver
. - Ganti
<database name>
dengan nama Microsoft Azure SQL Database Anda.
# 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()
Atau, Anda dapat menggunakan kode berikut: Autentikasi perwakilan layanan Microsoft Entra ke Azure SQL Database. Ubah skrip untuk menjalankan pernyataan
CREATE USER [myapp] FROM EXTERNAL PROVIDER
DDL . Skrip yang sama dapat digunakan untuk membuat pengguna atau grup Microsoft Entra di database Anda.- Ganti
Periksa apakah pengguna myapp ada di database dengan menjalankan perintah berikut:
SELECT name, type, type_desc, CAST(CAST(sid as varbinary(16)) as uniqueidentifier) as appId FROM sys.database_principals WHERE name = 'myapp' GO
Anda akan melihat output serupa:
name type type_desc appId myapp E EXTERNAL_USER 6d228f48-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Langkah berikutnya
- Prinsipal Layanan Microsoft Entra dengan Azure SQL
- Apa identitas terkelola untuk sumber daya Azure?
- Cara menggunakan identitas terkelola untuk App Service dan Azure Functions
- Autentikasi perwakilan layanan Microsoft Entra ke SQL DB - Sampel Kode
- Objek perwakilan layanan dan aplikasi di Microsoft Entra ID
- Membuat prinsipal layanan Azure dengan Microsoft Azure PowerShell
- Peran Pembaca Direktori di ID Microsoft Entra untuk Azure SQL