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

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

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

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

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

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。

  • 如果您沒有 Azure 訂用帳戶,請在開始之前建立 Azure 免費帳戶

    注意

    使用 Azure 免費帳戶,您現在可以免費試用適用於 MySQL 的 Azure 資料庫彈性伺服器 12 個月。 如需詳細資訊,請參閱 免費試用 適用於 MySQL 的 Azure 資料庫彈性伺服器。

  • 安裝或升級 Azure CLI 至最新版本。 請參閱 安裝 Azure CLI

設定 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[0]  -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[0]  -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[0]  -Id $AAD_AppRole.Id

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

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

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

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

將許可權授與 UMI 之後,系統會針對以指派為伺服器身分識別的 UMI 建立的所有伺服器啟用這些許可權。

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

1 - 使用 Microsoft Entra 識別碼進行驗證

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

  • 使用 az login 命令登入 Azure 帳戶。 請注意 ID 屬性,其會參考您 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 使用者密碼。 您可以使用上述方法,使用 MySQL 工作臺等 GUI 用戶端來擷取權杖。

使用 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 Authentication Plugin ]。
  • 選取 [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 000000000-0000-0000-0000-00000000000000' 和身分識別 '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

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

    • 連線or/Python:支援
  • Ruby

    • mysql2:支援
  • .NET

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

    • mysqljs:不支援 (不使用修補程式以純文字傳送權杖)
    • node-mysql2:支援
  • Perl

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

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

下一步

  • 使用適用於 MySQL 的 Azure 資料庫彈性伺服器檢閱 Microsoft Entra 驗證的概念