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 spring Cloud Azure MySQL-Unterstützung verwenden, um Spring Boot-Anwendungen mit flexiblen Authentifizierungsoptionen zu Azure Database for MySQL zu verbinden, einschließlich kennwortloser Microsoft Entra Authentifizierung.
Von Version 4.5.0unterstützt Spring Cloud Azure verschiedene Arten von Anmeldeinformationen für die Authentifizierung bei Azure Database für MySQL Flexible Server.
Unterstützte MySQL-Version
Die aktuelle Version des Startprogramms sollte Azure Database für mySQL Flexible Server-Version 5.7 oder 8.0verwenden.
Kernfunktionen
Kennwortlose Verbindung
Die kennwortlose Verbindung verwendet die Microsoft Entra-Authentifizierung zum Herstellen einer Verbindung mit Azure-Diensten, ohne Anmeldeinformationen in der Anwendung, den Konfigurationsdateien oder in Umgebungsvariablen zu speichern. Die Microsoft Entra-Authentifizierung ist ein Mechanismus zum Herstellen einer Verbindung mit der Azure-Datenbank für MySQL mithilfe von In Microsoft Entra ID definierten Identitäten. Mithilfe Microsoft Entra Authentifizierung können Sie Datenbankbenutzeridentitäten und andere Microsoft-Dienste an einem zentralen Ort verwalten, wodurch die Berechtigungsverwaltung vereinfacht wird.
Funktionsweise
Spring Cloud Azure erstellt zunächst eine der folgenden Arten von Anmeldeinformationen, je nach Anwendungsauthentifizierungskonfiguration:
ClientSecretCredentialClientCertificateCredentialUsernamePasswordCredentialManagedIdentityCredentialDefaultAzureCredential
Wenn die Anwendung keine dieser Arten von Anmeldeinformationen findet, ruft sie Anmeldeinformationen von Anwendungseigenschaften, Umgebungsvariablen, verwalteten Identitäten oder der IDE ab DefaultAzureCredential . Weitere Informationen finden Sie unter Spring Cloud Azure authentication.
Das folgende allgemeine Diagramm fasst zusammen, wie die Authentifizierung mithilfe der OAuth-Anmeldeinformationsauthentifizierung mit Azure Database for MySQL funktioniert. Die Pfeile geben Kommunikationspfade an.
Konfiguration
Spring Cloud Azure für MySQL unterstützt die folgenden beiden Konfigurationsoptionen:
Die globalen Authentifizierungskonfigurationsoptionen von
credentialundprofilemit Präfixen vonspring.cloud.azure.Allgemeine Konfigurationsoptionen für Spring Cloud Azure für MySQL.
Die folgende Tabelle zeigt die allgemeinen Konfigurationsoptionen für Spring Cloud Azure für MySQL:
| Name | Beschreibung |
|---|---|
spring.datasource.azure.passwordless-enabled |
Gibt an, ob Kennwortlose Verbindungen mit Azure-Datenbanken mithilfe von OAuth2-Microsoft Entra-Tokenanmeldeinformationen aktiviert werden sollen. |
spring.datasource.azure.credential.client-certificate-password |
Kennwort der Zertifikatdatei. |
spring.datasource.azure.credential.client-certificate-path |
Pfad einer PEM-Zertifikatdatei, die beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll. |
spring.datasource.azure.credential.client-id |
Client-ID, die beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll. Dies ist eine legacy-Eigenschaft. |
spring.datasource.azure.credential.client-secret |
Geheimer Clientschlüssel, der beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll. Dies ist eine legacy-Eigenschaft. |
spring.datasource.azure.credential.managed-identity-enabled |
Gibt an, ob verwaltete Identität für die Authentifizierung mit Azure aktiviert werden soll. Wenn true und die client-id festgelegt ist, wird die Client-ID als vom Benutzer zugewiesene verwaltete Identitätsclient-ID verwendet. Der Standardwert ist false. |
spring.datasource.azure.credential.password |
Kennwort, das bei der Authentifizierung mit Benutzername/Kennwort mit Azure verwendet werden soll. |
spring.datasource.azure.credential.username |
Benutzername, der bei der Authentifizierung mit Benutzername/Kennwort mit Azure verwendet werden soll. |
spring.datasource.azure.profile.cloud-type |
Name der Azure-Cloud, mit der eine Verbindung hergestellt werden soll. |
spring.datasource.azure.profile.environment.active-directory-endpoint |
Der Microsoft Entra-Endpunkt, mit dem eine Verbindung hergestellt werden soll. |
spring.datasource.azure.profile.tenant-id |
Mandanten-ID für Azure-Ressourcen. Die für tenant-id zulässigen Werte sind: common, organizations, consumersoder die Mandanten-ID. |
Setup von Abhängigkeiten
Fügen Sie dem Projekt die folgende Abhängigkeit hinzu. Diese Abhängigkeit schließt automatisch die spring-boot-starter Abhängigkeit in Ihr Projekt ein.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId>
</dependency>
Anmerkung
Kennwortlose Verbindungen werden ab Version 4.5.0unterstützt.
Denken Sie daran, die BOM spring-cloud-azure-dependencies zusammen mit der vorherigen Abhängigkeit hinzuzufügen. Weitere Informationen finden Sie im Abschnitt Erste Schritte abschnitt des Spring Cloud Azure-Entwicklerhandbuchs.
Grundlegende Nutzung
Die folgenden Abschnitte zeigen die klassischen Anwendungsverwendungsszenarien für Spring Boot.
Wichtig
Kennwortlose Verbindung verwendet die Microsoft Entra-Authentifizierung. Wenn Sie Microsoft Entra Authentifizierung verwenden möchten, legen Sie zuerst den Microsoft Entra Administratorbenutzer fest. Nur ein Microsoft Entra-Administratorbenutzer kann Benutzer für die microsoft Entra ID-basierte Authentifizierung erstellen und aktivieren. Weitere Informationen finden Sie unter Verwenden von Spring Data SHAPE mit Azure Database for MySQL.
Lokales Herstellen einer Verbindung mit Azure MySQL ohne Kennwort
Informationen zum Erstellen von Benutzern und Erteilen von Berechtigungen finden Sie unter Erstellen eines Nicht-Administratorbenutzers von MySQL und Erteilen von Berechtigungen Abschnitt Verwenden von Spring Data DIRECTORY mit Azure Database for MySQL.
Konfigurieren Sie die folgenden Eigenschaften in Ihrer application.yml Datei:
spring: datasource: url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME} username: ${AZURE_MYSQL_AD_NON_ADMIN_USERNAME} azure: passwordless-enabled: true
Herstellen einer Verbindung mit Azure MySQL mithilfe eines Dienstprinzipals
Erstellen Sie einen Microsoft Entra Benutzer für den Dienstprinzipal, und erteilen Sie berechtigungen.
Verwenden Sie die folgenden Befehle, um Umgebungsvariablen einzurichten.
export AZURE_MYSQL_AZURE_AD_SP_USERID=$(az ad sp list \ --display-name <service_principal-name> \ --query '[0].appId' --output tsv) export AZURE_MYSQL_AZURE_AD_SP_USERNAME=<YOUR_MYSQL_AZURE_AD_USERNAME> export AZURE_MYSQL_SERVER_NAME=<YOUR_MYSQL_SERVER_NAME> export AZURE_MYSQL_DATABASE_NAME=<YOUR_MYSQL_DATABASE_NAME> export CURRENT_USERNAME=$(az ad signed-in-user show \ --query userPrincipalName \ --output tsv)Erstellen Sie ein SQL-Skript mit dem Namen create_ad_user_sp.sql zum Erstellen eines Nicht-Administratorbenutzers. Fügen Sie den folgenden Inhalt hinzu, und speichern Sie ihn lokal:
cat << EOF > create_ad_user_sp.sql SET aad_auth_validate_oids_in_tenant = OFF; CREATE AADUSER '$AZURE_MYSQL_AZURE_AD_SP_USERNAME' IDENTIFIED BY '$AZURE_MYSQL_AZURE_AD_SP_USERID'; GRANT ALL PRIVILEGES ON $AZURE_MYSQL_DATABASE_NAME.* TO '$AZURE_MYSQL_AZURE_AD_SP_USERNAME'@'%'; FLUSH privileges; EOFVerwenden Sie den folgenden Befehl, um das SQL-Skript auszuführen, um den Nicht-Administratorbenutzer von Microsoft Entra zu erstellen:
mysql -h $AZURE_MYSQL_SERVER_NAME.mysql.database.azure.com --user $CURRENT_USERNAME --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user_sp.sqlVerwenden Sie den folgenden Befehl, um die temporäre SQL-Skriptdatei zu entfernen:
rm create_ad_user_sp.sql
Konfigurieren Sie die folgenden Eigenschaften in Ihrer application.yml Datei:
spring: cloud: azure: credential: client-id: ${AZURE_CLIENT_ID} client-secret: ${AZURE_CLIENT_SECRET} profile: tenant-id: <tenant> datasource: url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME} username: ${AZURE_MYSQL_AD_SP_USERNAME} azure: passwordless-enabled: true
Anmerkung
Die zulässigen Werte sind tenant-id : common, , organizations, consumers, oder die Mandanten-ID. Weitere Informationen zu diesen Werten finden Sie im Abschnitt
Herstellen einer Verbindung mit Azure MySQL mit verwalteter Identität in Azure Spring Apps
Informationen zum Aktivieren der verwalteten Identität finden Sie unter Zuweisen der verwalteten Identität mithilfe des Azure-Portals Abschnitt Migrieren einer Anwendung, um kennwortlose Verbindungen mit Azure Database for MySQLzu verwenden.
Informationen zum Erteilen von Berechtigungen finden Sie im Abschnitt Zuweisen von Rollen zur verwalteten Identität Abschnitt Migrieren einer Anwendung, um kennwortlose Verbindungen mit Azure Database for MySQLzu verwenden.
Konfigurieren Sie die folgenden Eigenschaften in Ihrer application.yml Datei:
spring: datasource: url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME} username: ${AZURE_MYSQL_AD_MI_USERNAME} azure: passwordless-enabled: true
Proben
Sehen Sie sich das azure-spring-boot-samples Repository auf GitHub an.