Tutorial: Schützen der Azure SQL-Datenbank-Verbindung von App Service mittels einer verwalteten IdentitätTutorial: Secure Azure SQL Database connection from App Service using a managed identity

App Service bietet einen hochgradig skalierbaren Webhostingdienst mit Self-Patching in Azure.App Service provides a highly scalable, self-patching web hosting service in Azure. Außerdem steht eine verwaltete Identität für Ihre App zur Verfügung. Hierbei handelt es sich um eine vorgefertigte Lösung zum Schutz des Zugriffs auf Azure SQL-Datenbank und andere Azure-Dienste.It also provides a managed identity for your app, which is a turn-key solution for securing access to Azure SQL Database and other Azure services. Verwaltete Identitäten in App Service machen Ihre App frei von Geheimnissen (wie etwa Anmeldeinformationen in Verbindungszeichenfolgen) und verbessern so die Sicherheit Ihrer App.Managed identities in App Service make your app more secure by eliminating secrets from your app, such as credentials in the connection strings. In diesem Tutorial fügen Sie der in einem der folgenden Tutorials erstellten Beispiel-Web-App eine verwaltete Identität hinzu:In this tutorial, you will add managed identity to the sample web app you built in one of the following tutorials:

Danach stellt Ihre Beispiel-App ganz ohne Benutzername und Kennwort eine sichere Verbindung mit SQL-Datenbank her.When you're finished, your sample app will connect to SQL Database securely without the need of username and passwords.

Hinweis

Die in diesem Tutorial behandelten Schritte gelten für die folgenden Versionen:The steps covered in this tutorial support the following versions:

  • .NET Framework 4.7.2 und höher.NET Framework 4.7.2 and above
  • .NET Core 2.2 und höher.NET Core 2.2 and above

Sie lernen Folgendes:What you will learn:

  • Aktivieren von verwalteten IdentitätenEnable managed identities
  • Gewähren von SQL-Datenbank-Zugriff für die verwaltete IdentitätGrant SQL Database access to the managed identity
  • Konfigurieren von Entity Framework für die Verwendung der Azure AD-Authentifizierung mit SQL-DatenbankConfigure Entity Framework to use Azure AD authentication with SQL Database
  • Herstellen einer Verbindung mit SQL-Datenbank über Visual Studio unter Verwendung der Azure AD-AuthentifizierungConnect to SQL Database from Visual Studio using Azure AD authentication

Hinweis

Die Azure AD-Authentifizierung unterscheidet sich von der integrierten Windows-Authentifizierung im lokalen Active Directory (AD DS).Azure AD authentication is different from Integrated Windows authentication in on-premises Active Directory (AD DS). AD DS und Azure AD verwenden grundverschiedene Authentifizierungsprotokolle.AD DS and Azure AD use completely different authentication protocols. Weitere Informationen finden Sie in der Dokumentation zu Azure AD Domain Services.For more information, see Azure AD Domain Services documentation.

Wenn Sie kein Azure-Abonnement besitzen, erstellen Sie ein kostenloses Konto, bevor Sie beginnen.If you don't have an Azure subscription, create a free account before you begin.

VoraussetzungenPrerequisites

Dieser Artikel fährt dort fort, wo Sie hier aufgehört haben: Tutorial: Erstellen einer ASP.NET-App in Azure mit SQL-Datenbank oder Tutorial: Erstellen einer ASP.NET Core- und SQL-Datenbank-App in Azure App Service.This article continues where you left off in Tutorial: Build an ASP.NET app in Azure with SQL Database or Tutorial: Build an ASP.NET Core and SQL Database app in Azure App Service. Absolvieren Sie zunächst eins der beiden Tutorials, sofern noch nicht geschehen.If you haven't already, follow one of the two tutorials first. Alternativ können Sie die Schritte für Ihre eigene .NET-App mit SQL-Datenbank anpassen.Alternatively, you can adapt the steps for your own .NET app with SQL Database.

Vergewissern Sie sich zum Debuggen Ihrer App mit SQL-Datenbank als Back-End, dass Sie Clientverbindung von Ihrem Computer zugelassen haben.To debug your app using SQL Database as the back end, make sure that you've allowed client connection from your computer. Falls nicht, fügen Sie die Client-IP mithilfe der Schritte unter the steps at IP-Firewallregeln für Azure SQL-Datenbank and SQL Data Warehouse hinzu.If not, add the client IP by following the steps at Manage server-level IP firewall rules using the Azure portal.

Verwenden von Azure Cloud ShellUse Azure Cloud Shell

Azure hostet Azure Cloud Shell, eine interaktive Shell-Umgebung, die Sie über Ihren Browser nutzen können.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Sie können entweder Bash oder PowerShell mit Cloud Shell verwenden, um mit Azure-Diensten zu arbeiten.You can use either Bash or PowerShell with Cloud Shell to work with Azure services. Sie können die vorinstallierten Befehle von Cloud Shell verwenden, um den Code in diesem Artikel auszuführen, ohne etwas in Ihrer lokalen Umgebung installieren zu müssen.You can use the Cloud Shell preinstalled commands to run the code in this article without having to install anything on your local environment.

Starten von Azure Cloud Shell:To start Azure Cloud Shell:

OptionOption Beispiel/LinkExample/Link
Klicken Sie in der rechten oberen Ecke eines Codeblocks auf Ausprobieren.Select Try It in the upper-right corner of a code block. Durch die Auswahl von Ausprobieren wird der Code nicht automatisch in Cloud Shell kopiert.Selecting Try It doesn't automatically copy the code to Cloud Shell. Beispiel für „Testen Sie es.“ für Azure Cloud Shell
Rufen Sie https://shell.azure.com auf, oder wählen Sie die Schaltfläche Cloud Shell starten, um Cloud Shell im Browser zu öffnen.Go to https://shell.azure.com, or select the Launch Cloud Shell button to open Cloud Shell in your browser. Starten von Cloud Shell in einem neuen FensterLaunch Cloud Shell in a new window
Wählen Sie im Azure-Portal rechts oben im Menü die Schaltfläche Cloud Shell aus.Select the Cloud Shell button on the menu bar at the upper right in the Azure portal. Cloud Shell-Schaltfläche im Azure-Portal

Ausführen des Codes in diesem Artikel in Azure Cloud Shell:To run the code in this article in Azure Cloud Shell:

  1. Starten Sie Cloud Shell.Start Cloud Shell.

  2. Wählen Sie die Schaltfläche Kopieren für einen Codeblock, um den Code zu kopieren.Select the Copy button on a code block to copy the code.

  3. Fügen Sie den Code mit STRG+UMSCHALT+V unter Windows und Linux oder Cmd+UMSCHALT+V unter macOS in die Cloud Shell-Sitzung ein.Paste the code into the Cloud Shell session by selecting Ctrl+Shift+V on Windows and Linux or by selecting Cmd+Shift+V on macOS.

  4. Drücken Sie die EINGABETASTE, um den Code auszuführen.Select Enter to run the code.

Gewähren von Datenbankzugriff für Azure AD-BenutzerGrant database access to Azure AD user

Aktivieren Sie zunächst die Azure AD-Authentifizierung für SQL-Datenbank, indem Sie einen Azure AD-Benutzer als Active Directory-Administrator des Servers zuweisen.First enable Azure AD authentication to SQL Database by assigning an Azure AD user as the Active Directory admin of the server. Dieser Benutzer unterscheidet sich von dem Microsoft-Konto, das Sie bei der Registrierung für Ihr Azure-Abonnement verwendet haben.This user is different from the Microsoft account you used to sign up for your Azure subscription. Es muss sich um einen Benutzer handeln, den Sie in Azure AD erstellt, importiert, synchronisiert oder eingeladen haben.It must be a user that you created, imported, synced, or invited into Azure AD. Weitere Informationen zu zulässigen Azure AD-Benutzern finden Sie unter Funktionen und Einschränkungen von Azure AD.For more information on allowed Azure AD users, see Azure AD features and limitations in SQL Database.

Enthält Ihr Azure AD-Mandant noch keinen Benutzer, erstellen Sie einen anhand der Schritte unter Hinzufügen oder Löschen von Benutzern in Azure Active Directory.If your Azure AD tenant doesn't have a user yet, create one by following the steps at Add or delete users using Azure Active Directory.

Ermitteln Sie die Objekt-ID des Azure AD-Benutzers mithilfe von az ad user list, und ersetzen Sie den Platzhalter <user-principal-name> .Find the object ID of the Azure AD user using the az ad user list and replace <user-principal-name>. Das Ergebnis wird in einer Variablen gespeichert.The result is saved to a variable.

azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].objectId --output tsv)

Tipp

Wenn Sie eine Liste mit allen Benutzerprinzipalnamen in Azure AD anzeigen möchten, führen Sie az ad user list --query [].userPrincipalName aus.To see the list of all user principal names in Azure AD, run az ad user list --query [].userPrincipalName.

Fügen Sie diesen Azure AD-Benutzer in Cloud Shell mithilfe des Befehls az sql server ad-admin create als Active Directory-Administrator hinzu.Add this Azure AD user as an Active Directory admin using az sql server ad-admin create command in the Cloud Shell. Ersetzen Sie im folgenden Befehl <server-name> durch den Namen des SQL-Datenbank-Servers (ohne das Suffix .database.windows.net).In the following command, replace <server-name> with the server name (without the .database.windows.net suffix).

az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id $azureaduser

Weitere Informationen zum Hinzufügen eines Active Directory-Administrators finden Sie unter Bereitstellen eines Azure Active Directory-Administrators für Ihren Server.For more information on adding an Active Directory admin, see Provision an Azure Active Directory administrator for your server

Einrichten von Visual StudioSet up Visual Studio

WindowsWindows

Visual Studio für Windows ist in die Azure AD-Authentifizierung integriert.Visual Studio for Windows is integrated with Azure AD authentication. Fügen Sie in Visual Studio Ihren Azure AD-Benutzer hinzu, um in Visual Studio entwickeln und debuggen zu können. Wählen Sie dazu über das Menü Datei > Kontoeinstellungen aus, und klicken Sie auf Konto hinzufügen.To enable development and debugging in Visual Studio, add your Azure AD user in Visual Studio by selecting File > Account Settings from the menu, and click Add an account.

Wählen Sie über das Menü Extras > Optionen und anschließend Azure Service Authentication (Azure-Dienstauthentifizierung) > Kontoauswahl aus, um den Azure AD-Benutzer für die Azure-Dienstauthentifizierung festzulegen.To set the Azure AD user for Azure service authentication, select Tools > Options from the menu, then select Azure Service Authentication > Account Selection. Wählen Sie den Azure AD-Benutzer aus, den Sie hinzugefügt haben, und klicken Sie auf OK.Select the Azure AD user you added and click OK.

Nun können Sie Ihre App mit der SQL-Datenbank als Back-End entwickeln und debuggen und dabei die Azure AD-Authentifizierung verwenden.You're now ready to develop and debug your app with the SQL Database as the back end, using Azure AD authentication.

MacOSMacOS

Visual Studio für Mac ist nicht in die Azure AD-Authentifizierung integriert.Visual Studio for Mac is not integrated with Azure AD authentication. Die Bibliothek Microsoft.Azure.Services.AppAuthentication, die Sie später verwenden werden, kann jedoch Token von der Azure CLI verwenden.However, the Microsoft.Azure.Services.AppAuthentication library that you will use later can use tokens from Azure CLI. Um die Entwicklung und das Debuggen in Visual Studio zu ermöglichen, müssen Sie zunächst die Azure CLI auf dem lokalen Computer installieren.To enable development and debugging in Visual Studio, first you need to install Azure CLI on your local machine.

Wenn die Azure CLI auf dem lokalen Computer installiert ist, führen Sie den folgenden Befehl aus, um sich mit Ihrem Azure AD-Benutzerkonto bei der Azure CLI anzumelden:Once Azure CLI is installed on your local machine, sign in to Azure CLI with the following command using your Azure AD user:

az login --allow-no-subscriptions

Nun können Sie Ihre App mit der SQL-Datenbank als Back-End entwickeln und debuggen und dabei die Azure AD-Authentifizierung verwenden.You're now ready to develop and debug your app with the SQL Database as the back end, using Azure AD authentication.

Ändern Ihres ProjektsModify your project

Die Schritte für Ihr Projekt hängen davon ab, ob es sich um ein ASP.NET-Projekt oder ein ASP.NET Core-Projekt handelt.The steps you follow for your project depends on whether it's an ASP.NET project or an ASP.NET Core project.

Ändern des ASP.NET-ProjektsModify ASP.NET

Öffnen Sie in Visual Studio die Paket-Manager-Konsole, und fügen Sie das NuGet-Paket Microsoft.Azure.Services.AppAuthentication hinzu:In Visual Studio, open the Package Manager Console and add the NuGet package Microsoft.Azure.Services.AppAuthentication:

Install-Package Microsoft.Azure.Services.AppAuthentication -Version 1.4.0

Nehmen Sie in Web.config nacheinander folgende Änderungen vor:In Web.config, working from the top of the file and make the following changes:

  • Fügen Sie in <configSections> die folgende Abschnittsdeklaration ein:In <configSections>, add the following section declaration in it:

    <section name="SqlAuthenticationProviders" type="System.Data.SqlClient.SqlAuthenticationProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    
  • (Die Deklaration muss nach dem schließenden Tag </configSections> eingefügt werden.) Fügen Sie anschließend den folgenden XML-Code für <SqlAuthenticationProviders> hinzu:below the closing </configSections> tag, add the following XML code for <SqlAuthenticationProviders>.

    <SqlAuthenticationProviders>
      <providers>
        <add name="Active Directory Interactive" type="Microsoft.Azure.Services.AppAuthentication.SqlAppAuthenticationProvider, Microsoft.Azure.Services.AppAuthentication" />
      </providers>
    </SqlAuthenticationProviders>
    
  • Suchen Sie nach der Verbindungszeichenfolge MyDbConnection, und ersetzen Sie den Wert connectionString durch "server=tcp:<server-name>.database.windows.net;database=<db-name>;UID=AnyString;Authentication=Active Directory Interactive".Find the connection string called MyDbConnection and replace its connectionString value with "server=tcp:<server-name>.database.windows.net;database=<db-name>;UID=AnyString;Authentication=Active Directory Interactive". Ersetzen Sie die Platzhalter <server-name> und <db-name> durch Ihren Servernamen bzw. durch Ihren Datenbanknamen.Replace <server-name> and <db-name> with your server name and database name.

Hinweis

Der von Ihnen eben registrierte SQL-Authentifizierungsanbieter (SqlAuthenticationProvider) basiert auf der zuvor installierten AppAuthentication-Bibliothek.The SqlAuthenticationProvider you just registered is based on top of the AppAuthentication library you installed earlier. Standardmäßig wird eine systemseitig zugewiesene Identität verwendet.By default, it uses a system-assigned identity. Um eine benutzerseitig zugewiesene Identität zu nutzen, müssen Sie eine zusätzliche Konfiguration bereitstellen.To leverage a user-assigned identity, you will need to provide an additional configuration. Lesen Sie die Informationen zur Unterstützung der Verbindungszeichenfolge für die AppAuthentication-Bibliothek.Please see connection string support for the AppAuthentication library.

Das ist alles, was Sie benötigen, um eine Verbindung mit SQL-Datenbank herzustellen.That's every thing you need to connect to SQL Database. Beim Debuggen in Visual Studio verwendet Ihr Code den Azure AD-Benutzer, den Sie unter Einrichten von Visual Studio konfiguriert haben.When debugging in Visual Studio, your code uses the Azure AD user you configured in Set up Visual Studio. Sie richten die SQL-Datenbank später ein, um eine Verbindung von der verwalteten Identität ihrer App Service-App zuzulassen.You'll set up SQL Database later to allow connection from the managed identity of your App Service app.

Drücken Sie Ctrl+F5, um die App erneut auszuführen.Type Ctrl+F5 to run the app again. Die gleiche CRUD-App in Ihrem Browser stellt nun unter Verwendung der Azure AD-Authentifizierung eine Direktverbindung mit der Azure SQL-Datenbank her.The same CRUD app in your browser is now connecting to the Azure SQL Database directly, using Azure AD authentication. Dieses Setup ermöglicht das Ausführen von Datenbankmigrationen über Visual Studio.This setup lets you run database migrations from Visual Studio.

Ändern des ASP.NET Core-ProjektsModify ASP.NET Core

Öffnen Sie in Visual Studio die Paket-Manager-Konsole, und fügen Sie das NuGet-Paket Microsoft.Azure.Services.AppAuthentication hinzu:In Visual Studio, open the Package Manager Console and add the NuGet package Microsoft.Azure.Services.AppAuthentication:

Install-Package Microsoft.Azure.Services.AppAuthentication -Version 1.4.0

Unter Tutorial: Erstellen einer ASP.NET Core- und SQL-Datenbank-App in Azure App Service wird die Verbindungszeichenfolge MyDbConnection überhaupt nicht verwendet, weil die lokale Entwicklungsumgebung eine Sqlite-Datenbankdatei und die Azure-Produktionsumgebung eine Verbindungszeichenfolge aus App Service nutzt.In the ASP.NET Core and SQL Database tutorial, the MyDbConnection connection string isn't used at all because the local development environment uses a Sqlite database file, and the Azure production environment uses a connection string from App Service. Bei der Active Directory-Authentifizierung müssen beide Umgebungen die gleiche Verbindungszeichenfolge verwenden.With Active Directory authentication, you want both environments to use the same connection string. Ersetzen Sie in appsettings.json den Wert der Verbindungszeichenfolge MyDbConnection durch Folgendes:In appsettings.json, replace the value of the MyDbConnection connection string with:

"Server=tcp:<server-name>.database.windows.net,1433;Database=<database-name>;"

Als Nächstes stellen Sie den Entity Framework-Datenbankkontext mit dem Zugriffstoken für SQL-Datenbank bereit.Next, you supply the Entity Framework database context with the access token for the SQL Database. Fügen Sie in Data\MyDatabaseContext.cs den folgenden Code innerhalb der geschweiften Klammern des leeren Konstruktors MyDatabaseContext (DbContextOptions<MyDatabaseContext> options) hinzu:In Data\MyDatabaseContext.cs, add the following code inside the curly braces of the empty MyDatabaseContext (DbContextOptions<MyDatabaseContext> options) constructor:

var conn = (Microsoft.Data.SqlClient.SqlConnection)Database.GetDbConnection();
conn.AccessToken = (new Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider()).GetAccessTokenAsync("https://database.windows.net/").Result;

Hinweis

Zur Vereinfachung und besseren Übersichtlichkeit wird synchroner Democode verwendet.This demonstration code is synchronous for clarity and simplicity.

Das ist alles, was Sie benötigen, um eine Verbindung mit SQL-Datenbank herzustellen.That's every thing you need to connect to SQL Database. Beim Debuggen in Visual Studio verwendet Ihr Code den Azure AD-Benutzer, den Sie unter Einrichten von Visual Studio konfiguriert haben.When debugging in Visual Studio, your code uses the Azure AD user you configured in Set up Visual Studio. Sie richten die SQL-Datenbank später ein, um eine Verbindung von der verwalteten Identität ihrer App Service-App zuzulassen.You'll set up SQL Database later to allow connection from the managed identity of your App Service app. Die AzureServiceTokenProvider-Klasse speichert das Token im Arbeitsspeicher zwischen und ruft es kurz vor dem Ablaufdatum von Azure AD ab.The AzureServiceTokenProvider class caches the token in memory and retrieves it from Azure AD just before expiration. Sie benötigen keinen benutzerdefinierten Code, um das Token zu aktualisieren.You don't need any custom code to refresh the token.

Tipp

Wenn der von Ihnen konfigurierte Azure AD-Benutzer Zugriff auf mehrere Mandanten hat, rufen Sie GetAccessTokenAsync("https://database.windows.net/", tenantid) mit der gewünschten Mandanten-ID auf, um das geeignete Zugriffstoken abzurufen.If the Azure AD user you configured has access to multiple tenants, call GetAccessTokenAsync("https://database.windows.net/", tenantid) with the desired tenant ID to retrieve the proper access token.

Drücken Sie Ctrl+F5, um die App erneut auszuführen.Type Ctrl+F5 to run the app again. Die gleiche CRUD-App in Ihrem Browser stellt nun unter Verwendung der Azure AD-Authentifizierung eine Direktverbindung mit der Azure SQL-Datenbank her.The same CRUD app in your browser is now connecting to the Azure SQL Database directly, using Azure AD authentication. Dieses Setup ermöglicht das Ausführen von Datenbankmigrationen über Visual Studio.This setup lets you run database migrations from Visual Studio.

Verwenden von Konnektivität mit verwalteter IdentitätUse managed identity connectivity

Als Nächstes konfigurieren Sie Ihre App Service-App so, dass sie beim Herstellen der Verbindung mit SQL-Datenbank eine vom System zugewiesene verwaltete Identität verwendet.Next, you configure your App Service app to connect to SQL Database with a system-assigned managed identity.

Hinweis

Die Anweisungen in diesem Abschnitt gelten zwar für eine systemseitig zugewiesene Identität, eine benutzerseitig zugewiesene Identität kann jedoch genauso einfach verwendet werden.While the instructions in this section are for a system-assigned identity, a user-assigned identity can just as easily be used. DazuTo do this. müssen Sie az webapp identity assign command ändern, um die gewünschte benutzerseitig zugewiesene Identität zuzuweisen.you would need the change the az webapp identity assign command to assign the desired user-assigned identity. Stellen Sie dann beim Erstellen des SQL-Benutzers sicher, dass Sie den Namen der benutzerseitig zugewiesenen Identitätsressource anstelle des Websitenamens verwenden.Then, when creating the SQL user, make sure to use the name of the user-assigned identity resource rather than the site name.

Aktivieren einer verwalteten Identität für die AppEnable managed identity on app

Verwenden Sie den Befehl az webapp identity assign in Cloud Shell, um eine verwaltete Identität für Ihre Azure-App zu aktivieren.To enable a managed identity for your Azure app, use the az webapp identity assign command in the Cloud Shell. Ersetzen Sie im folgenden Befehl den Platzhalter <app-name> .In the following command, replace <app-name>.

az webapp identity assign --resource-group myResourceGroup --name <app-name>

Beispiel für die Ausgabe:Here's an example of the output:

{
  "additionalProperties": {},
  "principalId": "21dfa71c-9e6f-4d17-9e90-1d28801c9735",
  "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47",
  "type": "SystemAssigned"
}

Erteilen von Berechtigungen für eine verwaltete IdentitätGrant permissions to managed identity

Hinweis

Sie können die Identität einer Azure AD-Gruppe hinzufügen und anschließend der Azure AD-Gruppe (und nicht der Identität) SQL-Datenbank-Zugriff erteilen.If you want, you can add the identity to an Azure AD group, then grant SQL Database access to the Azure AD group instead of the identity. Mit den folgenden Befehlen wird beispielsweise die verwaltete Identität aus dem vorherigen Schritt zu einer neuen Gruppe namens myAzureSQLDBAccessGroup hinzugefügt:For example, the following commands add the managed identity from the previous step to a new group called myAzureSQLDBAccessGroup:

groupid=$(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
msiobjectid=$(az webapp identity show --resource-group myResourceGroup --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid

Melden Sie sich in Cloud Shell mithilfe des Befehls „sqlcmd“ bei SQL-Datenbank an.In the Cloud Shell, sign in to SQL Database by using the SQLCMD command. Ersetzen Sie <server-name> durch den Namen Ihres Servers, <db-name> durch den von Ihrer App verwendeten Datenbanknamen sowie <aad-user-name> und <aad-password> durch die Anmeldeinformationen Ihres Azure AD-Benutzers.Replace <server-name> with your server name, <db-name> with the database name your app uses, and <aad-user-name> and <aad-password> with your Azure AD user's credentials.

sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30

Führen Sie an der SQL-Eingabeaufforderung für die gewünschte Datenbank die folgenden Befehle aus, um der App die nötigen Berechtigungen zu erteilen.In the SQL prompt for the database you want, run the following commands to grant the permissions your app needs. Beispiel:For example,

CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
GO

<identity-name> ist der Name der verwalteten Identität in Azure AD.<identity-name> is the name of the managed identity in Azure AD. Wird die Identität vom System zugewiesen, ist der Name immer mit dem Namen Ihrer App Service-App identisch.If the identity is system-assigned, the name always the same as the name of your App Service app. Wenn Sie Berechtigungen für eine Azure AD-Gruppe erteilen möchten, verwenden Sie stattdessen den Anzeigenamen der Gruppe (etwa myAzureSQLDBAccessGroup).To grant permissions for an Azure AD group, use the group's display name instead (for example, myAzureSQLDBAccessGroup).

Geben Sie EXIT ein, um zur Cloud Shell-Eingabeaufforderung zurückzukehren.Type EXIT to return to the Cloud Shell prompt.

Hinweis

Die Back-End-Dienste verwalteter Identitäten verwalten darüber hinaus einen Tokencache, der das Token für eine Zielressource nur bei Ablauf aktualisiert.The back-end services of managed identities also maintains a token cache that updates the token for a target resource only when it expires. Wenn Sie beim Konfigurieren der Berechtigungen für SQL-Datenbank einen Fehler machen und die Berechtigungen ändern möchten, nachdem Sie versucht haben, mit Ihrer App ein Token abzurufen, erhalten Sie tatsächlich erst dann ein neues Token mit den aktualisierten Berechtigungen, wenn das zwischengespeicherte Token abläuft.If you make a mistake configuring your SQL Database permissions and try to modify the permissions after trying to get a token with your app, you don't actually get a new token with the updated permissions until the cached token expires.

Ändern der VerbindungszeichenfolgeModify connection string

Zur Erinnerung: Die in Web.config oder appsettings.json vorgenommenen Änderungen funktionieren auch mit der verwalteten Identität. Sie müssen also lediglich die vorhandene Verbindungszeichenfolge in App Service entfernen, die von Visual Studio im Zuge der erstmaligen Bereitstellung Ihrer App erstellt wurde.Remember that the same changes you made in Web.config or appsettings.json works with the managed identity, so the only thing to do is to remove the existing connection string in App Service, which Visual Studio created deploying your app the first time. Verwenden Sie den folgenden Befehl, und ersetzen Sie dabei den Platzhalter <app-name> durch den Namen Ihrer App.Use the following command, but replace <app-name> with the name of your app.

az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names MyDbConnection

Veröffentlichen der ÄnderungenPublish your changes

Nun müssen die Änderungen nur noch in Azure veröffentlicht werden.All that's left now is to publish your changes to Azure.

Wurden Sie vom Tutorial: Erstellen einer ASP.NET-App in Azure mit SQL-Datenbank weitergeleitet, veröffentlichen Sie Ihre Änderungen in Visual Studio.If you came from Tutorial: Build an ASP.NET app in Azure with SQL Database, publish your changes in Visual Studio. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt DotNetAppSqlDb, und wählen Sie Veröffentlichen aus.In the Solution Explorer, right-click your DotNetAppSqlDb project and select Publish.

Veröffentlichen über den Projektmappen-Explorer

Klicken Sie auf der Veröffentlichungsseite auf Veröffentlichen.In the publish page, click Publish.

Wurden Sie vom Tutorial: Erstellen einer ASP.NET Core- und SQL-Datenbank-App in Azure App Service weitergeleitet, veröffentlichen Sie Ihre Änderungen mithilfe von Git mit den folgenden Befehlen:If you came from Tutorial: Build an ASP.NET Core and SQL Database app in Azure App Service, publish your changes using Git, with the following commands:

git commit -am "configure managed identity"
git push azure master

Wenn die neue Webseite Ihre Aufgabenliste anzeigt, stellt Ihre App unter Verwendung der verwalteten Identität eine Verbindung mit der Datenbank her.When the new webpage shows your to-do list, your app is connecting to the database using the managed identity.

Azure-App nach Code First-Migration

Die Aufgabenliste sollte sich nun wie gewohnt bearbeiten lassen.You should now be able to edit the to-do list as before.

Bereinigen von RessourcenClean up resources

In den vorherigen Schritten haben Sie Azure-Ressourcen in einer Ressourcengruppe erstellt.In the preceding steps, you created Azure resources in a resource group. Wenn Sie diese Ressourcen in Zukunft nicht mehr benötigen, löschen Sie die Ressourcengruppe, indem Sie den folgenden Befehl in Cloud Shell ausführen:If you don't expect to need these resources in the future, delete the resource group by running the following command in the Cloud Shell:

az group delete --name myResourceGroup

Die Ausführung dieses Befehls kann eine Minute in Anspruch nehmen.This command may take a minute to run.

Nächste SchritteNext steps

Sie haben Folgendes gelernt:What you learned:

  • Aktivieren von verwalteten IdentitätenEnable managed identities
  • Gewähren von SQL-Datenbank-Zugriff für die verwaltete IdentitätGrant SQL Database access to the managed identity
  • Konfigurieren von Entity Framework für die Verwendung der Azure AD-Authentifizierung mit SQL-DatenbankConfigure Entity Framework to use Azure AD authentication with SQL Database
  • Herstellen einer Verbindung mit SQL-Datenbank über Visual Studio unter Verwendung der Azure AD-AuthentifizierungConnect to SQL Database from Visual Studio using Azure AD authentication

Fahren Sie mit dem nächsten Tutorial fort, um zu erfahren, wie Sie Ihrer Web-App einen benutzerdefinierten DNS-Namen zuordnen.Advance to the next tutorial to learn how to map a custom DNS name to your web app.