共用方式為


使用 Microsoft Entra ID 向 MySQL 進行驗證

適用於: 適用於 MySQL 的 Azure 資料庫 - 單一伺服器

重要

適用於 MySQL 的 Azure 資料庫單一伺服器位於淘汰路徑上。 強烈建議您升級至適用於 MySQL 的 Azure 資料庫彈性伺服器。 如需移轉至適用於 MySQL 的 Azure 資料庫彈性伺服器的詳細資訊,請參閱適用於 MySQL 的 Azure 資料庫單一伺服器會發生什麼事?

本文會逐步引導您了解如何設定「適用於 MySQL 的 Azure 資料庫」的 Microsoft Entra ID 存取的步驟,以及如何使用 Microsoft Entra 權杖來連線的步驟。

重要

Microsoft Entra 驗證僅適用於 MySQL 5.7 和更新版本。

設定 Microsoft Entra 管理使用者

只有 Microsoft Entra 管理使用者可以針對 Microsoft Entra ID 型驗證來建立/啟用使用者。 若要建立 Microsoft Entra 管理使用者,請遵循下列步驟

  1. 在 Azure 入口網站中,選取您想要為 Microsoft Entra ID 啟用的「適用於 MySQL 的 Azure 資料庫」執行個體。
  2. 在 [設定] 下,選取 [Active Directory 管理員]:

set Microsoft Entra administrator

  1. 選取客戶租用戶中要成為 Microsoft Entra 管理員的有效 Microsoft Entra 使用者。

重要

在設定管理員時,會將具有完整管理員權限的新使用者新增至「適用於 MySQL 的 Azure 資料庫」伺服器。

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

設定管理員之後,您現在可以登入:

使用 Microsoft Entra ID 連線到適用於 MySQL 的 Azure 資料庫

下列高階圖表摘要說明搭配使用 Microsoft Entra 驗證與「適用於 MySQL 的 Azure 資料庫」的工作流程:

authentication flow

我們將 Microsoft Entra 整合設計為可使用常見的 MySQL 工具,例如 mysql CLI,Microsoft Entra 無法感知此工具,而且此工具只支援在連線到 MySQL 時,指定使用者名稱和密碼。 我們會以密碼的形式傳遞 Microsoft Entra 權杖,如上圖所示。

我們目前已測試過下列用戶端:

  • MySQLWorkbench
  • MySQL CLI

我們也已測試最常見的應用程式驅動程式,您可以在此頁面最後查看詳細資料。

使用者/應用程式為了使用 Microsoft Entra ID 進行驗證所必須執行的步驟如下所述:

必要條件

您可以在 Azure Cloud Shell、Azure VM 或本機電腦上遵循這些步驟。 請確定您已安裝 Azure CLI

步驟 1:使用 Microsoft Entra ID 進行驗證

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

az login

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

步驟 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 用戶端 (例如 MySQLWorkbench) 時,您可以使用上述方法來擷取權杖。

使用 MySQL CLI

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

範例 (Linux/macOS):

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

使用 MySQL Workbench

  • 啟動 MySQL Workbench 並按一下 [資料庫] 選項,接著按一下 [連線至資料庫]
  • 在 [主機名稱] 欄位中,輸入 MySQL FQDN,例如mydb.mysql.database.azure.com
  • 在 [使用者名稱] 欄位中,輸入 MySQL Microsoft Entra 的管理員名稱,並在此名稱上附加 MySQL 伺服器名稱,而不是 FQDN,例如 user@tenant.onmicrosoft.com @mydb
  • 在 [密碼] 欄位中,按一下 [儲存在保存庫中],然後貼上檔案中的存取權杖,例如 C:\temp\MySQLAccessToken.txt
  • 按一下 [進階] 索引標籤,並確定您核取 [啟用 Cleartext 驗證外掛程式]
  • 按一下 [確定] 以連線至資料庫

連線時的重要考量:

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

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

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

在「適用於 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';

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

權杖驗證

「適用於 MySQL 的 Azure 資料庫」中的 Microsoft Entra 驗證可確保使用者存在於 MySQL 伺服器中,並藉由驗證權杖的內容來檢查權杖是否有效。 會執行以下權杖驗證步驟:

  • 權杖是由 Microsoft Entra ID 簽署的,而且尚未遭到篡改
  • Microsoft Entra ID 針對與伺服器相關聯的租用戶發出權杖
  • 權杖尚未過期
  • 權杖適用於「適用於 MySQL 的 Azure 資料庫」資源 (而不是另一個 Azure 資源)

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

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

  • 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 新增至連接字串

下一步