為適用於 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 資料庫彈性伺服器執行個體。
在 [安全性] 窗格底下,選取 [驗證]:
有三種驗證類型可供使用:
僅限 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 讀取。 或者,為使用者指派的受控識別 提供目錄讀取者 角色。
- User.Read.All:允許存取 Microsoft Entra 使用者資訊。
- GroupMember.Read.All:允許存取 Microsoft Entra 群組資訊。
- Application.Read.ALL:允許存取 Microsoft Entra 服務主體 (應用程式) 資訊。
重要
只有至少 具有特殊許可權角色管理員 角色的使用者才能授與這些許可權。
選取客戶租用戶中有效的 Microsoft Entra 使用者或 Microsoft Entra 群組,以成為 Microsoft Entra 管理員。 啟用 Microsoft Entra 驗證支援之後,就可以將 Microsoft Entra 管理員新增為具有權限可將 Microsoft Entra 使用者新增至 MySQL 伺服器的安全性主體。
注意
每個 MySQL 伺服器只能建立一個 Microsoft Entra 管理員,選取另一個管理員將會覆寫為伺服器設定的現有 Microsoft Entra 管理員。
將權限授與使用者指派的受控識別
下列範例 PowerShell 指令碼會授與 UMI 必要權限。 此範例會將權限將指派給 UMI umiservertest
。
若要執行指令碼,您必須以具有全域管理員或特殊權限角色管理員角色的使用者身分登入。
指令碼會將 User.Read.All
、GroupMember.Read.All
和 Application.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 資料庫,請在連線後執行下列步驟:
- 首先,確保 Microsoft Entra 使用者
<user>@yourtenant.onmicrosoft.com
是 Microsoft Entra 租用戶中的有效使用者。 - 以 Microsoft Entra 管理使用者身分登入適用於 MySQL 的 Azure 資料庫執行個體。
- 在「適用於 MySQL 的 Azure 資料庫」中建立使用者
<user>@yourtenant.onmicrosoft.com
。
範例:
CREATE AADUSER 'user1@yourtenant.onmicrosoft.com';
對於超過 32 個字元的使用者,建議您改為使用別名,以便在連線時使用:
範例:
CREATE AADUSER 'userWithLongName@yourtenant.onmicrosoft.com' as 'userDefinedShortName';
注意
- 由於 MySQL 會忽略前置和尾端空格,因此使用者名稱不應該具有任何前置或尾端空格。
- 透過 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
設定
- 連接器/J (mysql-connector-java):支援,必須使用
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
新增至連接字串
- go-sql-driver:支援,將
PHP
mysqli 延伸模組:支援
PDO_MYSQL 驅動程式:支援