Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:Azure SQL-Datenbank
In diesem Artikel wird erläutert, wie Sie einen Dienstprinzipal konfigurieren, damit er Microsoft Entra Benutzer in Azure SQL-Datenbank erstellen kann. Mit dieser Funktion können Sie den Zugriff auf Azure SQL Ressourcen für Benutzer und Anwendungen in Ihrem Microsoft Entra Mandanten programmgesteuert verwalten.
Hinweis
Microsoft Entra ID wurde zuvor als Azure Active Directory (Azure AD) bezeichnet.
Weitere Informationen zur Microsoft Entra Authentifizierung für Azure SQL finden Sie unter Use Microsoft Entra authentication.
In diesem Tutorial lernen Sie Folgendes:
- Zuweisen einer Identität zum logischen Server
- Zuweisen der Rolle „Directory Readers“ zur Serveridentität
- Registrieren einer Anwendung in Microsoft Entra ID
- Erstellen Sie einen Datenbankbenutzer für den Dienstprinzipal der Anwendung in Azure SQL-Datenbank
- Erstellen eines Microsoft Entra Datenbankbenutzers mit dem Dienstprinzipal
Voraussetzungen
- Eine vorhandene Azure SQL-DatenbankBereitstellung. In diesem Lernprogramm wird davon ausgegangen, dass Sie über eine funktionierende SQL-Datenbank verfügen.
- Microsoft Entra
Privileged Role AdministratorBerechtigungen im Mandanten, in dem sich Ihre SQL-Datenbank befindet. - Die aktuelle Version des Az.Sql PowerShell-Moduls.
- Die neueste Version des Microsoft. Graph PowerShell-Modul.
Zuweisen einer Identität zum logischen Server
Stellen Sie eine Verbindung mit Azure her, und geben Sie den Microsoft Entra Mandanten an, der Ihre SQL-Datenbank hosten soll. Die Mandanten-ID finden Sie auf der Seite Overview für Ihre Microsoft Entra IDRessource im Azure Portal. Kopieren Sie die Mandanten-ID und führen Sie dann den folgenden PowerShell-Befehl aus:
- Ersetzen Sie
<TenantId>durch Ihre Mandanten-ID.
Connect-AzAccount -Tenant <TenantId>Notieren Sie sich den
TenantId-Wert für die spätere Verwendung in diesem Tutorial.- Ersetzen Sie
Generieren Sie eine vom System zugewiesene verwaltete Identität, und weisen Sie sie dem logical server in Azure zu. Führen Sie den folgenden PowerShell-Befehl aus:
- Ersetzen Sie
<ResourceGroupName>und<ServerName>durch Ihre Ressourcen im Befehl Set-AzSqlServer. Wenn der Servernamemyserver.database.windows.netist, ersetzen Sie<ServerName>durchmyserver.
Set-AzSqlServer -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -AssignIdentity- Ersetzen Sie
Überprüfen Sie, ob die Serveridentität erfolgreich zugewiesen wurde. Führen Sie den folgenden PowerShell-Befehl aus:
- Ersetzen Sie
<ResourceGroupName>und<ServerName>durch Ihre Ressourcen. Wenn der Servernamemyserver.database.windows.netist, ersetzen Sie<ServerName>durchmyserver.
$xyz = Get-AzSqlServer -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> $xyz.identityIhre Ausgabe zeigt
PrincipalId,TypeundTenantId. Die zugewiesene Identität ist diePrincipalId.- Ersetzen Sie
Sie können die Identität auch überprüfen, indem Sie zum portal Azure wechseln.
- Wechseln Sie in der Ressource Microsoft Entra ID zu Enterprise-Anwendungen. Geben Sie den Namen Ihres logischen Servers ein. Die Objekt-ID, die in der Ressource angezeigt wird, ist die ID der primären Serveridentität.
Tipp
Alternativ zu einer vom System zugewiesenen verwalteten Identität können Sie eine vom Benutzer zugewiesene verwaltete Identität verwenden. Eine vom Benutzer zugewiesene verwaltete Identität kann auf mehreren logischen Servern gemeinsam genutzt werden, wodurch die Anzahl der zu verwaltenden Identitäten reduziert und Rollenzuweisungen vereinfacht werden. Weitere Informationen finden Sie unter Benutzer zugewiesene verwaltete Identität in Microsoft Entra ID für Azure SQL.
Fügen Sie die Serveridentität zur Rolle „Verzeichnisleseberechtigte“ hinzu
Die Serveridentität erfordert Berechtigungen zum Abfragen von Microsoft Entra ID für administrative Funktionen, die das Erstellen von Microsoft Entra-Benutzern und -Anmeldungen umfasst, sowie die Erweiterung der Gruppen, um Benutzerberechtigungen basierend auf ihrer Microsoft Entra-Gruppenmitgliedschaft zu vergeben. Wenn Serveridentitätsberechtigungen zum Abfragen Microsoft Entra ID widerrufen werden oder die Serveridentität gelöscht wird, funktioniert Microsoft Entra Authentifizierung nicht mehr.
Weisen Sie der Serveridentität Microsoft Entra Abfrageberechtigungen zu, indem Sie sie der Rolle Directory Readers hinzufügen oder die folgenden niedrigeren Berechtigungen von Microsoft Graph zuweisen:
Hinweis
Dieses Skript muss von einer Microsoft Entra Privileged Role Administrator oder einer höheren Rolle ausgeführt werden.
Das folgende Skript gewährt dem Microsoft Entra Directory Readers die Berechtigung für eine Identität, die den logischen Server für Azure SQL-Datenbank darstellt.
- Ersetzen Sie
<TenantId>durch das zuvor ermittelteTenantId. - Ersetzen Sie
<ServerName>durch den Namen Ihres logischen Servers. Wenn der Servernamemyserver.database.windows.netist, ersetzen Sie<ServerName>durchmyserver.
# 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'."
}
Hinweis
Die Ausgabe dieses Skripts zeigt an, ob die Identität der Rolle Verzeichnisleser zugewiesen ist. Sie können das Skript erneut ausführen, wenn Sie nicht sicher sind, ob die Berechtigung erteilt wurde.
Eine ähnliche Vorgehensweise für das Zuweisen der Rolle Directory Readers für SQL Managed Instance finden Sie unter Set Microsoft Entra admin.
In Produktionsumgebungen besteht eine gängige Verwaltungspraxis darin, die Rolle Directory Readers einer für Rollen zuweisbaren Gruppe in Microsoft Entra ID zuzuweisen. Gruppenbesitzer können dann der Gruppe verwaltete Identitäten hinzufügen. Dadurch wird das Prinzip der geringsten Rechte beibehalten und die Notwendigkeit eines Administrator für privilegierte Rollen umgangen, um jeder SQL-Instanz die Rolle " Verzeichnisleser " einzeln zu gewähren. Weitere Informationen zu diesem Feature finden Sie unter Directory Readers-Rolle in Microsoft Entra ID für Azure SQL.
Erstellen einer Anwendung in Microsoft Entra ID
Registrieren Ihrer Anwendungen. Zum Registrieren einer App benötigen Sie mindestens die Rolle Microsoft Entra ID Application Developer. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Assignieren von Benutzerrollen in Microsoft Entra ID.
In diesem Lernprogramm werden zwei Dienstprinzipale (Service Principals) verwendet. Der erste Dienstprinzipal DBOwnerApp wird verwendet, um andere Benutzer in der Datenbank zu erstellen. Der zweite Dienstprinzipal, myapp, ist die Anwendung, für die DBOwnerApp später in diesem Tutorail einen Datenbankbenutzer erstellt.
So registrieren Sie Ihre Anwendung:
Wählen Sie im Azure Portal Microsoft Entra ID>App-Registrierungen>Neue Registrierung aus.
Nachdem die App-Registrierung erstellt wurde, wird der Wert für die Anwendungs (Client) -ID generiert und angezeigt. Notieren Sie sich diesen Wert für die spätere Verwendung in diesem Tutorial.
Erstellen Sie ein Client-Secret für die Anwendung, um sich anzumelden. Folgen Sie den Anweisungen, um ein Zertifikat hochzuladen oder einen Geheimschlüssel für die Anmeldung zu erstellen. Notieren Sie den geheimen Clientschlüssel für DBOwnerApp für die zukünftige Verwendung in diesem Tutorial.
Weitere Informationen finden Sie unter Verwenden Sie das Portal, um eine Microsoft Entra-Anwendung und einen Dienstprinzipal zu erstellen, der auf Ressourcen zugreifen kann.
Erstellen Sie den Dienstprinzipal-Benutzer
Fügen Sie den neu erstellten Dienstprinzipal DBOwnerApp als Benutzer in SQL-Datenbank hinzu, und weisen Sie ihm Berechtigungen zu.
Stellen Sie eine Verbindung mit Ihrer SQL-Datenbank mithilfe einer Microsoft Entra Identität her, die über Berechtigungen zum Erstellen anderer Benutzer verfügt.
Wichtig
Nur Microsoft Entra Benutzer können andere Microsoft Entra Benutzer in Azure SQL-Datenbank erstellen. Keine Benutzer, die auf der SQL-Authentifizierung basieren, einschließlich des Serveradministrators, können einen Microsoft Entra Benutzer erstellen. Der Microsoft Entra-Administrator ist der einzige Benutzer, der zunächst andere Microsoft Entra Benutzer in der SQL-Datenbank erstellen kann. Nachdem der Microsoft Entra-Administrator andere Benutzer erstellt hat, können alle Microsoft Entra Benutzer mit ordnungsgemäßen Berechtigungen andere Microsoft Entra Benutzer erstellen.
Erstellen Sie den Benutzer DBOwnerApp in der SQL-Datenbank, indem Sie den folgenden T-SQL-Befehl verwenden:
CREATE USER [DBOwnerApp] FROM EXTERNAL PROVIDER GOUm andere Microsoft Entra Benutzer zu erstellen, ist mindestens die SQL-Berechtigung
ALTER ANY USERerforderlich. Diese Berechtigung wird auch durch die Mitgliedschaft indb_ownerund durch Zuweisung als Microsoft Entra-Administrator geerbt. Die folgenden Beispiele veranschaulichen drei verschiedene Optionen zum Zuweisen von Berechtigungen für DBOwnerApp, mit denen sie andere Microsoft Entra Benutzer in der Datenbank erstellen können.Sie können DBOwnerApp zur
db_owner-Rolle mit sp_addrolemember hinzufügen:EXEC sp_addrolemember 'db_owner', [DBOwnerApp] GOSie können wie im folgenden T-SQL-Beispiel die
ALTER ANY USER-Berechtigung zu DBOwnerApp zuweisen:GRANT ALTER ANY USER TO [DBOwnerApp] GOSie können die DBOwnerApp als Microsoft Entra-Administrator festlegen. Verwenden Sie die Befehle Azure Portal, PowerShell oder Azure CLI. Weitere Informationen finden Sie unter Set Microsoft Entra Admin.
Erstellen Sie einen Benutzer mit einem Dienstprinzipal
Verwenden Sie das folgende Skript, um einen Microsoft Entra Dienstprinzipalbenutzer myapp mithilfe des Dienstprinzipals DBOwnerApp zu erstellen:
- Ersetzen Sie
<TenantId>durch das zuvor ermittelteTenantId. - Ersetzen Sie
<ClientId>durch das zuvor ermittelteClientId. - Ersetzen Sie
<ClientSecret>durch Ihren geheimen Clientschlüssel, der zuvor erstellt wurde. - Ersetzen Sie
<ServerName>durch den Namen Ihres logischen Servers. Wenn der Servernamemyserver.database.windows.netist, ersetzen Sie<ServerName>durchmyserver. - Ersetzen Sie
<database name>durch den Namen der SQL-Datenbank.
Hinweis
Für das folgende Skript wird die Microsoft.Data.SqlClient assembly benötigt. Installieren Sie sie aus dem NuGet-Paket und laden Sie die DLL mit
Add-Type -Path "path\to\Microsoft.Data.SqlClient.dll", bevor Sie das Skript ausführen.# 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()Alternativ können Sie den folgenden Code verwenden: Microsoft Entra Dienstprinzipal-Authentifizierung für die Azure SQL-Datenbank. Ändern Sie das Skript, um die DDL-Anweisung
CREATE USER [myapp] FROM EXTERNAL PROVIDERauszuführen. Verwenden Sie dasselbe Skript, um einen Microsoft Entra Benutzer oder eine Gruppe in Ihrer Datenbank zu erstellen.- Ersetzen Sie
Überprüfen Sie, ob der Benutzer myapp in der Datenbank vorhanden ist, indem Sie den folgenden Befehl ausführen:
SELECT name, type, type_desc, CAST(CAST(sid as varbinary(16)) as uniqueidentifier) as appId FROM sys.database_principals WHERE name = 'myapp' GOEine ähnliche Ausgabe wie die folgende sollte angezeigt werden:
name type type_desc appId myapp E EXTERNAL_USER aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
Verwandte Inhalte
- Microsoft Entra Dienstprinzipale mit Azure SQL
- Was sind verwaltete Identitäten für Azure-Ressourcen?
Wie verwaltete Identitäten für App Service und Azure Functions - Microsoft Entra Dienst-Hauptkonto-Authentifizierung für SQL-Datenbank – Codebeispiel
- Application- und Dienstprinzipalobjekte in Microsoft Entra ID
- Erstellen Sie ein Azure-Dienstprinzipal mit Azure PowerShell
- Rolle Directory Readers in Microsoft Entra ID für Azure SQL