Ondersteuning voor Spring Cloud Azure MySQL
Dit artikel is van toepassing op: ✔️ versie 4.14.0 ✔️ versie 5.8.0
Azure Database for MySQL is een relationele databaseservice die wordt mogelijk gemaakt door de MySQL-community-editie. U kunt enkele server of flexibele server gebruiken om een MySQL-database in Azure te hosten. Het is een volledig beheerde database-as-a-service-aanbieding die bedrijfskritieke workloads kan verwerken met voorspelbare prestaties en dynamische schaalbaarheid.
Van versie 4.5.0
ondersteuning voor Azure spring Cloud verschillende typen referenties voor verificatie bij Azure Database for MySQL Flexibele server.
Ondersteunde MySQL-versie
De huidige versie van de starter moet azure Database for MySQL Flexible Server-versie 5.7
of 8.0
.
Kernfuncties
Verbinding zonder wachtwoord
Verbinding zonder wachtwoord maakt gebruik van Microsoft Entra-verificatie voor het maken van verbinding met Azure-services zonder referenties op te slaan in de toepassing, de configuratiebestanden of in omgevingsvariabelen. Microsoft Entra-verificatie is een mechanisme voor het maken van verbinding met Azure Database for MySQL met behulp van identiteiten die zijn gedefinieerd in Microsoft Entra-id. Met Microsoft Entra-verificatie kunt u databasegebruikersidentiteiten en andere Microsoft-services op een centrale locatie beheren, waardoor het beheer van machtigingen wordt vereenvoudigd.
Hoe het werkt
Spring Cloud Azure bouwt eerst een van de volgende typen referenties, afhankelijk van de configuratie van de toepassingsverificatie:
ClientSecretCredential
ClientCertificateCredential
UsernamePasswordCredential
ManagedIdentityCredential
DefaultAzureCredential
Als geen van deze typen referenties wordt gevonden, worden de DefaultAzureCredential
referenties verkregen uit toepassingseigenschappen, omgevingsvariabelen, beheerde identiteiten of de IDE. Zie Spring Cloud Azure-verificatie voor meer informatie.
In het volgende diagram op hoog niveau ziet u hoe verificatie werkt met behulp van OAuth-referentieverificatie met Azure Database for MySQL. De pijlen geven communicatiepaden aan.
Configuratie
Spring Cloud Azure for MySQL ondersteunt de volgende twee configuratieniveaus:
De algemene verificatieconfiguratieopties van
credential
enprofile
met voorvoegsels vanspring.cloud.azure
.Algemene configuratieopties voor Spring Cloud Azure for MySQL.
In de volgende tabel ziet u de algemene configuratieopties voor Spring Cloud Azure for MySQL:
Name | Beschrijving |
---|---|
spring.datasource.azure.passwordless-enabled | Of u wachtwoordloze verbindingen met Azure-databases wilt inschakelen met behulp van OAuth2 Microsoft Entra-tokenreferenties. |
spring.datasource.azure.credential.client-certificate-password | Wachtwoord van het certificaatbestand. |
spring.datasource.azure.credential.client-certificate-path | Pad van een PEM-certificaatbestand dat moet worden gebruikt bij het uitvoeren van service-principalverificatie met Azure. |
spring.datasource.azure.credential.client-id | Client-id die moet worden gebruikt bij het uitvoeren van service-principalverificatie met Azure. Dit is een verouderde eigenschap. |
spring.datasource.azure.credential.client-secret | Clientgeheim dat moet worden gebruikt bij het uitvoeren van service-principal-verificatie met Azure. Dit is een verouderde eigenschap. |
spring.datasource.azure.credential.managed-identity-enabled | Of beheerde identiteit moet worden geverifieerd met Azure. Als waar is ingesteld en de client-id client-id is ingesteld, gebruikt u de client-id als door de gebruiker toegewezen client-id voor beheerde identiteiten. De standaardwaarde is onwaar. |
spring.datasource.azure.credential.password | Wachtwoord dat moet worden gebruikt bij het uitvoeren van verificatie van gebruikersnaam en wachtwoord met Azure. |
spring.datasource.azure.credential.username | Gebruikersnaam die moet worden gebruikt bij het uitvoeren van verificatie met gebruikersnaam en wachtwoord met Azure. |
spring.datasource.azure.profile.cloud-type | Naam van de Azure-cloud waarmee verbinding moet worden gemaakt. |
spring.datasource.azure.profile.environment.active-directory-endpoint | Het Microsoft Entra-eindpunt waarmee verbinding moet worden gemaakt. |
spring.datasource.azure.profile.tenant-id | Tenant-id voor Azure-resources. De toegestane tenant-id waarden zijn: common , organizations , consumers of de tenant-id. |
Afhankelijkheid instellen
Voeg de volgende afhankelijkheid toe aan uw project. Dit omvat automatisch de spring-boot-starter
afhankelijkheid in uw project transitief.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId>
</dependency>
Notitie
Verbindingen zonder wachtwoord worden ondersteund sinds versie 4.5.0
.
Vergeet niet om de bom spring-cloud-azure-dependencies
samen met de bovenstaande afhankelijkheid toe te voegen. Zie de sectie Aan de slag van de Ontwikkelaarshandleiding van Spring Cloud Azure voor meer informatie.
Basaal gebruik
In de volgende secties ziet u de klassieke gebruiksscenario's voor Spring Boot-toepassingen.
Belangrijk
Verbinding zonder wachtwoord maakt gebruik van Microsoft Entra-verificatie. Als u Microsoft Entra-verificatie wilt gebruiken, moet u eerst de Microsoft Entra-beheerder instellen. Alleen een Microsoft Entra-beheerder kan gebruikers maken en inschakelen voor verificatie op basis van Microsoft Entra-id's. Zie Spring Data JDBC gebruiken met Azure Database for MySQL voor meer informatie.
Verbinding maken lokaal naar Azure MySQL zonder wachtwoord
Als u gebruikers wilt maken en machtigingen wilt verlenen, raadpleegt u de sectie Een niet-beheerder maken in MySQL en verleent u machtigingen voor Spring Data JDBC met Azure Database for MySQL.
Configureer de volgende eigenschappen in uw bestand 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
Verbinding maken naar Azure MySQL met behulp van een service-principal
Maak een Microsoft Entra-gebruiker voor de service-principal en ververleent machtigingen.
Gebruik eerst de volgende opdrachten om enkele omgevingsvariabelen in te stellen.
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)
Maak vervolgens een SQL-script met de naam create_ad_user_sp.sql voor het maken van een gebruiker die geen beheerder is. Voeg de volgende inhoud toe en sla deze lokaal op:
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
Gebruik de volgende opdracht om het SQL-script uit te voeren om de niet-beheerdersgebruiker van Microsoft Entra te maken:
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
Gebruik nu de volgende opdracht om het tijdelijke SQL-scriptbestand te verwijderen:
rm create_ad_user_sp.sql
Configureer de volgende eigenschappen in uw bestand 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
Notitie
De toegestane tenant-id
waarden zijn: common
, organizations
, consumers
of de tenant-id. Zie voor meer informatie over deze waarden het verkeerde eindpunt (persoonlijke en organisatieaccounts) van Fout AADSTS50020 - Gebruikersaccount van id-provider bestaat niet in de tenant. Zie De app met één tenant converteren naar meerdere tenants in Microsoft Entra ID voor meer informatie over het converteren van uw app met één tenant.
Verbinding maken naar Azure MySQL met beheerde identiteit in Azure Spring Apps
Als u beheerde identiteit wilt inschakelen, raadpleegt u de sectie De beheerde identiteit toewijzen met behulp van de sectie Azure Portal van Een toepassing migreren om wachtwoordloze verbindingen met Azure Database for MySQL te gebruiken.
Als u machtigingen wilt verlenen, raadpleegt u de sectie Rollen toewijzen aan de sectie Beheerde identiteit van Een toepassing migreren om wachtwoordloze verbindingen met Azure Database for MySQL te gebruiken.
Configureer de volgende eigenschappen in uw bestand 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
Voorbeelden
Zie de opslagplaats azure-spring-boot-samples op GitHub.