Podpora Spring Cloud Azure MySQL

Tento článek se vztahuje na: ✔️ Verze 4.14.0 ✔️ verze 5.8.0

Azure Database for MySQL je relační databázová služba využívající komunitní edici MySQL. K hostování databáze MySQL v Azure můžete použít jednoúčelový server nebo flexibilní server. Jedná se o plně spravovanou nabídku databáze jako služby, která dokáže zpracovávat důležité úlohy s předvídatelným výkonem a dynamickou škálovatelností.

Z verze 4.5.0podpora Azure Spring Cloud různé typy přihlašovacích údajů pro ověřování na flexibilní server Azure Database for MySQL.

Podporovaná verze MySQL

Aktuální verze úvodní verze by měla používat flexibilní verzi 5.7 flexibilního serveru Azure Database for MySQL nebo 8.0.

Základní funkce

Připojení bez hesla

Připojení bez hesla používá ověřování Microsoft Entra pro připojení ke službám Azure bez uložení přihlašovacích údajů v aplikaci, konfiguračních souborech nebo v proměnných prostředí. Ověřování Microsoft Entra je mechanismus pro připojení ke službě Azure Database for MySQL pomocí identit definovaných v MICROSOFT Entra ID. Pomocí ověřování Microsoft Entra můžete spravovat identity uživatelů databáze a další služby Microsoft v centrálním umístění, což zjednodušuje správu oprávnění.

Jak to funguje

Spring Cloud Azure nejprve sestaví jeden z následujících typů přihlašovacích údajů v závislosti na konfiguraci ověřování aplikací:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential
  • DefaultAzureCredential

Pokud se nenajde žádný z těchto typů přihlašovacích údajů, DefaultAzureCredential přihlašovací údaje se získají z vlastností aplikace, proměnných prostředí, spravovaných identit nebo integrovaného vývojového prostředí( IDE). Další informace najdete v tématu Ověřování Spring Cloud v Azure.

Následující základní diagram shrnuje, jak funguje ověřování pomocí ověřování přihlašovacích údajů OAuth se službou Azure Database for MySQL. Šipky označují komunikační cesty.

Diagram showing Microsoft Entra authentication for MySQL.

Konfigurace

Spring Cloud Azure for MySQL podporuje následující dvě úrovně možností konfigurace:

  1. Možnosti konfigurace globálního credential ověřování a profile s předponami spring.cloud.azure.

  2. Běžné možnosti konfigurace Spring Cloud Pro MySQL v Azure for MySQL

Následující tabulka ukazuje běžné možnosti konfigurace Spring Cloud Azure for MySQL:

Název Popis
spring.datasource.azure.passwordless-enabled Určuje, jestli chcete povolit připojení bez hesla k databázím Azure pomocí přihlašovacích údajů tokenu OAuth2 Microsoft Entra.
spring.datasource.azure.credential.client-certificate-password Heslo souboru certifikátu.
spring.datasource.azure.credential.client-certificate-path Cesta k souboru certifikátu PEM, který se má použít při ověřování instančního objektu v Azure
spring.datasource.azure.credential.client-id ID klienta, které se má použít při ověřování instančního objektu v Azure. Toto je starší vlastnost.
spring.datasource.azure.credential.client-secret Tajný klíč klienta, který se má použít při ověřování instančního objektu v Azure. Toto je starší vlastnost.
spring.datasource.azure.credential.managed-identity-enabled Určuje, jestli se má spravovaná identita ověřit v Azure. Pokud je hodnota true a je client-id nastavena, použije ID klienta jako ID klienta přiřazené uživatelem spravované identity. Výchozí hodnota je false.
spring.datasource.azure.credential.password Heslo, které se má použít při ověřování pomocí uživatelského jména a hesla v Azure.
spring.datasource.azure.credential.username Uživatelské jméno, které se má použít při ověřování pomocí uživatelského jména a hesla v Azure.
spring.datasource.azure.profile.cloud-type Název cloudu Azure, ke kterému se chcete připojit.
spring.datasource.azure.profile.environment.active-directory-endpoint Koncový bod Microsoft Entra, ke kterému se chcete připojit.
spring.datasource.azure.profile.tenant-id ID tenanta pro prostředky Azure. Povolené hodnoty tenant-id jsou: common, organizations, consumersnebo ID tenanta.

Nastavení závislostí

Přidejte do projektu následující závislost. To bude automaticky zahrnovat spring-boot-starter závislost do vašeho projektu tranzitivně.

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId>
</dependency>

Poznámka:

Připojení bez hesla byla od verze 4.5.0podporována .

Nezapomeňte přidat kusovník spring-cloud-azure-dependencies spolu s výše uvedenou závislostí. Další informace najdete v části Začínáme s příručkou pro vývojáře Spring Cloud Azure.

Základní použití

Následující části ukazují klasické scénáře použití aplikace Spring Boot.

Důležité

Připojení bez hesla používá ověřování Microsoft Entra. Pokud chcete použít ověřování Microsoft Entra, měli byste nejprve nastavit uživatele správce Microsoft Entra. Pouze uživatel správce Microsoft Entra může vytvářet a povolovat uživatele pro ověřování založené na ID Microsoft Entra. Další informace najdete v tématu Použití Spring Data JDBC se službou Azure Database for MySQL.

Připojení do Azure MySQL místně bez hesla

  1. Pokud chcete vytvářet uživatele a udělovat oprávnění, přečtěte si část Vytvoření uživatele bez oprávnění správce MySQL a udělení oprávnění k použití Spring Data JDBC se službou Azure Database for MySQL.

  2. V souboru application.yml nakonfigurujte následující vlastnosti:

    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
    

Připojení do Azure MySQL pomocí instančního objektu

  1. Vytvořte uživatele Microsoft Entra pro instanční objekt a udělte oprávnění.

    1. Nejprve pomocí následujících příkazů nastavte některé proměnné prostředí.

      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)
      
    2. Potom vytvořte skript SQL s názvem create_ad_user_sp.sql pro vytvoření uživatele bez oprávnění správce. Přidejte následující obsah a uložte ho místně:

      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
      
    3. Spuštěním následujícího příkazu spusťte skript SQL a vytvořte uživatele Microsoft Entra bez oprávnění správce:

      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
      
    4. Teď pomocí následujícího příkazu odeberte dočasný soubor skriptu SQL:

      rm create_ad_user_sp.sql
      
  2. V souboru application.yml nakonfigurujte následující vlastnosti:

    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
    

Poznámka:

Povolené hodnoty tenant-id jsou: common, organizations, consumersnebo ID tenanta. Další informace o těchto hodnotách najdete v části Použití nesprávného koncového bodu (osobních účtů a účtů organizace) v části Chyba AADSTS50020 – Uživatelský účet od zprostředkovatele identity v tenantovi neexistuje. Informace o převodu aplikace s jedním tenantem najdete v tématu Převod aplikace s jedním tenantem na víceklienta na ID Microsoft Entra.

Připojení do Azure MySQL se spravovanou identitou v Azure Spring Apps

  1. Pokud chcete povolit spravovanou identitu, prohlédněte si část Přiřazení spravované identity pomocí portálu Azure Portal v části Migrace aplikace pro použití připojení bez hesel se službou Azure Database for MySQL.

  2. Pokud chcete udělit oprávnění, přečtěte si část Přiřazení rolí ke spravované identitě v části Migrace aplikace pro použití připojení bez hesel se službou Azure Database for MySQL.

  3. V souboru application.yml nakonfigurujte následující vlastnosti:

    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
    

Ukázky

Podívejte se na úložiště azure-spring-boot-samples na GitHubu.