使用 Microsoft Entra ID 进行 MySQL 身份验证
适用于: Azure Database for MySQL - 单一服务器
重要
Azure Database for MySQL 单一服务器即将停用。 强烈建议升级到 Azure Database for MySQL 灵活服务器。 若要详细了解如何迁移到 Azure Database for MySQL 灵活服务器,请参阅《Azure Database for MySQL 单一服务器将会怎么样?》
本文将介绍如何配置 Azure Database for MySQL 的 Microsoft Entra ID 访问,以及如何使用 Microsoft Entra 令牌进行连接。
重要
Microsoft Entra 身份验证仅适用于 MySQL 5.7 及更高版本。
设置 Microsoft Entra 管理员用户
只有 Microsoft Entra 管理员用户才能为基于 Microsoft Entra ID 的身份验证创建/启用用户。 若要创建 Microsoft Entra 管理员用户,请按照以下步骤操作
- 在 Azure 门户中,选择要启用 Microsoft Entra ID 的 Azure Database for MySQL 实例。
- 在“设置”下,选择“Active Directory 管理员”。
- 在客户租户中选择有效的 Microsoft Entra 用户成为 Microsoft Entra 管理员。
重要
设置管理员时,将向具有完全管理员权限的 Azure Database for MySQL 服务器添加新用户。
每个 MySQL 服务器只能创建一个 Microsoft Entra 管理员,选择另一个管理员后,将会覆盖为服务器配置的现有 Microsoft Entra 管理员。
配置管理员后,现在就可以登录了:
使用 Microsoft Entra ID 连接到 Azure Database for MySQL
我们将 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 用户 ID 和密码。
步骤 2:检索 Microsoft Entra 访问令牌
调用 Azure CLI 工具,获取步骤 1 中经过 Microsoft Entra 身份验证的用户的访问令牌,以访问 Azure Database for MySQL。
示例(适用于公有云):
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 字符串,该字符串对有关经过身份验证的用户的所有信息进行编码,并且针对的是 Azure Database for MySQL 服务。
访问令牌的有效期为 5 - 60 分钟。 建议在即将启动 Azure Database for MySQL 登录之前获取访问令牌。 可以使用以下 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
- 单击“高级”选项卡,确保选中“启用明文身份验证插件”
- 单击“确定”以连接到数据库
连接时的重要注意事项如下:
user@tenant.onmicrosoft.com
是你尝试连接时所用的 Microsoft Entra 用户或组的名称- 始终在 Microsoft Entra 用户/组名称后面追加服务器名称(例如
@mydb
) - 请确保使用 Microsoft Entra 用户或组名称的准确拼写方式
- Microsoft Entra 的用户名和组名区分大小写
- 在作为组进行连接时,请只使用组名称(例如
GroupName@mydb
) - 如果名称包含空格,请在每个空格前使用
\
对该空格进行转义
请注意“enable-cleartext-plugin”设置,需要对其他客户端使用类似的配置,以确保在不进行哈希处理的情况下将令牌发送到服务器。
现在,你已使用 Microsoft Entra 身份验证方法向 MySQL 服务器进行了身份验证。
在 Azure Database for MySQL 中创建 Microsoft Entra 用户
要向 Azure Database for MySQL 数据库添加 Microsoft Entra 用户,请在连接后执行以下步骤(请参阅后面有关如何连接的部分):
- 首先确保 Microsoft Entra 用户
<user>@yourtenant.onmicrosoft.com
是 Microsoft Entra 租户中的有效用户。 - 以 Microsoft Entra 管理员用户身份登录到 Azure Database for MySQL 实例。
- 在 Azure Database for MySQL 中创建用户
<user>@yourtenant.onmicrosoft.com
。
示例:
CREATE AADUSER 'user1@yourtenant.onmicrosoft.com';
如果用户名超过 32 个字符,建议改用别名,以供连接时使用:
示例:
CREATE AADUSER 'userWithLongName@yourtenant.onmicrosoft.com' as 'userDefinedShortName';
注意
- MySQL 会忽略前导空格和尾随空格,因此用户名不应包含任何前导空格或尾随空格。
- 通过 Microsoft Entra ID 对用户进行身份验证时,不会向用户授予访问 Azure Database for MySQL 数据库中的对象的任何权限。 必须手动向用户授予所需的权限。
在 Azure Database for MySQL 中创建 Microsoft Entra 组
要启用 Microsoft Entra 组以访问数据库,请使用与用户相同的机制,只不过要指定组名称:
示例:
CREATE AADUSER 'Prod_DB_Readonly';
登录时,组成员将使用其个人访问令牌,但使用指定为用户名的组名称进行签名。
令牌验证
Azure Database for MySQL 中的 Microsoft Entra 身份验证可确保 MySQL 服务器中存在用户,并通过验证令牌的内容来检查令牌的有效性。 执行以下令牌验证步骤:
- 令牌由 Microsoft Entra ID 签名,并且未被篡改
- 令牌由 Microsoft Entra ID 为与服务器关联的租户颁发
- 令牌尚未过期
- 令牌是否用于 Azure Database for MySQL 资源(而不是其他 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:支持,将