使用 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 管理使用者,請遵循下列步驟
- 在 Azure 入口網站中,選取您想要為 Microsoft Entra ID 啟用的「適用於 MySQL 的 Azure 資料庫」執行個體。
- 在 [設定] 底下,選取 [Active Directory 系統管理員]。
- 選取客戶租用戶中要成為 Microsoft Entra 管理員的有效 Microsoft Entra 使用者。
重要
在設定管理員時,會將具有完整管理員權限的新使用者新增至「適用於 MySQL 的 Azure 資料庫」伺服器。
每個 MySQL 伺服器只能建立一個 Microsoft Entra 管理員,選取另一位管理員將會覆寫為伺服器設定的現有 Microsoft Entra 管理員。
設定管理員之後,您現在可以登入:
使用 Microsoft Entra ID 連線到適用於 MySQL 的 Azure 資料庫
我們將 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 資料庫」資料庫,請在連線之後執行下列步驟 (請參閱後面關於如何連線的章節):
- 首先,請確定 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';
登入時,群組的成員會使用其個人存取權杖,但會以指定為使用者名稱的群組名稱來登入。
權杖驗證
「適用於 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
設定
- 連接器/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:支援,將