為適用於 MySQL 的 Azure 資料庫 - 彈性伺服器設定 Microsoft Entra 驗證

適用於:適用於 MySQL 的 Azure 資料庫 - 彈性伺服器

本教學課程示範如何為適用於 MySQL 的 Azure 資料庫彈性伺服器設定 Microsoft Entra 驗證。

在本教學課程中,您會了解如何:

  • 設定 Microsoft Entra 管理員。
  • 使用 Microsoft Entra ID 連線到適用於 MySQL 的 Azure 資料庫彈性伺服器。

必要條件

設定 Microsoft Entra 管理員

若要建立 Microsoft Entra 管理使用者,請遵循下列步驟。

  • 在 Azure 入口網站中,選取您想要為 Microsoft Entra ID 啟用的適用於 MySQL 的 Azure 資料庫彈性伺服器執行個體。

  • 在 [安全性] 窗格底下,選取 [驗證]Diagram of how to configure Microsoft Entra authentication.

  • 有三種驗證類型可供使用:

    • 僅限 MySQL 驗證 – MySQL 預設會使用內建的 mysql_native_password 驗證外掛程式,其會使用原生密碼雜湊方法執行驗證

    • 僅限 Microsoft Entra 驗證 - 僅允許使用 Microsoft Entra 帳戶進行驗證。 停用 mysql_native_password 驗證,並「開啟」伺服器參數 aad_auth_only

    • MySQL 和 Microsoft Entra 驗證 - 允許使用原生 MySQL 密碼或 Microsoft Entra 帳戶進行驗證。 「關閉」伺服器參數 aad_auth_only

  • [選取身分識別] – 選取/新增使用者指派的受控識別。 需要下列權限,才能允許 UMI 以伺服器身分識別身分從 Microsoft Graph 讀取。 或者,授與 UMI 目錄讀取者角色。

重要

只有全域管理員特殊權限角色管理員可以授與這些權限。

  • 選取客戶租用戶中有效的 Microsoft Entra 使用者或 Microsoft Entra 群組,以成為 Microsoft Entra 管理員。 啟用 Microsoft Entra 驗證支援之後,就可以將 Microsoft Entra 管理員新增為具有權限可將 Microsoft Entra 使用者新增至 MySQL 伺服器的安全性主體。

    注意

    每個 MySQL 伺服器只能建立一個 Microsoft Entra 管理員,選取另一個管理員將會覆寫為伺服器設定的現有 Microsoft Entra 管理員。

將權限授與使用者指派的受控識別

下列範例 PowerShell 指令碼會授與 UMI 必要權限。 此範例會將權限將指派給 UMI umiservertest

若要執行指令碼,您必須以具有全域管理員或特殊權限角色管理員角色的使用者身分登入。

指令碼會將 User.Read.AllGroupMember.Read.AllApplication.Read.ALL 權限授與 UMI,以存取 Microsoft Graph

# Script to assign permissions to the UMI "umiservertest"

import-module AzureAD
$tenantId = '<tenantId>' # Your Azure AD tenant ID

Connect-AzureAD -TenantID $tenantId
# Log in as a user with a "Global Administrator" or "Privileged Role Administrator" role
# Script to assign permissions to an existing UMI 
# The following Microsoft Graph permissions are required: 
#   User.Read.All
#   GroupMember.Read.All
#   Application.Read.ALL

# Search for Microsoft Graph
$AAD_SP = Get-AzureADServicePrincipal -SearchString "Microsoft Graph";
$AAD_SP
# Use Microsoft Graph; in this example, this is the first element $AAD_SP[0]

#Output

#ObjectId                             AppId                                DisplayName
#--------                             -----                                -----------
#47d73278-e43c-4cc2-a606-c500b66883ef 00000003-0000-0000-c000-000000000000 Microsoft Graph
#44e2d3f6-97c3-4bc7-9ccd-e26746638b6d 0bf30f3b-4a52-48df-9a82-234910c4a086 Microsoft Graph #Change 

$MSIName = "<managedIdentity>";  # Name of your user-assigned
$MSI = Get-AzureADServicePrincipal -SearchString $MSIName 
if($MSI.Count -gt 1)
{ 
Write-Output "More than 1 principal found, please find your principal and copy the right object ID. Now use the syntax $MSI = Get-AzureADServicePrincipal -ObjectId <your_object_id>"

# Choose the right UMI

Exit
} 

# If you have more UMIs with similar names, you have to use the proper $MSI[ ]array number

# Assign the app roles

$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "User.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $AAD_SP.ObjectId -Id $AAD_AppRole.Id 
$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "GroupMember.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $AAD_SP.ObjectId -Id $AAD_AppRole.Id
$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "Application.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $AAD_SP.ObjectId -Id $AAD_AppRole.Id

在指令碼的最後步驟中,如果您有更多名稱類似的 UMI,則必須使用適當的 $MSI[ ]array 數字。 例如 $AAD_SP.ObjectId[0]

檢查使用者指派的受控身分識別的權限

若要檢查 UMI 的權限,請移至 Azure 入口網站。 在 Microsoft Entra ID 資源中,移至 [企業應用程式]。 針對 [應用程式類型] 選取 [所有應用程式],並搜尋所建立的 UMI。

選取 UMI,然後移至 [安全性] 底下的 [權限] 設定。

將權限授與 UMI 後,就會對將 UMI 指派為伺服器身分識別所建立的所有伺服器啟用這些權限。

使用 Microsoft Entra ID 連線到適用於 MySQL 的 Azure 資料庫彈性伺服器

1 - 使用 Microsoft Entra ID 進行驗證

首先,使用 Azure CLI 工具以 Microsoft Entra ID 進行驗證。
(您不需要在 Azure Cloud Shell 中執行此步驟。)

  • 使用 az login 命令登入 Azure 帳戶。 請注意識別碼屬性,其代表您 Azure 帳戶的訂用帳戶識別碼:

    az login
    

此命令會啟動 Microsoft Entra 驗證頁面的瀏覽器視窗。 您需要提供 Microsoft Entra 的使用者識別碼和密碼。

  • 如有多個訂閱,請使用 az account set 命令選擇合適的訂閱:

    az account set --subscription \<subscription id\>
    

2 - 擷取 Microsoft Entra 存取權杖

叫用 Azure CLI 工具,以取得步驟 1 中 Microsoft Entra 已驗證使用者的存取權杖,以便存取適用於 MySQL 的 Azure 資料庫彈性伺服器。

  • 範例 (適用於公用雲端):

    az account get-access-token --resource https://ossrdbms-aad.database.windows.net
    
  • 上述資源值必須完全依所示內容加以指定。 針對其他雲端,則可以使用下列命令查看資源值:

    az cloud show
    
  • 針對 Azure CLI 2.0.71 版和更新版本,您可以在下列適用於所有雲端的更方便版本中指定此命令:

    az account get-access-token --resource-type oss-rdbms
    
  • 使用 PowerShell,您便可使用下列命令來取得存取權杖:

    $accessToken = Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net
    $accessToken.Token | out-file C:\temp\MySQLAccessToken.txt
    

驗證成功之後,Microsoft Entra ID 會傳回存取權杖:

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

權杖是 Base 64 字串,會將所有關於已驗證使用者的資訊編碼,並且會以適用於 MySQL 的 Azure 資料庫服務作為目標。

存取權杖的有效時間介於 5 分鐘到 60 分鐘之間。 建議在起始登入適用於 MySQL 的 Azure 資料庫彈性伺服器的之前取得存取權杖。

  • 您可以使用下列 PowerShell 命令來查看權杖的有效時間。
   $accessToken.ExpiresOn.DateTime

3 - 使用權杖作為以 MySQL 登入的密碼

連線時您必須使用存取權杖作為 MySQL 使用者密碼。 使用 GUI 用戶端 (例如 MySQL Workbench) 時,您可以使用上述方法來擷取權杖。

使用 MySQL CLI 連線到適用於 MySQL 的 Azure 資料庫彈性伺服器

使用 CLI 時,您可以使用此速記法來連線:

範例 (Linux/macOS):

mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=`az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken`

範例 (PowerShell):

mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken)


mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=$((Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net).Token)

使用 MySQL Workbench 連線到適用於 MySQL 的 Azure 資料庫彈性伺服器

  • 啟動 MySQL Workbench 並選取 [資料庫] 選項,然後選取 [連接到資料庫]
  • 在 [主機名稱] 欄位中,輸入 MySQL FQDN,例如 mysql.database.azure.com。
  • 在 [使用者名稱] 欄位中,輸入 MySQL Microsoft Entra 管理員名稱。 例如: user@tenant.onmicrosoft.com 。
  • 在 [密碼] 欄位中,選取 [儲存在保存庫中],然後貼上來自檔案的存取權杖,例如 C:\temp\MySQLAccessToken.txt。
  • 選取 [進階] 索引標籤,並確保您勾選 [啟用 Cleartext 驗證外掛程式]
  • 選取 [OK] \(確定\) 以連線到資料庫。

連線時的重要考量

  • user@tenant.onmicrosoft.com 是您嘗試以 Microsoft Entra 使用者或群組身分進行連線的名稱
  • 請務必使用完整的 Microsoft Entra 使用者或群組名稱
  • Microsoft Entra 使用者和群組名稱會區分大小寫
  • 以群組身分連線時,請只使用群組名稱 (例如,GroupName)
  • 如果名稱包含空格,請在每個空格之前使用 \ 將其逸出

注意

[enable-cleartext-plugin] 設定 – 您需要將類似的設定與其他用戶端搭配使用,以確保權杖傳送至伺服器,而不會進行雜湊處理。

您現在已使用 Microsoft Entra 驗證向 MySQL 彈性伺服器進行驗證。

其他 Microsoft Entra 管理員命令

  • 管理伺服器 Active Directory 系統管理員

    az mysql flexible-server ad-admin
    
  • 建立 Active Directory 系統管理員

    az mysql flexible-server ad-admin create
    

    範例:以使用者 'john@contoso.com'、系統管理員識別碼 '00000000-0000-0000-0000-000000000000' 和身分識別 'test-identity' 建立 Active Directory 系統管理員

    az mysql flexible-server ad-admin create -g testgroup -s testsvr -u john@contoso.com -i 00000000-0000-0000-0000-000000000000 --identity test-identity
    
  • 刪除 Active Directory 系統管理員

    az mysql flexible-server ad-admin delete
    

    範例:刪除 Active Directory 系統管理員

    az mysql flexible-server ad-admin delete -g testgroup -s testsvr
    
  • 列出所有 Active Directory 系統管理員

    az mysql flexible-server ad-admin list
    

    範例:列出 Active Directory 系統管理員

    az mysql flexible-server ad-admin list -g testgroup -s testsvr
    
  • 取得 Active Directory 系統管理員

    az mysql flexible-server ad-admin show
    

    範例:取得 Active Directory 系統管理員

    az mysql flexible-server ad-admin show -g testgroup -s testsvr
    
  • 等候 Active Directory 系統管理員滿足特定條件

    az mysql flexible-server ad-admin wait
    

    範例:

    • 等候 Active Directory 系統管理員出現
    az mysql flexible-server ad-admin wait -g testgroup -s testsvr --exists
    
    • 等候 Active Directory 系統管理員被刪除
    az mysql flexible-server ad-admin wait -g testgroup -s testsvr –deleted
    

在適用於 MySQL 的 Azure 資料庫中建立 Microsoft Entra 使用者

若要將 Microsoft Entra 使用者新增至適用於 MySQL 的 Azure 資料庫,請在連線後執行下列步驟:

  1. 首先,確保 Microsoft Entra 使用者 <user>@yourtenant.onmicrosoft.com 是 Microsoft Entra 租用戶中的有效使用者。
  2. 以 Microsoft Entra 管理使用者身分登入適用於 MySQL 的 Azure 資料庫執行個體。
  3. 在「適用於 MySQL 的 Azure 資料庫」中建立使用者 <user>@yourtenant.onmicrosoft.com

範例:

CREATE AADUSER 'user1@yourtenant.onmicrosoft.com';

對於超過 32 個字元的使用者,建議您改為使用別名,以便在連線時使用:

範例:

CREATE AADUSER 'userWithLongName@yourtenant.onmicrosoft.com' as 'userDefinedShortName';

注意

  1. 由於 MySQL 會忽略前置和尾端空格,因此使用者名稱不應該具有任何前置或尾端空格。
  2. 透過 Microsoft Entra ID 來驗證使用者並不會向使用者提供任何可在適用於 MySQL 的 Azure 資料庫的資料庫內存取物件的權限。 您必須手動向使用者授與必要權限。

在適用於 MySQL 的 Azure 資料庫中建立 Microsoft Entra 群組

若要啟用 Microsoft Entra 群組以便能夠存取您的資料庫,請使用與使用者相同的機制,但改為指定群組名稱:

範例:

CREATE AADUSER 'Prod_DB_Readonly';

登入時,群組成員會使用其個人存取權杖,但會以指定為使用者名稱的群組名稱來登入。

與應用程式驅動程式的相容性

支援大部分驅動程式;但請務必使用以純文字傳送密碼的設定,以便在未修改權杖的情況下傳送權杖。

  • C/C++

    • libmysqlclient:支援
    • mysql-connector-c++:支援
  • Java

    • 連接器/J (mysql-connector-java):支援,必須使用 useSSL 設定
  • Python

    • 連接器/Python:支援
  • Ruby

    • mysql2:支援
  • .NET

    • mysql-connector-net:支援,需要新增 mysql_clear_password 的外掛程式
    • mysql-net/MySqlConnector:支援
  • Node.js

    • mysqljs:不支援 (在沒有修補程式的情況下,不會以純文字傳送權杖)
    • node-mysql2:支援
  • Perl

    • DBD::mysql:支援
    • Net::MySQL:不支援
  • Go

    • go-sql-driver:支援,將 ?tls=true&allowCleartextPasswords=true 新增至連接字串

下一步