Zelfstudie: Microsoft Entra-gebruikers maken met behulp van Microsoft Entra-toepassingen
Van toepassing op: Azure SQL Database
In dit artikel wordt uitgelegd hoe u een service-principal configureert, zodat microsoft Entra-gebruikers in Azure SQL Database kunnen worden gemaakt. Met deze mogelijkheid kunt u programmatisch toegangsbeheer configureren voor Azure SQL-resources voor gebruikers en toepassingen in uw Microsoft Entra-tenant.
Notitie
Microsoft Entra-id is de nieuwe naam voor Azure Active Directory (Azure AD). Op dit moment wordt de documentatie bijgewerkt.
Zie het artikel Microsoft Entra-verificatie gebruiken voor Microsoft Entra-verificatie voor Azure SQL voor meer informatie.
In deze zelfstudie leert u het volgende:
- Een identiteit toewijzen aan de logische server
- De rol Adreslijstlezers toewijzen aan de serveridentiteit
- Een toepassing registreren in Microsoft Entra-id
- Een databasegebruiker maken voor de service-principal van die toepassing in Azure SQL Database
- Een Microsoft Entra-databasegebruiker maken met de service-principal
Vereisten
- Een bestaande Azure SQL Database-implementatie . We gaan ervan uit dat u een werkende SQL-database hebt voor deze zelfstudie.
- Microsoft Entra
Global Administrator
ofPrivileged Role Administrator
machtigingen in de tenant waarin uw SQL-database zich bevindt. - De nieuwste versie van de Az.Sql PowerShell-module.
- De nieuwste versie van de Microsoft.Graph PowerShell-module.
Een identiteit toewijzen aan de logische server
Verbinding maken naar Azure, waarbij u de Microsoft Entra-tenant opgeeft die als host fungeert voor uw SQL-database. De tenant-id vindt u op de overzichtspagina voor uw Microsoft Entra ID-resource in Azure Portal. Kopieer de tenant-id en voer vervolgens de volgende PowerShell-opdracht uit:
- Vervang
<TenantId>
door de Tenant-id.
Connect-AzAccount -Tenant <TenantId>
Registreer de
TenantId
voor toekomstig gebruik in deze zelfstudie.- Vervang
Genereer een door het systeem toegewezen beheerde identiteit en wijs deze toe aan de logische server in Azure. Voer de volgende PowerShell-opdracht uit:
- Vervang
<ResourceGroupName>
en<ServerName>
door uw resources in de opdracht Set-AzSqlServer . Als de servernaammyserver.database.windows.net
is, vervangt u<ServerName>
doormyserver
.
Set-AzSqlServer -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -AssignIdentity
- Vervang
Controleer of het toewijzen van de server-id is geslaagd. Voer de volgende PowerShell-opdracht uit:
- Vervang
<ResourceGroupName>
en<ServerName>
door uw resources. Als de servernaammyserver.database.windows.net
is, vervangt u<ServerName>
doormyserver
.
$xyz = Get-AzSqlServer -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> $xyz.identity
In de uitvoer worden nu
PrincipalId
,Type
enTenantId
weergegeven. De toegewezen identiteit is dePrincipalId
.- Vervang
U kunt de identiteit ook controleren door naar de Azure-portal te gaan.
- Ga in de Microsoft Entra ID-resource naar Bedrijfstoepassingen. Typ de naam van de logische server. De object-id die op de resource wordt weergegeven, is de id van de primaire serveridentiteit.
Serveridentiteit toevoegen aan de rol Directory Readers
De serveridentiteit vereist machtigingen om een query uit te voeren op Microsoft Entra-id voor beheerfuncties, waaronder het maken van Microsoft Entra-gebruikers en aanmeldingen, en het uitvoeren van groepsuitbreiding om gebruikersmachtigingen toe te passen op basis van hun Microsoft Entra-groepslidmaatschap. Als serveridentiteitsmachtigingen voor het uitvoeren van query's op Microsoft Entra-id worden ingetrokken of als de serveridentiteit wordt verwijderd, werkt Microsoft Entra-verificatie niet meer.
Wijs Microsoft Entra-querymachtigingen toe aan de serveridentiteit door deze toe te voegen aan de rol Directory Readers of door de volgende Microsoft Graph-machtigingen op een lager niveau toe te wijzen:
Notitie
Dit script moet worden uitgevoerd door een Microsoft Entra-id Global Administrator
of een Privileged Role Administrator
.
Het volgende script verleent de Microsoft Entra Directory Readers toestemming voor een identiteit die de logische server voor Azure SQL Database vertegenwoordigt.
- Vervang
<TenantId>
door deTenantId
die eerder is verkregen. - Vervang door
<ServerName>
de naam van de logische server. Als de servernaammyserver.database.windows.net
is, vervangt u<ServerName>
doormyserver
.
# 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'."
}
Notitie
De uitvoer van dit script geeft aan of de identiteit is toegewezen aan de rol Directory Readers . U kunt het script opnieuw uitvoeren als u niet zeker weet of de machtiging is verleend.
Zie Microsoft Entra-beheerder inrichten (SQL Managed Instance) voor een vergelijkbare aanpak voor het toewijzen van de rol Directory Readers voor SQL Managed Instance.
In productieomgevingen is het gebruikelijk om de rol Adreslijstlezers toe te wijzen aan een groep die kan worden toegewezen aan Microsoft Entra-id. Vervolgens kunnen groepseigenaren beheerde identiteiten toevoegen aan de groep. Hiermee wordt het principe van minimale bevoegdheden gehandhaafd en wordt de noodzaak voor een globale Beheer istrator of bevoorrechte rol Beheer istrator om de rol Directory Readers afzonderlijk toe te kennen aan elk SQL-exemplaar. Zie de rol Directory Readers in Microsoft Entra ID voor Azure SQL voor meer informatie over deze functie.
Een toepassing maken in Microsoft Entra-id
Registreer uw toepassingen. Als u een app wilt registreren, hebt u ten minste de rol Microsoft Entra ID Application Developer nodig. Zie Gebruikersrollen toewijzen in Microsoft Entra ID voor meer informatie over het toewijzen van rollen.
In deze zelfstudie worden twee service-principals gebruikt. De eerste service-principal, DBOwnerApp, wordt gebruikt om andere gebruikers in de database te maken. De tweede service-principal, myapp, is de toepassing die DBOwnerApp maakt voor later in deze zelfstudie een databasegebruiker.
Uw toepassingen registreren:
Selecteer Microsoft Entra ID> App-registraties> Nieuwe registratie in de Azure-portal.
Nadat de app-registratie is gemaakt, wordt de waarde voor de toepassings-id (client) gegenereerd en weergegeven. Noteer deze waarde voor toekomstig gebruik in deze zelfstudie.
Maak een clientgeheim waarmee de toepassing zich kan aanmelden. Volg het uploaden van een certificaat of maak een geheim om u aan te melden. Noteer het clientgeheim voor DBOwnerApp voor toekomstig gebruik in deze zelfstudie.
Zie De portal gebruiken om een Microsoft Entra-toepassing en service-principal te maken die toegang heeft tot resources voor meer informatie.
De service-principalgebruiker maken
Voeg de zojuist gemaakte service-principal DBOwnerApp toe als gebruiker in SQL Database en wijs er machtigingen aan toe.
Verbinding maken naar uw SQL Database met behulp van een Microsoft Entra-identiteit met machtigingen voor het maken van andere gebruikers.
Belangrijk
Alleen Microsoft Entra-gebruikers kunnen andere Microsoft Entra-gebruikers maken in Azure SQL Database. Er kunnen geen gebruikers op basis van SQL-verificatie, met inbegrip van de serverbeheerder, een Microsoft Entra-gebruiker maken. De Microsoft Entra-beheerder is de enige gebruiker die in eerste instantie andere Microsoft Entra-gebruikers in SQL Database kan maken. Nadat de Microsoft Entra-beheerder andere gebruikers heeft gemaakt, kan elke Microsoft Entra-gebruiker met de juiste machtigingen andere Microsoft Entra-gebruikers maken.
Maak de gebruiker DBOwnerApp in de SQL Database met behulp van de volgende T-SQL-opdracht:
CREATE USER [DBOwnerApp] FROM EXTERNAL PROVIDER GO
Als u minimaal andere Microsoft Entra-gebruikers wilt maken, is de
ALTER ANY USER
SQL-machtiging vereist. Deze machtiging wordt ook overgenomen via lidmaatschap vandb_owner
en via toewijzing als Microsoft Entra-beheerder. In de volgende voorbeelden ziet u drie verschillende opties voor het toewijzen van machtigingen aan DBOwnerApp waarmee andere Microsoft Entra-gebruikers in de database kunnen worden gemaakt.U kunt DBOwnerApp toevoegen aan de
db_owner
rol met sp_addrolemember:EXEC sp_addrolemember 'db_owner', [DBOwnerApp] GO
U kunt de
ALTER ANY USER
machtiging toewijzen aan DBOwnerApp , zoals het volgende T-SQL-voorbeeld:GRANT ALTER ANY USER TO [DBOwnerApp] GO
U kunt dbOwnerApp instellen als Microsoft Entra-beheerder. U kunt dit doen met behulp van de Azure Portal-, PowerShell- of Azure CLI-opdrachten. Zie Microsoft Entra-beheerder (SQL Database) inrichten voor meer informatie.
Een gebruiker maken met een service-principal
Gebruik het volgende script om een Microsoft Entra-service-principalgebruiker myapp te maken met behulp van de service-principal DBOwnerApp:
- Vervang
<TenantId>
door deTenantId
die eerder is verkregen. - Vervang
<ClientId>
door deClientId
die eerder is verkregen. - Vervang
<ClientSecret>
door het clientgeheim dat u eerder hebt gemaakt. - Vervang door
<ServerName>
de naam van de logische server. Als de servernaammyserver.database.windows.net
is, vervangt u<ServerName>
doormyserver
. - Vervang
<database name>
door de naam van de SQL-database.
# 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()
U kunt ook de volgende code gebruiken: Verificatie van de Microsoft Entra-service-principal voor Azure SQL Database. Wijzig het script om de DDL-instructie
CREATE USER [myapp] FROM EXTERNAL PROVIDER
uit te voeren. Hetzelfde script kan worden gebruikt voor het maken van een Microsoft Entra-gebruiker of -groep in uw database.- Vervang
Controleer of de gebruiker myapp bestaat in de database door de volgende opdracht uit te voeren:
SELECT name, type, type_desc, CAST(CAST(sid as varbinary(16)) as uniqueidentifier) as appId FROM sys.database_principals WHERE name = 'myapp' GO
De uitvoer moet er ongeveer als volgt uitzien:
name type type_desc appId myapp E EXTERNAL_USER 6d228f48-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Volgende stappen
- Microsoft Entra-serviceprincipal met Azure SQL
- Wat zijn beheerde identiteiten voor Azure-resources?
- Beheerde identiteiten gebruiken voor App Service en Azure Functions
- Verificatie van de Microsoft Entra-service-principal voor SQL DB - Codevoorbeeld
- Overzicht van toepassings- en service-principalobjecten in Microsoft Entra ID
- Een Azure-service-principal maken met Azure PowerShell
- Rol Adreslijstlezers in Microsoft Entra-id voor Azure SQL