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.
In diesem Artikel wird erläutert, wie Sie von herkömmlichen Authentifizierungsmethoden zu sichereren, kennwortlosen Verbindungen mit Azure SQL-Datenbank migrieren.
Anwendungsanforderungen an azure SQL-Datenbank müssen authentifiziert werden. Azure SQL-Datenbank bietet verschiedene Möglichkeiten, wie Apps eine sichere Verbindung herstellen können. Eine der Möglichkeiten besteht darin, Kennwörter zu verwenden. Sie sollten jedoch nach Möglichkeit kennwortlose Verbindungen in Ihren Anwendungen priorisieren.
Vergleichen von Authentifizierungsoptionen
Wenn sich die Anwendung bei der Azure SQL-Datenbank authentifiziert, stellt sie ein Benutzernamen- und Kennwortpaar bereit, um eine Verbindung mit der Datenbank herzustellen. Je nachdem, wo die Identitäten gespeichert sind, gibt es zwei Authentifizierungstypen: Microsoft Entra-Authentifizierung und Azure SQL-Datenbankauthentifizierung.
Microsoft Entra-Authentifizierung
Die Microsoft Entra-Authentifizierung ist ein Mechanismus zum Herstellen einer Verbindung mit der Azure SQL-Datenbank mithilfe von Identitäten, die in der Microsoft Entra-ID definiert sind. Mithilfe Microsoft Entra Authentifizierung können Sie Datenbankbenutzeridentitäten und andere Microsoft-Dienste an einem zentralen Ort verwalten, wodurch die Berechtigungsverwaltung vereinfacht wird.
Die Verwendung der Microsoft Entra-ID für die Authentifizierung bietet die folgenden Vorteile:
- Authentifizierung von Benutzern über Azure Services hinweg auf einheitliche Weise.
- Verwaltung von Kennwortrichtlinien und Kennwortrotation an einem zentralen Ort.
- Mehrere Von Microsoft Entra ID unterstützte Authentifizierungsformen, die die Notwendigkeit zum Speichern von Kennwörtern vermeiden können.
- Kunden können Datenbankberechtigungen mithilfe externer Gruppen (Microsoft Entra ID) verwalten.
- Die Microsoft Entra-Authentifizierung verwendet Azure SQL-Datenbankbenutzer, um Identitäten auf Datenbankebene zu authentifizieren.
- Unterstützung der tokenbasierten Authentifizierung für Anwendungen, die eine Verbindung mit azure SQL-Datenbank herstellen.
Azure SQL-Datenbankauthentifizierung
Sie können Konten in der Azure SQL-Datenbank erstellen. Wenn Sie Kennwörter als Anmeldeinformationen für die Konten verwenden, speichert die sys.database_principals Tabelle diese Anmeldeinformationen. Da Azure SQL-Datenbank diese Kennwörter speichert, müssen Sie den Wechsel der Kennwörter selbst vornehmen.
Obwohl Sie mithilfe von Kennwörtern eine Verbindung mit Azure SQL-Datenbank herstellen können, verwenden Sie sie mit Vorsicht. Achten Sie darauf, die Kennwörter niemals an einem unsicheren Speicherort verfügbar zu machen. Jeder, der Zugriff auf die Kennwörter erhält, kann sich authentifizieren. Wenn Sie beispielsweise versehentlich eine Verbindungszeichenfolge in die Versionsverwaltung einchecken, sie per ungesicherter E-Mail versenden, in den falschen Chat einfügen oder sie von jemandem einsehen lassen, der keine Berechtigung dafür haben sollte, kann ein böswilliger Benutzer auf die Anwendung zugreifen. Erwägen Sie stattdessen, Ihre Anwendung so zu aktualisieren, dass kennwortlose Verbindungen verwendet werden.
Einführung kennwortloser Verbindungen
Mit einer kennwortlosen Verbindung können Sie eine Verbindung mit Azure-Diensten herstellen, ohne Anmeldeinformationen im Anwendungscode, den zugehörigen Konfigurationsdateien oder in Umgebungsvariablen zu speichern.
Viele Azure-Dienste unterstützen kennwortlose Verbindungen, z. B. über Azure Managed Identity. Diese Techniken bieten robuste Sicherheitsfeatures, die Sie mithilfe von DefaultAzureCredential aus den Azure Identity-Clientbibliotheken implementieren können. In diesem Tutorial lernen Sie, wie Sie eine vorhandene Anwendung so aktualisieren, dass sie DefaultAzureCredential anstelle von Alternativen wie Verbindungszeichenfolgen verwendet.
DefaultAzureCredential unterstützt mehrere Authentifizierungsmethoden und bestimmt automatisch, welche zur Laufzeit verwendet werden sollen. Mit diesem Ansatz kann Ihre App unterschiedliche Authentifizierungsmethoden in verschiedenen Umgebungen (lokaler Entwicklungs- und Produktionsumgebung) verwenden, ohne umgebungsspezifischen Code zu implementieren.
Die Reihenfolge und die Orte, an denen DefaultAzureCredential nach Anmeldeinformationen sucht, sind in der Übersicht über die Azure Identity-Bibliothek zu finden. Wenn Sie beispielsweise lokal arbeiten, wird sich DefaultAzureCredential in der Regel mit dem Konto authentifizieren, mit dem der Entwickler sich bei Visual Studio angemeldet hat. Wenn die App in Azure bereitgestellt wird, DefaultAzureCredential wechselt automatisch zur Verwendung einer verwalteten Identität. Für diesen Übergang sind keine Codeänderungen erforderlich.
Um sicherzustellen, dass Verbindungen kennwortlos sind, müssen Sie sowohl die lokale Entwicklung als auch die Produktionsumgebung berücksichtigen. Wenn an beiden Stellen eine Verbindungszeichenfolge erforderlich ist, ist die Anwendung nicht kennwortlos.
In Ihrer lokalen Entwicklungsumgebung können Sie sich mit Azure CLI, Azure PowerShell, Visual Studio oder Azure-Plug-Ins für Visual Studio Code oder IntelliJ authentifizieren. In diesem Fall können Sie diese Anmeldeinformationen in Ihrer Anwendung verwenden, anstatt Eigenschaften zu konfigurieren.
Wenn Sie Anwendungen in einer Azure-Hostingumgebung bereitstellen, z. B. einem virtuellen Computer, können Sie verwaltete Identitäten in dieser Umgebung zuweisen. Anschließend müssen Sie keine Anmeldeinformationen angeben, um eine Verbindung mit Azure-Diensten herzustellen.
Hinweis
Eine verwaltete Identität stellt eine Sicherheitsidentität bereit, die eine App oder einen Dienst darstellt. Die Identität wird von der Azure-Plattform verwaltet, und Sie müssen keine Geheimnisse bereitstellen oder erneuern. Weitere Informationen zu verwalteten Identitäten finden Sie in der Übersichtsdokumentation .
Hinweis
Da der JDBC-Treiber für Azure SQL-Datenbank kennwortlose Verbindungen in lokalen Umgebungen derzeit noch nicht unterstützt, konzentriert sich dieser Artikel ausschließlich auf Anwendungen, die in Azure gehosteten Umgebungen bereitgestellt werden, und erläutert, wie diese für die Verwendung kennwortloser Verbindungen migriert werden können.
Migrieren einer vorhandenen Anwendung zur Verwendung kennwortloser Verbindungen
In den folgenden Schritten wird erläutert, wie Sie eine vorhandene Anwendung migrieren, um kennwortlose Verbindungen anstelle einer kennwortbasierten Lösung zu verwenden.
0) Vorbereiten der Arbeitsumgebung
Verwenden Sie zunächst den folgenden Befehl, um einige Umgebungsvariablen einzurichten.
export AZ_RESOURCE_GROUP=<YOUR_RESOURCE_GROUP>
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=demo
export CURRENT_USERNAME=$(az ad signed-in-user show --query userPrincipalName --output tsv)
export CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query id --output tsv)
Ersetzen Sie die Platzhalter durch die folgenden Werte, die in diesem Artikel verwendet werden:
-
<YOUR_RESOURCE_GROUP>: Der Name der Ressourcengruppe für Ihre Ressourcen. -
<YOUR_DATABASE_SERVER_NAME>: Der Name Ihres Azure SQL-Datenbankservers. Es sollte in Azure einzigartig sein.
1) Konfigurieren der Azure SQL-Datenbank
1.1) Aktivieren der microsoft Entra ID-basierten Authentifizierung
Wenn Sie Microsoft Entra ID Zugriff mit Azure SQL-Datenbank verwenden möchten, legen Sie zuerst den Microsoft Entra Administratorbenutzer fest. Nur ein Microsoft Entra Administratorbenutzer kann Benutzer für Microsoft Entra ID basierte Authentifizierung erstellen oder aktivieren.
Wenn Sie Azure CLI verwenden, führen Sie den folgenden Befehl aus, um sicherzustellen, dass er über ausreichende Berechtigungen verfügt:
az login --scope https://graph.microsoft.com/.default
Führen Sie dann den folgenden Befehl aus, um den Microsoft Entra Administrator festzulegen:
az sql server ad-admin create \
--resource-group $AZ_RESOURCE_GROUP \
--server $AZ_DATABASE_SERVER_NAME \
--display-name $CURRENT_USERNAME \
--object-id $CURRENT_USER_OBJECTID
Mit diesem Befehl wird der Microsoft Entra Administrator auf den aktuellen angemeldeten Benutzer festgelegt.
Hinweis
Sie können nur einen Microsoft Entra-Administrator pro Azure SQL-Datenbankserver erstellen. Wenn Sie einen anderen Administrator auswählen, wird der vorhandene Microsoft Entra Administrator überschrieben, der für den Server konfiguriert ist.
2) Migrieren des App-Codes zur Verwendung kennwortloser Verbindungen
Führen Sie als Nächstes die folgenden Schritte aus, um Ihren Code so zu aktualisieren, dass kennwortlose Verbindungen verwendet werden. Obwohl konzeptionell ähnlich, verwendet jede Sprache unterschiedliche Implementierungsdetails.
Fügen Sie in Ihrem Projekt den folgenden Verweis auf das
azure-identityPaket hinzu. Diese Bibliothek enthält alle Entitäten, die zum Implementieren kennwortloser Verbindungen erforderlich sind.<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.5.4</version> </dependency>Aktivieren Sie die Authentifizierung über die von Microsoft Entra verwaltete Identität in der JDBC-URL.v Identifizieren Sie die Stellen in Ihrem Code, die derzeit ein
java.sql.Connectionerstellen, um eine Verbindung mit der Azure SQL-Datenbank herzustellen. Aktualisieren Sie Ihren Code so, dass er mit dem folgenden Beispiel übereinstimmt:String url = "jdbc:sqlserver://$AZ_DATABASE_SERVER_NAME.database.windows.net:1433;databaseName=$AZ_DATABASE_NAME;authentication=ActiveDirectoryMSI;" Connection con = DriverManager.getConnection(url);Ersetzen Sie die beiden
$AZ_DATABASE_SERVER_NAMEVariablen und eine$AZ_DATABASE_NAMEVariable durch die Werte, die Sie am Anfang dieses Artikels konfiguriert haben.Entfernen Sie die
userundpasswordaus der JDBC-URL.
3) Konfigurieren der Azure-Hostingumgebung
Nachdem Sie Ihre Anwendung für die Verwendung kennwortloser Verbindungen konfiguriert haben, kann sich derselbe Code bei Azure Diensten authentifizieren, nachdem Sie sie für Azure bereitgestellt haben. Beispielsweise kann eine Anwendung, die in einer Azure App Service-Instanz bereitgestellt wird, die über eine verwaltete Identität verfügt, eine Verbindung mit Azure Storage herstellen.
In diesem Abschnitt führen Sie zwei Schritte aus, um ihrer Anwendung die Ausführung in einer Azure Hostingumgebung auf kennwortlose Weise zu ermöglichen:
- Weisen Sie die verwaltete Identität für Ihre Azure-Hostingumgebung zu.
- Weisen Sie der verwalteten Identität Rollen zu.
Hinweis
Azure stellt auch Service Connector bereit, der Ihnen dabei helfen kann, Ihren Hostingdienst mit SQL Server zu verbinden. Wenn Sie Service Connector zum Konfigurieren Ihrer Hostingumgebung verwenden, können Sie den Schritt zum Zuweisen von Rollen zu Ihrer verwalteten Identität weglassen, da Service Connector dies für Sie erledigt. Im folgenden Abschnitt wird beschrieben, wie Sie Ihre Azure-Hostingumgebung auf zwei Arten konfigurieren: eine über Service Connector und die andere, indem Sie jede Hostingumgebung direkt konfigurieren.
Von Bedeutung
Die Befehle von Service Connector erfordern Azure CLI 2.41.0 oder höher.
Zuweisen der verwalteten Identität mithilfe des Azure-Portals
Die folgenden Schritte zeigen, wie Sie eine vom System zugewiesene verwaltete Identität für verschiedene Webhostingdienste zuweisen. Die verwaltete Identität kann mithilfe der zuvor eingerichteten App-Konfigurationen sicher eine Verbindung mit anderen Azure Diensten herstellen.
Wählen Sie auf der Hauptübersichtsseite Ihrer Azure App Service-Instanz im Navigationsbereich "Identität" aus.
Stellen Sie auf der Registerkarte „Systemzugewiesen“ sicher, dass das Feld „Status“ auf „Ein“ gesetzt ist. Eine vom System zugewiesene Identität wird von Azure intern verwaltet und verwaltet Administrative Aufgaben für Sie. Die Details und IDs der Identität werden in Ihrem Code nie verfügbar gemacht.
Sie können auch verwaltete Identitäten in einer Azure-Hostingumgebung mithilfe der Azure CLI zuweisen.
Sie können einer Azure App Service-Instanz eine verwaltete Identität mit dem Befehl "az webapp identity assign" zuweisen , wie im folgenden Beispiel gezeigt:
export AZ_MI_OBJECT_ID=$(az webapp identity assign \
--resource-group $AZ_RESOURCE_GROUP \
--name <service-instance-name> \
--query principalId \
--output tsv)
Rollen der verwalteten Identität zuweisen
Erteilen Sie als Nächstes Berechtigungen für die verwaltete Identität, die Sie erstellt haben, um auf Ihre SQL-Datenbank zuzugreifen.
- Service Connector
- Azure CLI
Wenn Sie Ihre Dienste mithilfe von Service Connector verbunden haben, haben ihnen die Befehle im vorherigen Schritt bereits die Rolle zugewiesen, sodass Sie diesen Schritt überspringen können.
Testen der App
Nachdem Sie diese Codeänderungen vorgenommen haben, können Sie die Anwendung erstellen und erneut bereitstellen. Navigieren Sie dann im Browser zu Ihrer gehosteten Anwendung. Ihre App sollte eine erfolgreiche Verbindung mit der Azure SQL-Datenbank herstellen können. Es kann mehrere Minuten dauern, bis die Rollenzuweisungen über Ihre Azure Umgebung verteilt werden. Ihre Anwendung ist jetzt so konfiguriert, dass sie sowohl lokal als auch in einer Produktionsumgebung ausgeführt wird, ohne dass entwickler geheime Schlüssel in der Anwendung selbst verwalten müssen.
Nächste Schritte
In diesem Lernprogramm haben Sie gelernt, wie Sie eine Anwendung zu kennwortlosen Verbindungen migrieren.
Weitere Informationen zu den in diesem Artikel erläuterten Konzepten finden Sie in den folgenden Ressourcen: