共用方式為


Spring Cloud Azure MySQL 支援

適用於 MySQL 的 Azure 資料庫 是由 MySQL 社群版本提供的關係資料庫服務。 您可以使用單一伺服器或彈性伺服器在 Azure 中載入 MySQL 資料庫。 它是完全受控的資料庫即服務供應專案,可透過可預測的效能和動態延展性來處理任務關鍵性工作負載。

從版本 4.5.0,Spring Cloud Azure 支援各種類型的認證,以向適用於 MySQL 的 Azure 資料庫彈性伺服器進行驗證。

支援的 MySQL 版本

入門版的目前版本應該使用適用於 MySQL 的 Azure 資料庫彈性伺服器版本 5.78.0

核心功能

無密碼連線

無密碼聯機會使用 Microsoft Entra 驗證來連線到 Azure 服務,而不需將任何認證儲存在應用程式、其組態檔或環境變數中。 Microsoft Entra 驗證是一種機制,可使用 Microsoft Entra 識別符中定義的身分識別連線到適用於 MySQL 的 Azure 資料庫。 透過Microsoft Entra 驗證,您可以在集中位置管理資料庫使用者身分識別和其他Microsoft服務,以簡化許可權管理。

運作方式

Spring Cloud Azure 會根據應用程式驗證組態,先建置下列其中一種類型的認證:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential
  • DefaultAzureCredential

如果找不到這些類型的認證,則會從應用程式屬性、環境變數、受控識別或IDE取得 DefaultAzureCredential 認證。 如需詳細資訊,請參閱 Spring Cloud Azure 驗證

下列高階圖表摘要說明如何搭配適用於 MySQL 的 Azure 資料庫使用 OAuth 認證驗證進行驗證。 箭號表示通訊路徑。

顯示 MySQL Microsoft Entra 驗證的圖表。

配置

Spring Cloud Azure for MySQL 支援下列兩個層級的組態選項:

  1. credentialprofile 的全域驗證組態選項,前置詞為 spring.cloud.azure

  2. 適用於 MySQL 的 Spring Cloud Azure 一般組態選項。

下表顯示適用於 MySQL 的 Spring Cloud Azure 一般組態選項:

名字 描述
spring.datasource.azure.passwordless-enabled 是否要使用 OAuth2 Microsoft Entra 令牌認證來啟用對 Azure 資料庫的無密碼連線。
spring.datasource.azure.credential.client-certificate-password 憑證檔案的密碼。
spring.datasource.azure.credential.client-certificate-path 使用 Azure 執行服務主體驗證時要使用的 PEM 憑證檔案路徑。
spring.datasource.azure.credential.client-id 使用 Azure 執行服務主體驗證時要使用的用戶端識別碼。 這是舊版屬性。
spring.datasource.azure.credential.client-secret 使用 Azure 執行服務主體驗證時要使用的客戶端密碼。 這是舊版屬性。
spring.datasource.azure.credential.managed-identity-enabled 是否要讓受控識別向 Azure 進行驗證。 如果已設定 trueclient-id,則會使用用戶端標識碼作為使用者指派的受控識別用戶端標識符。 預設值為 false
spring.datasource.azure.credential.password 使用 Azure 執行使用者名稱/密碼驗證時要使用的密碼。
spring.datasource.azure.credential.username 使用 Azure 執行使用者名稱/密碼驗證時要使用的用戶名稱。
spring.datasource.azure.profile.cloud-type 要連線的 Azure 雲端名稱。
spring.datasource.azure.profile.environment.active-directory-endpoint 要連線Microsoft Entra 端點。
spring.datasource.azure.profile.tenant-id Azure 資源的租用戶標識碼。 tenant-id 允許的值包括:commonorganizationsconsumers或租用戶標識碼。

相依性設定

將下列相依性新增至您的專案。 這會自動在專案中以可轉移方式包含 spring-boot-starter 相依性。

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

注意

自 版本 4.5.0以來,已支援無密碼連線。

請記得新增 BOM spring-cloud-azure-dependencies 與上述相依性。 如需詳細資訊,請參閱 Spring Cloud Azure 開發人員指南用戶入門 一節。

基本用法

下列各節顯示傳統 Spring Boot 應用程式使用案例。

重要

無密碼連線使用 Microsoft Entra 驗證。 若要使用 Microsoft Entra 驗證,您應該先設定 Microsoft Entra 系統管理員使用者。 只有Microsoft Entra 系統管理員使用者可以建立及啟用使用者,以Microsoft Entra ID 型驗證。 如需詳細資訊,請參閱 搭配適用於 MySQL 的 Azure 資料庫使用 Spring Data JDBC

在本機連線至 Azure MySQL,而不需密碼

  1. 若要建立使用者並授與許可權,請參閱 建立 MySQL 非系統管理員使用者並授與許可權 一節 搭配適用於 MySQL 的 Azure 資料庫使用 Spring Data JDBC

  2. 在您的 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
    

使用服務主體連線到 Azure MySQL

  1. 為服務主體建立 Microsoft Entra 使用者,並授與許可權。

    1. 首先,使用下列命令來設定一些環境變數。

      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. 然後,建立稱為 create_ad_user_sp.sql 的 SQL 腳本,以建立非系統管理員使用者。 新增下列內容,並將其儲存在本機:

      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. 使用下列命令來執行 SQL 腳本,以建立 Microsoft Entra 非系統管理員使用者:

      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. 現在,請使用下列命令來移除暫存 SQL 腳本檔案:

      rm create_ad_user_sp.sql
      
  2. 在您的 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
    

注意

tenant-id 允許的值包括:commonorganizationsconsumers或租用戶標識碼。 如需這些值的詳細資訊,請參閱 錯誤AADSTS50020 - 來自身分識別提供者的用戶帳戶不存在於租使用者使用錯誤的端點(個人和組織帳戶)一節。 如需轉換單一租使用者應用程式的資訊,請參閱 將單一租使用者應用程式轉換成多租使用者Microsoft Entra ID

在 Azure Spring Apps 中使用受控識別連線到 Azure MySQL

  1. 若要啟用受控識別,請參閱 使用 Azure 入口網站指派受控識別 移轉應用程式以搭配適用於 MySQL 的 Azure 資料庫使用無密碼連線一節。

  2. 若要授與許可權,請參閱 將角色指派給受控識別 一節 移轉應用程式以使用與適用於 MySQL 的 Azure 資料庫的無密碼連線。

  3. 在您的 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
    

樣品

請參閱 GitHub 上的 azure-spring-boot-samples 存放庫