適用於 MySQL 的 Azure 資料庫 是由 MySQL 社群版本提供的關係資料庫服務。 您可以使用單一伺服器或彈性伺服器在 Azure 中載入 MySQL 資料庫。 它是完全受控的資料庫即服務供應專案,可透過可預測的效能和動態延展性來處理任務關鍵性工作負載。
從版本 4.5.0,Spring Cloud Azure 支援各種類型的認證,以向適用於 MySQL 的 Azure 資料庫彈性伺服器進行驗證。
支援的 MySQL 版本
入門版的目前版本應該使用適用於 MySQL 的 Azure 資料庫彈性伺服器版本 5.7 或 8.0。
核心功能
無密碼連線
無密碼聯機會使用 Microsoft Entra 驗證來連線到 Azure 服務,而不需將任何認證儲存在應用程式、其組態檔或環境變數中。 Microsoft Entra 驗證是一種機制,可使用 Microsoft Entra 識別符中定義的身分識別連線到適用於 MySQL 的 Azure 資料庫。 透過Microsoft Entra 驗證,您可以在集中位置管理資料庫使用者身分識別和其他Microsoft服務,以簡化許可權管理。
運作方式
Spring Cloud Azure 會根據應用程式驗證組態,先建置下列其中一種類型的認證:
ClientSecretCredentialClientCertificateCredentialUsernamePasswordCredentialManagedIdentityCredentialDefaultAzureCredential
如果找不到這些類型的認證,則會從應用程式屬性、環境變數、受控識別或IDE取得 DefaultAzureCredential 認證。 如需詳細資訊,請參閱 Spring Cloud Azure 驗證。
下列高階圖表摘要說明如何搭配適用於 MySQL 的 Azure 資料庫使用 OAuth 認證驗證進行驗證。 箭號表示通訊路徑。
配置
Spring Cloud Azure for MySQL 支援下列兩個層級的組態選項:
credential和profile的全域驗證組態選項,前置詞為spring.cloud.azure。適用於 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 進行驗證。 如果已設定 true 和 client-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 允許的值包括:common、organizations、consumers或租用戶標識碼。 |
相依性設定
將下列相依性新增至您的專案。 這會自動在專案中以可轉移方式包含 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,而不需密碼
若要建立使用者並授與許可權,請參閱 建立 MySQL 非系統管理員使用者並授與許可權 一節 搭配適用於 MySQL 的 Azure 資料庫使用 Spring Data JDBC。
在您的 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
為服務主體建立 Microsoft Entra 使用者,並授與許可權。
首先,使用下列命令來設定一些環境變數。
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)然後,建立稱為 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使用下列命令來執行 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現在,請使用下列命令來移除暫存 SQL 腳本檔案:
rm create_ad_user_sp.sql
在您的 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 允許的值包括:common、organizations、consumers或租用戶標識碼。 如需這些值的詳細資訊,請參閱 錯誤AADSTS50020 - 來自身分識別提供者的用戶帳戶不存在於租使用者的 使用錯誤的端點(個人和組織帳戶)一節。 如需轉換單一租使用者應用程式的資訊,請參閱 將單一租使用者應用程式轉換成多租使用者Microsoft Entra ID。
在 Azure Spring Apps 中使用受控識別連線到 Azure MySQL
若要啟用受控識別,請參閱
使用 Azure 入口網站指派受控識別 Azure 資料庫使用無密碼連線一節。移轉應用程式以搭配適用於 MySQL 的 若要授與許可權,請參閱 將角色指派給受控識別 一節 移轉應用程式以使用與適用於 MySQL 的 Azure 資料庫的無密碼連線。
在您的 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 存放庫