Spring Cloud Azure MySQL-Unterstützung
Dieser Artikel bezieht sich auf: ✔️ Version 4.14.0 ✔️ Version 5.8.0
Azure Database for MySQL ist ein relationaler Datenbankdienst, der von der MySQL Community Edition unterstützt wird. Sie können entweder Single Server oder Flexible Server verwenden, um eine MySQL-Datenbank in Azure zu hosten. Es ist ein vollständig verwaltetes Datenbank-as-a-Service-Angebot, das unternehmenskritische Workloads mit vorhersehbarer Leistung und dynamischer Skalierbarkeit verarbeiten kann.
Von version 4.5.0
, Spring Cloud Azure-Support s verschiedene Arten von Anmeldeinformationen für die Authentifizierung bei Azure Database for 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.0
.
Wichtige Funktionen
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 Azure Database for MySQL unter Verwendung von Identitäten, die in Microsoft Entra ID definiert sind. Mit der 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 einen der folgenden Arten von Anmeldeinformationen, je nach Anwendungsauthentifizierungskonfiguration:
ClientSecretCredential
ClientCertificateCredential
UsernamePasswordCredential
ManagedIdentityCredential
DefaultAzureCredential
Wenn keine dieser Arten von Anmeldeinformationen gefunden wird, werden die DefaultAzureCredential
Anmeldeinformationen aus Anwendungseigenschaften, Umgebungsvariablen, verwalteten Identitäten oder der IDE abgerufen. Weitere Informationen finden Sie unter Spring Cloud Azure-Authentifizierung.
Das folgende allgemeine Diagramm fasst zusammen, wie die Authentifizierung mit der OAuth-Anmeldeinformationsauthentifizierung mit Azure Database for MySQL funktioniert. Die Pfeile zeigen die Kommunikationswege.
Konfiguration
Spring Cloud Azure für MySQL unterstützt die folgenden beiden Konfigurationsoptionen:
Die globalen Authentifizierungskonfigurationsoptionen von
credential
undprofile
mit 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 " client-id festgelegt" 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 zulässigen tenant-id Werte sind: common , , organizations , consumers , oder die Mandanten-ID. |
Setup von Abhängigkeiten
Fügen Sie dem Projekt die folgende Abhängigkeit hinzu. Dies schließt automatisch die spring-boot-starter
Abhängigkeit in Ihr Projekt transitiv ein.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId>
</dependency>
Hinweis
Kennwortlose Verbindungen werden seit Version 4.5.0
unterstützt.
Denken Sie daran, die BOM spring-cloud-azure-dependencies
zusammen mit der oben genannten Abhängigkeit hinzuzufügen. Weitere Informationen finden Sie im Abschnitt "Erste Schritte " des Azure-Entwicklerhandbuchs für Spring Cloud.
Grundlegende Verwendung
Die folgenden Abschnitte zeigen die klassischen Anwendungsverwendungsszenarien für Spring Boot.
Wichtig
Kennwortlose Verbindung verwendet die Microsoft Entra-Authentifizierung. Um die Microsoft Entra-Authentifizierung zu verwenden, sollten Sie zuerst den Microsoft Entra-Administratorbenutzer festlegen. 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 DataDATENSPEICHERUNG mit Azure Database for MySQL.
Verbinden lokal ohne Kennwort in Azure MySQL
Informationen zum Erstellen von Benutzern und Erteilen von Berechtigungen finden Sie im Abschnitt "Erstellen eines Nicht-Administratorbenutzers von MySQL und Erteilen von Berechtigung " im Abschnitt "Use Spring Data SHAPE with Azure Database for MySQL".
Konfigurieren Sie die folgenden Eigenschaften in der Datei application.yml :
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
Verbinden mit einem Dienstprinzipal an Azure MySQL
Erstellen Sie einen Microsoft Entra-Benutzer für den Dienstprinzipal, und erteilen Sie berechtigungen.
Verwenden Sie zunächst die folgenden Befehle, um einige 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 dann ein SQL-Skript namens create_ad_user_sp.sql zum Erstellen eines Nicht-Administratorbenutzers. Fügen Sie den folgenden Inhalt hinzu, und speichern Sie das Skript 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; EOF
Verwenden 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.sql
Verwenden Sie nun den folgenden Befehl, um die temporäre SQL-Skriptdatei zu entfernen:
rm create_ad_user_sp.sql
Konfigurieren Sie die folgenden Eigenschaften in der Datei application.yml :
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
Hinweis
Die zulässigen tenant-id
Werte sind: common
, , organizations
, consumers
, oder die Mandanten-ID. Weitere Informationen zu diesen Werten finden Sie im Abschnitt "Verwendet" des falschen Endpunkts (persönliche und Organisationskonten) des Fehlers AADSTS50020 – Benutzerkonto des Identitätsanbieters ist nicht im Mandanten vorhanden. Informationen zum Konvertieren Ihrer Einzelmandanten-App finden Sie unter Konvertieren einer Einzelmandanten-App in multitenant auf Microsoft Entra ID.
Verbinden in Azure MySQL mit verwalteter Identität in Azure Spring Apps
Informationen zum Aktivieren der verwalteten Identität finden Sie im Abschnitt "Zuweisen der verwalteten Identität mithilfe des abschnitts "Azure-Portal Migrieren einer Anwendung", um kennwortlose Verbindungen mit Azure Database for MySQL zu verwenden.
Informationen zum Erteilen von Berechtigungen finden Sie im Abschnitt "Zuweisen von Rollen zum Zuweisen von Rollen zum Migrieren einer Anwendung", um kennwortlose Verbindungen mit Azure Database for MySQL zu verwenden.
Konfigurieren Sie die folgenden Eigenschaften in der Datei application.yml :
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
Beispiele
Siehe das Azure-spring-boot-samples-Repository auf GitHub.