Share via


Migrieren einer Python-Anwendung zur Verwendung kennwortloser Verbindungen mit Azure SQL-Datenbank

Gilt für:Azure SQL-Datenbank

Anwendungsanforderungen an Azure SQL-Datenbank müssen authentifiziert werden. Obwohl es mehrere Optionen für die Authentifizierung bei Azure SQL-Datenbank gibt, sollten Sie nach Möglichkeit kennwortlose Verbindungen in Ihren Anwendungen priorisieren. Traditionelle Authentifizierungsmethoden, die Kennwörter oder geheime Schlüsseln verwenden, sind mit Sicherheitsrisiken und Komplikationen verbunden. Besuchen Sie den Hub für kennwortlose Verbindungen für Azure-Dienste, um mehr über die Vorteile der Umstellung auf kennwortlose Verbindungen zu erfahren. Im folgenden Tutorial wird erläutert, wie eine vorhandene Python-Anwendung zur Verbindungsherstellung mit Azure SQL-Datenbank migriert werden kann, um kennwortlose Verbindungen anstelle einer Lösung mit Benutzername und Kennwort zu verwenden.

Konfigurieren der Azure SQL-Datenbank

Kennwortlose Verbindungen verwenden die Microsoft Entra-Authentifizierung für die Verbindung zu Azure-Diensten, einschließlich Azure SQL Database. Mit der Microsoft Entra-Authentifizierung können Sie Identitäten an einem zentralen Ort verwalten und so die Rechteverwaltung vereinfachen. Weitere Informationen finden Sie unter Konfigurieren der Microsoft Entra-Authentifizierung in einer Azure SQL-Datenbank.

Stellen Sie für diesen Migrationsleitfaden sicher, dass Ihrer Instanz von Azure SQL-Datenbank ein*e Azure AD-Administrator*in zugewiesen ist.

  1. Navigieren Sie zur Microsoft EntraSeite Ihres logischen Servers.

  2. Wählen Sie Administrator festlegen aus, um den Bereich Microsoft Entra ID zu öffnen.

  3. Suchen Sie im Flyout-Menü Microsoft Entra ID nach dem Benutzer, den Sie als Administrator zuweisen möchten.

  4. Wählen Sie den Benutzer bzw. die Benutzerin und dann Auswählen aus.

    A screenshot showing how to enable Microsoft Entra admin.

Konfigurieren Ihrer lokalen Entwicklungsumgebung

Kennwortlose Verbindungen können so konfiguriert werden, dass sie sowohl für lokale als auch für in Azure gehostete Umgebungen funktionieren. In diesem Abschnitt wenden Sie Konfigurationen an, damit sich einzelne Benutzer*innen bei Azure SQL-Datenbank für die lokale Entwicklung authentifizieren können.

Anmelden bei Azure

Stellen Sie bei der lokalen Entwicklung sicher, dass Sie mit demselben Azure AD-Konto angemeldet sind, das Sie für den Zugriff auf Azure SQL-Datenbank verwenden möchten. Sie können sich über gängige Entwicklungstools wie die Azure-Befehlszeilenschnittstelle (CLI) oder Azure PowerShell authentifizieren. Die Entwicklungstools, mit denen Sie sich authentifizieren können, variieren je nach Sprache.

Melden Sie sich mit dem folgenden Befehl über die Azure-Befehlszeilenschnittstelle bei Azure an:

az login

Erstellen von Datenbankbenutzer*innen und Zuweisen von Rollen

Erstellen Sie einen Benutzer bzw. eine Benutzerin in Azure SQL-Datenbank. Die Benutzer*innen sollten dem Azure-Konto entsprechen, das Sie zur lokalen Anmeldung im Abschnitt Anmeldung bei Azure verwendet haben.

  1. Navigieren Sie im Azure-Portal zu Ihrer SQL-Datenbank-Instanz, und wählen Sie Abfrage-Editor (Vorschau) aus.

  2. Wählen Sie auf der rechten Seite des Bildschirms Weiter als <your-username> aus, um sich mit Ihrem Konto bei der Datenbank anzumelden.

  3. Führen Sie in der Abfrage-Editor-Ansicht die folgenden T-SQL-Befehle aus:

    CREATE USER [user@domain] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [user@domain];
    ALTER ROLE db_datawriter ADD MEMBER [user@domain];
    ALTER ROLE db_ddladmin ADD MEMBER [user@domain];
    GO
    

    A screenshot showing how to use the Azure Query editor.

    Durch das Ausführen dieser Befehle wird dem angegebenen Konto die Rolle SQL-DB-Mitwirkender zugewiesen. Diese Rolle erlaubt es der Identität, die Daten und das Schema Ihrer Datenbank zu lesen, zu schreiben und zu ändern. Weitere Informationen zu den zugewiesenen Rollen finden Sie unter Feste Datenbankrollen.

Aktualisieren der lokalen Verbindungskonfiguration

Vorhandener Anwendungscode, der mit dem Python SQL-Treiber – pyodbc eine Verbindung mit Azure SQL-Datenbank herstellt, funktioniert mit geringfügigen Änderungen auch mit kennwortlosen Verbindungen. Der folgende Code funktioniert beispielsweise sowohl mit der SQL-Authentifizierung als auch mit kennwortlosen Verbindungen, wenn er lokal ausgeführt und in Azure App Service bereitgestellt wird.

import os
import pyodbc, struct
from azure.identity import DefaultAzureCredential

connection_string = os.environ["AZURE_SQL_CONNECTIONSTRING"]

def get_all():
    with get_conn() as conn:
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM Persons")
        # Do something with the data
    return

def get_conn():
    credential = DefaultAzureCredential(exclude_interactive_browser_credential=False)
    token_bytes = credential.get_token("https://database.windows.net/.default").token.encode("UTF-16-LE")
    token_struct = struct.pack(f'<I{len(token_bytes)}s', len(token_bytes), token_bytes)
    SQL_COPT_SS_ACCESS_TOKEN = 1256  # This connection option is defined by microsoft in msodbcsql.h
    conn = pyodbc.connect(connection_string, attrs_before={SQL_COPT_SS_ACCESS_TOKEN: token_struct})
    return conn

Tipp

In diesem Beispielcode wird mithilfe der App Service-Umgebungsvariable WEBSITE_HOSTNAME ermittelt, in welcher Umgebung der Code ausgeführt wird. Für andere Bereitstellungsszenarien stehen Ihnen andere Umgebungsvariablen zur Verfügung, mit denen Sie die Umgebung bestimmen können.

Verwenden Sie zum Aktualisieren der referenzierten Verbindungszeichenfolge (AZURE_SQL_CONNECTIONSTRING) für die lokale Entwicklung das Format für kennwortlose Verbindungszeichenfolgen:

Driver={ODBC Driver 18 for SQL Server};Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30

Testen der App

Führen Sie Ihre App lokal aus, und überprüfen Sie, ob die Verbindungen mit Azure SQL-Datenbank wie erwartet funktionieren. Denken Sie daran, dass es einige Minuten dauern kann, bis die Azure-Benutzer*innen und -Rollen in der Azure-Umgebung weitergegeben werden. Ihre Anwendung ist jetzt so konfiguriert, dass sie lokal ausgeführt werden kann, ohne dass Entwickler*innen Geheimnisse in der Anwendung selbst verwalten müssen.

Konfigurieren der Azure-Hostingumgebung

Sobald Ihre App für die lokale Verwendung kennwortloser Verbindungen konfiguriert ist, kann sich derselbe Code nach der Bereitstellung in Azure bei Azure SQL-Datenbank authentifizieren. In den folgenden Abschnitten wird erläutert, wie Sie eine bereitgestellte Anwendung so konfigurieren, dass sie mithilfe einer verwalteten Identität eine Verbindung mit Azure SQL-Datenbank herstellt. Verwaltete Identitäten bieten eine automatisch verwaltete Identität in Microsoft Entra ID (früher Azure Active Directory), die Anwendungen verwenden können, wenn sie sich mit Ressourcen verbinden, die die Microsoft Entra-Authentifizierung unterstützen. Weitere Informationen zu verwalteten Identitäten:

Erstellen Sie die verwaltete Identität

Erstellen Sie eine benutzerseitig zugewiesene verwaltete Identität über das Azure-Portal oder mithilfe der Azure CLI. Ihre Anwendung verwendet die Identität zur Identifizierung bei anderen Diensten.

  1. Suchen Sie oben im Azure-Portal nach Verwaltete Identitäten. Wählen Sie das Ergebnis Verwaltete Identitäten aus.
  2. Wählen Sie oben auf der Übersichtsseite Verwaltete Identitäten die Option + Erstellen aus.
  3. Geben Sie auf der Registerkarte Grundlagen die folgenden Werte ein:
    • Abonnement: Wählen Sie Ihr gewünschtes Abonnement aus.
    • Ressourcengruppe: Wählen Sie die gewünschte Ressourcengruppe aus.
    • Region: Wählen Sie eine Region in Ihrer Nähe aus.
    • Name: Geben Sie einen erkennbaren Namen für Ihre Identität ein, z. B. MigrationIdentity.
  4. Wählen Sie am unteren Rand der Seite die Option Bewerten + erstellen aus.
  5. Wenn die Überprüfungen abgeschlossen sind, wählen Sie Erstellen aus. Azure erstellt eine neue benutzerseitig zugewiesene Identität.

Nachdem die Ressource erstellt wurde, wählen Sie Zu Ressource wechseln aus, um die Details der verwalteten Identität anzuzeigen.

A screenshot showing how to create a managed identity using the Azure portal.

Zuordnen der verwalteten Identität zu Ihrer Web-App

Konfigurieren Sie Ihre Web-App so, dass sie die von Ihnen erstellte benutzerseitig zugewiesene verwaltete Identität verwendet.

Führen Sie im Azure-Portal die folgenden Schritte aus, um Ihrer App die benutzerseitig zugewiesene verwaltete Identität zuzuordnen. Dieselben Schritte gelten für die folgenden Azure-Dienste:

  • Azure Spring Apps
  • Azure Container Apps
  • Virtuelle Azure-Computer
  • Azure Kubernetes Service
  • Navigieren Sie zur Übersichtsseite Ihrer Web-App.
  1. Wählen Sie im linken Navigationsbereich Identität aus.

  2. Wechseln Sie auf der Seite Identität zur Registerkarte Benutzerseitig zugewiesen.

  3. Wählen Sie + Hinzufügen aus, um das Flyout Benutzerseitig zugewiesene verwaltete Identität hinzufügen zu öffnen.

  4. Wählen Sie das Abonnement aus, das Sie vorher zum Erstellen der Identität verwendet haben.

  5. Suchen Sie anhand des Namens nach der MigrationIdentity, und wählen Sie sie aus den Suchergebnissen aus.

  6. Wählen Sie Hinzufügen aus, um die Identität Ihrer App zuzuordnen.

    A screenshot showing how to assign a managed identity.

Erstellen von Datenbankbenutzer*innen für die Identität und Zuweisen von Rollen

Erstellen Sie einen SQL-Datenbank-Benutzer bzw. eine SQL-Datenbank-Benutzerin, der bzw. die der benutzerseitig zugewiesenen verwalteten Identität zugeordnet ist. Weisen Sie dem Benutzer bzw. der Benutzerin die erforderlichen SQL-Rollen zu, damit Ihre App die Daten und das Schema Ihrer Datenbank lesen, schreiben und ändern kann.

  1. Navigieren Sie im Azure-Portal zu Ihrer SQL-Datenbank-Instanz, und wählen Sie Abfrage-Editor (Vorschau) aus.

  2. Wählen Sie auf der rechten Seite des Bildschirms Weiter als <username> aus, um sich mit Ihrem Konto bei der Datenbank anzumelden.

  3. Führen Sie in der Abfrage-Editor-Ansicht die folgenden T-SQL-Befehle aus:

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

    A screenshot showing how to use the Azure Query editor to create a SQL user for a managed identity.

    Wenn Sie diese Befehle ausführen, wird der benutzerseitig zugewiesenen verwalteten Identität die Rolle SQL-DB-Mitwirkender zugewiesen. Diese Rolle erlaubt es der Identität, die Daten und das Schema Ihrer Datenbank zu lesen, zu schreiben und zu ändern.


Wichtig

Gehen Sie beim Zuweisen von Datenbankbenutzerrollen in Produktionsumgebungen von Unternehmen vorsichtig vor. In diesen Szenarien sollte die App nicht alle Vorgänge mit einer einzelnen Identität mit erhöhten Rechten ausführen. Versuchen Sie, das Prinzip der geringsten Rechte zu implementieren, indem Sie mehrere Identitäten mit bestimmten Berechtigungen für bestimmte Aufgaben konfigurieren.

Weitere Informationen zum Konfigurieren von Datenbankrollen und der Sicherheit finden Sie in den folgenden Ressourcen:

Aktualisieren der Verbindungszeichenfolge

Aktualisieren Sie Ihre Azure-App-Konfiguration, um das Zeichenfolgenformat für kennwortlose Verbindungen zu verwenden. Das Format sollte dasselbe sein, das in Ihrer lokalen Umgebung verwendet wird.

Verbindungszeichenfolgen können als Umgebungsvariablen in Ihrer App-Hostingumgebung gespeichert werden. Die folgenden Anweisungen konzentrieren sich auf App Service, aber andere Azure-Hostingdienste bieten ähnliche Konfigurationen.

Driver={ODBC Driver 18 for SQL Server};Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30

<database-server-name> steht für den Namen Ihres Azure SQL-Datenbank-Servers und <database-name> für den Namen Ihrer Azure SQL-Datenbank.

Erstellen einer App-Einstellung für die Client-ID der verwalteten Identität

Um die benutzerseitig zugewiesene verwaltete Identität zu verwenden, erstellen Sie eine AZURE_CLIENT_ID-Umgebungsvariable und legen sie auf die Client-ID der verwalteten Identität fest. Sie können diese Variable im Azure-Portal im Abschnitt Konfiguration Ihrer App festlegen. Die Client-ID finden Sie im Azure-Portal im Abschnitt Übersicht der verwalteten Identitätsressource.

Speichern Sie Ihre Änderungen, und starten Sie die Anwendung neu, falls dies nicht automatisch geschieht.

Hinweis

Der in diesem Migrationsleitfaden gezeigte Beispielverbindungscode verwendet bei der Bereitstellung die Klasse DefaultAzureCredential. Insbesondere wird „DefaultAzureCredential“ verwendet, ohne die Client-ID der benutzerseitig zugewiesenen verwalteten Identität an den Konstruktor zu übergeben. In diesem Szenario kann als Fallback die Umgebungsvariable AZURE_CLIENT_ID überprüft werden. Wenn die Umgebungsvariable AZURE_CLIENT_ID nicht vorhanden ist, wird eine systemseitig zugewiesene verwaltete Identität verwendet (sofern konfiguriert).

Wenn Sie die Client-ID der verwalteten Identität im DefaultAzureCredential-Konstruktor übergeben, kann der Verbindungscode weiterhin lokal verwendet und bereitgestellt werden, da der Authentifizierungsprozess auf die interaktive Authentifizierung im lokalen Szenario zurückfällt. Weitere Informationen finden Sie unter Azure Identity-Clientbibliothek für Python.

Testen der App

Testen Sie Ihre App, um sicherzustellen, dass noch alles funktioniert. Es kann einige Minuten dauern, bis alle Änderungen in Ihrer Azure-Umgebung weitergegeben werden.

Nächste Schritte

In diesem Tutorial haben Sie gelernt, wie Sie eine Anwendung zu kennwortlosen Verbindungen migrieren.

Sie können die folgenden Ressourcen lesen, um die in diesem Artikel erläuterten Konzepte ausführlicher zu erkunden: