Esercitazione: Creare utenti di Microsoft Entra usando le applicazioni Microsoft Entra
Si applica a:database SQL di Azure
Questo articolo illustra come configurare un'entità servizio in modo che possa creare utenti di Microsoft Entra in database SQL di Azure. Questa funzionalità abilita la configurazione programmatica della gestione degli accessi alle risorse SQL di Azure per utenti e applicazioni nel tenant di Microsoft Entra.
Nota
Microsoft Entra ID era precedentemente noto come Azure Active Directory (Azure AD).
Per altre informazioni sull'autenticazione di Microsoft Entra per Azure SQL, vedere l'articolo Usare l'autenticazione di Microsoft Entra.
In questa esercitazione apprenderai a:
- Assegnare un'identità al server logico
- Assegnare il ruolo Lettori directory all'identità del server
- Registrare un'applicazione in Microsoft Entra ID
- Creare un utente di database per l'entità servizio dell'applicazione in database SQL di Azure
- Creare un utente del database Microsoft Entra con l'entità servizio
Prerequisiti
- Una distribuzione di database SQL di Azure esistente. Per questa esercitazione si presuppone che si disponga di un database SQL funzionante.
- Microsoft Entra
Global Administrator
oPrivileged Role Administrator
le autorizzazioni nel tenant in cui risiede il database SQL. - Versione più recente del modulo Az.Sql PowerShell.
- Versione più recente del modulo Microsoft.Graph PowerShell.
Assegnare un'identità al server logico
Connessione ad Azure, specificando il tenant di Microsoft Entra che ospita il database SQL. L'ID tenant è reperibile nella pagina Panoramica per la risorsa ID di Microsoft Entra nella portale di Azure. Copiare l'ID tenant e quindi eseguire il comando di PowerShell seguente:
- Sostituire
<TenantId>
con il proprio valore di ID tenant.
Connect-AzAccount -Tenant <TenantId>
Registrare il valore
TenantId
per un uso futuro in questa esercitazione.- Sostituire
Generare un'identità gestita assegnata dal sistema e assegnarla al server logico in Azure. Eseguire questo comando PowerShell:
- Sostituire
<ResourceGroupName>
e<ServerName>
con le risorse nel comando Set-AzSqlServer . Se il nome del server èmyserver.database.windows.net
, sostituire<ServerName>
conmyserver
.
Set-AzSqlServer -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -AssignIdentity
- Sostituire
Verificare che l'identità del server sia stata assegnata correttamente. Eseguire questo comando PowerShell:
- Sostituire
<ResourceGroupName>
e<ServerName>
con le proprie risorse. Se il nome del server èmyserver.database.windows.net
, sostituire<ServerName>
conmyserver
.
$xyz = Get-AzSqlServer -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> $xyz.identity
L'output dovrebbe mostrare
PrincipalId
,Type
eTenantId
. L'identità assegnata èPrincipalId
.- Sostituire
Per controllare l'identità, è anche possibile passare al portale di Azure.
- Nella risorsa MICROSOFT Entra ID passare ad Applicazioni aziendali. Digitare il nome del server logico. L'ID oggetto visualizzato nella risorsa è l'ID dell'identità del server primario.
Aggiungere l'identità del server al ruolo Lettori directory
L'identità del server richiede autorizzazioni per eseguire query su Microsoft Entra ID per le funzioni amministrative, che include la creazione di utenti e account di accesso di Microsoft Entra e l'espansione dei gruppi per applicare le autorizzazioni utente in base all'appartenenza al gruppo Microsoft Entra. Se vengono revocate le autorizzazioni di identità del server per eseguire query sull'ID Microsoft Entra o l'identità del server viene eliminata, l'autenticazione di Microsoft Entra smette di funzionare.
Assegnare le autorizzazioni di query Di Microsoft Entra all'identità del server aggiungendola al ruolo Lettori directory o assegnando le autorizzazioni di microsoft Graph di livello inferiore seguenti:
Nota
Questo script deve essere eseguito da un ID Global Administrator
Microsoft Entra o da un Privileged Role Administrator
oggetto .
Lo script seguente concede all'identità un'identità che rappresenta il server logico per database SQL di Azure.
- Sostituire
<TenantId>
con il valoreTenantId
raccolto in precedenza. - Sostituire
<ServerName>
con il nome del server logico. Se il nome del server èmyserver.database.windows.net
, sostituire<ServerName>
conmyserver
.
# 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'."
}
Nota
L'output di questo script indica se l'identità è assegnata al ruolo Lettori directory. È possibile eseguire di nuovo lo script se non si è certi che sia stata concessa l'autorizzazione.
Per un approccio simile su come assegnare il ruolo Lettori directory per Istanza gestita di SQL, vedere Effettuare il provisioning dell'amministratore di Microsoft Entra (Istanza gestita di SQL).For a similar approach on how to assign the Directory Reader role for Istanza gestita di SQL, see Provision Microsoft Entra admin (Istanza gestita di SQL).
Negli ambienti di produzione, una pratica di gestione comune consiste nell'assegnare il ruolo Lettori directory a un gruppo assegnabile a ruoli in Microsoft Entra ID. I proprietari dei gruppi possono quindi aggiungere identità gestite al gruppo. In questo modo viene mantenuto il principio dei privilegi minimi e viene ignorata la necessità di un Amministrazione istrator globale o di un ruolo con privilegi Amministrazione istrator per concedere singolarmente il ruolo Lettori directory a ogni istanza di SQL. Per altre informazioni su questa funzionalità, vedere Ruolo Lettori directory in Microsoft Entra ID for Azure SQL.
Creare un'applicazione in Microsoft Entra ID
Registrare le applicazioni. Per registrare un'app, è necessario almeno il ruolo Microsoft Entra ID Application Developer . Per altre informazioni sull'assegnazione dei ruoli, vedere Assegnare ruoli utente in Microsoft Entra ID.
Questa esercitazione usa due entità servizio. La prima entità servizio, DBOwnerApp, viene usata per creare altri utenti nel database. La seconda entità servizio, myapp, è l'applicazione che DBOwnerApp crea un utente di database per più avanti in questa esercitazione.
Per registrare le applicazioni:
Nel portale di Azure selezionare Microsoft Entra ID> Registrazioni app> Nuova registrazione.
Dopo aver creato la registrazione dell'app, viene generato e visualizzato il valore ID applicazione (client). Registrare questo valore per un uso futuro in questa esercitazione.
Creare un segreto client per l'applicazione con cui accedere. Seguire il caricamento di un certificato o la creazione di un segreto per l'accesso. Registrare il segreto client per DBOwnerApp per usarlo in futuro in questa esercitazione.
Per altre informazioni, vedere Usare il portale per creare un'applicazione Microsoft Entra e un'entità servizio in grado di accedere alle risorse.
Creare l'utente dell'entità servizio
Aggiungere l'entità servizio appena creata, DBOwnerApp, come utente in database SQL e assegnarvi le autorizzazioni.
Connessione all'database SQL usando un'identità di Microsoft Entra con autorizzazioni per creare altri utenti.
Importante
Solo gli utenti di Microsoft Entra possono creare altri utenti di Microsoft Entra in database SQL di Azure. Nessun utente basato sull'autenticazione SQL, incluso l'amministratore del server, può creare un utente di Microsoft Entra. L'amministratore di Microsoft Entra è l'unico utente che inizialmente può creare altri utenti di Microsoft Entra in database SQL. Dopo che l'amministratore di Microsoft Entra ha creato altri utenti, qualsiasi utente di Microsoft Entra con autorizzazioni appropriate può creare altri utenti di Microsoft Entra.
Creare l'utente DBOwnerApp nel database SQL usando il comando T-SQL seguente:
CREATE USER [DBOwnerApp] FROM EXTERNAL PROVIDER GO
Per creare almeno altri utenti di Microsoft Entra, è necessaria l'autorizzazione
ALTER ANY USER
SQL. Questa autorizzazione viene ereditata anche tramite l'appartenenza adb_owner
e tramite l'assegnazione come amministratore di Microsoft Entra. Gli esempi seguenti illustrano tre diverse opzioni per assegnare le autorizzazioni a DBOwnerApp che consentono di creare altri utenti di Microsoft Entra nel database.È possibile aggiungere DBOwnerApp al
db_owner
ruolo con sp_addrolemember:EXEC sp_addrolemember 'db_owner', [DBOwnerApp] GO
È possibile assegnare l'autorizzazione
ALTER ANY USER
a DBOwnerApp come l'esempio T-SQL seguente:GRANT ALTER ANY USER TO [DBOwnerApp] GO
È possibile impostare DBOwnerApp come amministratore di Microsoft Entra. Questa operazione può essere eseguita usando i comandi portale di Azure, PowerShell o dell'interfaccia della riga di comando di Azure. Per altre informazioni, vedere Effettuare il provisioning dell'amministratore di Microsoft Entra (database SQL).
Creare un utente con un'entità servizio
Usare lo script seguente per creare un utente dell'entità servizio Microsoft Entra myapp usando l'entità servizio DBOwnerApp:
- Sostituire
<TenantId>
con il valoreTenantId
raccolto in precedenza. - Sostituire
<ClientId>
con il valoreClientId
raccolto in precedenza. - Sostituire
<ClientSecret>
con il segreto client creato in precedenza. - Sostituire
<ServerName>
con il nome del server logico. Se il nome del server èmyserver.database.windows.net
, sostituire<ServerName>
conmyserver
. - Sostituire
<database name>
con il nome del database SQL.
# 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()
In alternativa, è possibile usare il codice seguente: autenticazione dell'entità servizio Microsoft Entra per database SQL di Azure. Modificare lo script per eseguire l'istruzione
CREATE USER [myapp] FROM EXTERNAL PROVIDER
DDL . Lo stesso script può essere usato per creare un utente o un gruppo di Microsoft Entra nel database.- Sostituire
Controllare se è presente l'utente myapp nel database eseguendo questo comando:
SELECT name, type, type_desc, CAST(CAST(sid as varbinary(16)) as uniqueidentifier) as appId FROM sys.database_principals WHERE name = 'myapp' GO
Verrà visualizzato un output simile al seguente:
name type type_desc appId myapp E EXTERNAL_USER 6d228f48-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Passaggi successivi
- Entità servizio Microsoft Entra con Azure SQL
- Informazioni sulle identità gestite per le risorse di Azure
- Come usare le identità gestite nel servizio app e in Funzioni di Azure
- Autenticazione dell'entità servizio Microsoft Entra nel database SQL - Esempio di codice
- Oggetti di applicazione ed entità servizio in Microsoft Entra ID
- Creare un'entità servizio di Azure con Azure PowerShell
- Ruolo Lettori directory in Microsoft Entra ID for Azure SQL
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per