使用 Microsoft Entra 身份验证
适用于: Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics
本文概述了如何使用 Microsoft Entra ID(前为 Azure Active Directory)向 Azure SQL 数据库、Azure SQL 托管实例、Windows Azure VM 上的 SQL Server、Azure Synapse Analytics 中的 Synapse SQL 和适用于 Windows 和 Linux 的 SQL Server 进行身份验证。
若要了解如何创建和填充 Microsoft Entra ID,然后使用 Azure SQL 数据库、Azure SQL 托管实例和 Azure Synapse Analytics 中的 Synapse SQL 配置 Microsoft Entra ID,请查看配置 Microsoft Entra ID。
注意
Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。
概述
通过 Microsoft Entra 身份验证,可在一个中心位置中集中管理数据库用户和其他 Azure 服务的标识。 集中 ID 管理提供一个单一位置来管理数据库用户,并简化权限管理。 包括如下优点:
提供一个 SQL Server 身份验证的替代方法。
它帮助阻止用户标识在服务器之间激增。
它允许在单一位置轮换密码。
客户可以使用 Microsoft Entra 组来管理数据库权限。
通过启用集成的 Windows 身份验证和 Microsoft Entra ID 支持的其他形式的身份验证来消除存储密码。
Microsoft Entra 身份验证使用包含的数据库用户在数据库级别对标识进行身份验证。
Microsoft Entra ID 支持对连接到 SQL 数据库和 SQL 托管实例的应用程序进行基于令牌的身份验证。
Microsoft Entra 身份验证支持以下身份验证方法:
- Microsoft Entra 仅限云的标识。
- Microsoft Entra 混合标识,此类标识支持:
- 联合身份验证。
SQL Server Management Studio 支持将 Microsoft Entra 与多重身份验证配合使用的连接。 多重身份验证通过多种验证选项提供强身份验证,这些选项包括电话呼叫、短信、含有 PIN 码的智能卡或移动应用通知。 有关详细信息,请参阅 SSMS 对 Azure SQL 数据库、SQL 托管实例和 Azure Synapse 的 Microsoft Entra 多重身份验证的支持
SQL Server Data Tools (SSDT) 还支持使用 Microsoft Entra ID 的多种身份验证选项。 有关详细信息,请参阅 SQL Server Data Tools (SSDT) 中的 Microsoft Entra ID 支持。
配置步骤包括配置和使用 Microsoft Entra 身份验证的以下过程。
- 创建并填充 Microsoft Entra 租户。
- 可选:关联或更改与 Azure 订阅关联的当前目录。
- 创建 Microsoft Entra 管理员。
- 配置客户端计算机。
- 在映射到 Microsoft Entra 标识的数据库中创建包含的数据库用户。
- 使用 Microsoft Entra 标识连接数据库。
注意
对于 Azure SQL、Azure VM 和 SQL Server 2022,Microsoft Entra 身份验证仅支持源自 Microsoft Entra ID 的访问令牌,不支持第三方访问令牌。 Microsoft Entra ID 也不支持将 Microsoft Entra ID 查询重定向到第三方端点。 这适用于所有支持 Microsoft Entra 身份验证的 SQL 平台和所有操作系统。
信任体系结构
- 为了支持 Microsoft Entra 本机用户密码,只考虑使用 Microsoft Entra ID 云部分、SQL 数据库、SQL 托管实例和 Azure Synapse。
- 若要支持联合身份验证(或 Windows 凭据的用户/密码),需要与 ADFS 块进行通信。
有关 Microsoft Entra 混合标识、设置和同步的详细信息,请参阅以下文章:
- 密码哈希身份验证 - 使用 Microsoft Entra Connect 同步实现密码哈希同步
- 联合身份验证 - 在 Azure 中部署 Active Directory 联合身份验证服务和 Microsoft Entra Connect 和联合身份验证
有关使用 ADFS 基础结构(或 Windows 凭据的用户/密码)进行联合身份验证的示例,请参阅下图。 箭头表示通信路径。
下图表明允许客户端通过提交令牌连接到数据库的联合、信任和托管关系。 该令牌已由 Microsoft Entra ID 进行身份验证且受数据库信任。 客户 1 可以代表本机用户的 Microsoft Entra ID,也可以代表联合用户的 Microsoft Entra ID。 客户 2 代表包含已导入用户的可行解决方案;在本例中,来自联合 Microsoft Entra ID 且 ADFS 正与 Microsoft Entra ID 进行同步。 请务必了解,使用 Microsoft Entra 身份验证访问数据库需要托管订阅与 Microsoft Entra ID 相关联。 必须使用相同的订阅创建 Azure SQL 数据库、SQL 托管实例或 Azure Synapse 资源。
管理员结构
使用 Microsoft Entra 身份验证时,会有两个管理员帐户:原始的 Azure SQL 数据库管理员和 Microsoft Entra 管理员。 相同的概念适用于 Azure Synapse。 只有 Microsoft Entra 帐户的管理员可以在用户数据库中创建第一个包含 Microsoft Entra ID 的数据库用户。 Microsoft Entra 管理员登录名可以是 Microsoft Entra 用户或 Microsoft Entra 组。 当管理员为组帐户时,可以由任何组成员使用,因此可以为服务器启用多个 Microsoft Entra 管理员。 以管理员身份使用组帐户时,无需更改 SQL 数据库或 Azure Synapse 中的用户或权限,便可集中添加和删除 Microsoft Entra ID 中的组成员,从而提高可管理性。 无论何时都仅可配置一个 Microsoft Entra 管理员(一个用户或组)。
注意
使用 Azure SQL 的 Microsoft Entra 身份验证仅支持 Azure SQL 资源当前所在的单个 Microsoft Entra 租户。 此租户中的所有 Microsoft Entra 对象都可以设置为允许用户访问此租户中的 Azure SQL。 Microsoft Entra 管理员还必须是来自 Azure SQL 资源的租户。 不支持从不同租户访问 Azure SQL 的 Microsoft Entra 多租户身份验证。
权限
若要新建用户,必须具有数据库中的 ALTER ANY USER
权限。 ALTER ANY USER
权限可以授予任何数据库用户。 ALTER ANY USER
权限还由服务器管理员帐户、具有该数据库的 CONTROL ON DATABASE
或 ALTER ON DATABASE
权限的数据库用户以及 db_owner
数据库角色的成员拥有。
要在 Azure SQL 数据库、Azure SQL 托管实例或 Azure Synapse 中创建一个包含的数据库用户,必须使用 Microsoft Entra 标识连接到数据库或实例。 要创建第一个包含的数据库用户,必须通过使用 Microsoft Entra 管理员(其是数据库的所有者)连接到数据库。 使用 SQL 数据库或 Azure Synapse 配置和管理 Microsoft Entra 身份验证中对此进行了演示。 只有为 Azure SQL 数据库、Azure SQL 托管实例或 Azure Synapse 创建 Microsoft Entra 管理员之后,才有可能进行 Microsoft Entra 身份验证。 如果已从服务器删除 Microsoft Entra 管理员,先前在服务器内创建的现有 Microsoft Entra 用户将无法再使用其 Microsoft Entra 凭据连接到数据库。
Microsoft Entra 功能和限制
可以为 Azure SQL 数据库预配以下 Microsoft Entra ID 成员:
- Microsoft Entra 用户:Microsoft Entra 租户中任何类型的用户,包括内部、外部、来宾和成员。 还支持为使用 Microsoft Entra ID 的联合配置的 Active Directory 域的成员。
- 应用程序:Azure 中存在的应用程序可以使用服务主体或托管标识直接向 Azure SQL 数据库进行身份验证。 首选使用托管标识进行身份验证,因为它是无密码的,并且不需要开发人员管理的凭证。
- Microsoft Entra 组可基于组织的组成员身份管理相应的用户和应用程序访问权限,从而简化整个组织的访问管理。
属于
db_owner
数据库角色成员的组的 Microsoft Entra 用户无法对 Azure SQL 数据库和 Azure Synapse 使用 CREATE DATABASE SCOPED CREDENTIAL 语法。 你会发现以下错误:SQL Error [2760] [S0001]: The specified schema name 'user@mydomain.com' either doesn't exist or you do not have permission to use it.
为了缓解 CREATE DATABASE SCOPED CREDENTIAL 问题,请直接将
db_owner
角色授予单个 Microsoft Entra 用户。这些系统函数不受支持,由 Microsoft Entra 主体执行时将返回 NULL 值:
SUSER_ID()
SUSER_NAME(<ID>)
SUSER_SNAME(<SID>)
SUSER_ID(<name>)
SUSER_SID(<name>)
Azure SQL 数据库不会为以 Microsoft Entra 组成员身份登录的用户创建隐式用户。 因此,需要分配所有权的多种操作都会失败,即使将 Microsoft Entra 组作为成员添加到具有这些权限的角色也是如此。
例如,如果用户通过具有 db_ddladmin 角色的 Microsoft Entra 组登录数据库,则其无法执行 CREATE SCHEMA、ALTER SCHEMA 和其他没有显式定义架构(例如表、视图或类型)的对象创建语句。 要解决此问题,必须为该用户创建一个 Microsoft Entra 用户,或者必须更改 Microsoft Entra 组,以便将 DEFAULT_SCHEMA 分配给 dbo。
SQL 托管实例
SQL 托管实例支持 Microsoft Entra 服务器主体(登录名)和用户。
SQL 托管实例不支持将映射到 Microsoft Entra 组的 Microsoft Entra 登录名设置为数据库所有者。
- 此情况的扩展是当将组添加为
dbcreator
服务器角色的一部分时,此组中的用户可以连接到 SQL 托管实例并创建新数据库,但不能访问数据库。 这是因为新的数据库所有者是 SA,而不是 Microsoft Entra 用户。 如果将个体用户添加到dbcreator
服务器角色,则不会出现此问题。
- 此情况的扩展是当将组添加为
Microsoft Entra 登录名支持 SQL 代理托管和作业执行。
Microsoft Entra 服务器主体(登录名)可以执行数据库备份和还原操作。
支持审核与 Microsoft Entra 服务器主体(登录名)和身份验证事件相关的所有语句。
支持为属于 sysadmin 服务器角色成员的 Microsoft Entra 服务器主体(登录名)建立专用管理员连接。
- 可以通过 SQLCMD 实用工具和 SQL Server Management Studio 提供此支持。
来自 Microsoft Entra 服务器主体(登录名)的登录事件支持登录触发器。
可以使用 Microsoft Entra 服务器主体(登录名)设置 Service Broker 和数据库邮件。
使用 Microsoft Entra 标识连接
Microsoft Entra 身份验证支持使用 Microsoft Entra 标识连接到数据库的以下方法:
- Microsoft Entra 密码
- Microsoft Entra 集成
- 使用多重身份验证的 Microsoft Entra Universal
- 使用应用程序令牌身份验证
Microsoft Entra 服务器主体(登录名)支持以下身份验证方法:
- Microsoft Entra 密码
- Microsoft Entra 集成
- 使用多重身份验证的 Microsoft Entra Universal
其他注意事项
- 为了增强可管理性,建议将一个专用 Microsoft Entra 组预配为管理员。
- 无论何时都仅可为 SQL 数据库或 Azure Synapse 配置一个 Microsoft Entra 管理员(用户或组)。
- 为 SQL 托管实例添加 Microsoft Entra 服务器主体(登录名)之后,即可创建能够添加到
sysadmin
角色的多个 Microsoft Entra 服务器主体(登录名)。
- 为 SQL 托管实例添加 Microsoft Entra 服务器主体(登录名)之后,即可创建能够添加到
- 只有服务器的 Microsoft Entra 管理员最初可以使用 Microsoft Entra 帐户连接到服务器或托管实例。 Microsoft Entra 管理员可以配置后续的 Microsoft Entra 数据库用户。
- 不支持属于超过 2048 个 Microsoft Entra 安全组的成员的 Microsoft Entra 用户和服务主体(Microsoft Entra 应用程序)登录 SQL 数据库、SQL 托管实例或 Azure Synapse 中的数据库。
- 我们建议将连接超时值设置为 30 秒。
- SQL Server 2016 Management Studio 和 SQL Server Data Tools for Visual Studio 2015(版本 14.0.60311.1(2016 年 4 月)或更高版本)支持 Microsoft Entra 身份验证。 (用于 SqlServer 的 .NET Framework 数据提供程序(.NET Framework 4.6 或更高版本)支持 Microsoft Entra 身份验证)。 因此,这些工具和数据层应用程序(DAC 和 BACPAC)的最新版本可以使用 Microsoft Entra 身份验证。
- 从版本 15.0.1 开始,sqlcmd 实用工具和 bcp 实用工具支持使用多重身份验证的 Active Directory 交互式身份验证。
- SQL Server Data Tools for Visual Studio 2015 至少需要 2016 年 4 月版的 Data Tools(版本 14.0.60311.1)。 目前,Microsoft Entra 用户不会显示在 SSDT 对象资源管理器中。 解决方法是在 sys.database_principals 中查看这些用户。
- Microsoft JDBC Driver 6.0 for SQL Server 支持 Microsoft Entra 身份验证。 另外,请参阅设置连接属性。
- PolyBase 无法使用 Microsoft Entra 身份验证进行身份验证。
- 通过使用 Azure 门户的“导入数据库”和“导出数据库”边栏选项卡,支持 Azure SQL 数据库和 Azure Synapse 的 Microsoft Entra 身份验证 。 PowerShell 命令也支持使用 Microsoft Entra 身份验证的导入和导出。
- 通过使用 CLI,SQL 数据库、SQL 托管实例和 Azure Synapse 支持 Microsoft Entra 身份验证。 有关详细信息,请参阅使用 SQL 数据库或 Azure Synapse 配置和管理 Microsoft Entra 身份验证和 SQL Server - az sql server。
后续步骤
- 要了解如何创建和填充 Microsoft Entra 租户并使用 Azure SQL 数据库、Azure SQL 托管实例或 Azure Synapse 对其进行配置,请参阅使用 SQL 数据库、SQL 托管实例或 Azure Synapse 配置和管理 Microsoft Entra 身份验证。
- 有关将 Microsoft Entra 服务器主体(登录名)与 SQL 托管实例配合使用的教程,请参阅 Microsoft Entra 服务器主体(登录名)与 SQL 托管实例
- 有关 SQL 数据库中登录名、用户、数据库角色和权限的概述,请参见登录名、用户、数据库角色和权限。
- 有关数据库主体的详细信息,请参阅主体。
- 有关数据库角色的详细信息,请参阅数据库角色。
- 有关为 SQL 托管实例创建 Microsoft Entra 服务器主体(登录名)的语法,请参阅 CREATE LOGIN。
- 有关 SQL 数据库中的防火墙规则的详细信息,请参阅 SQL 数据库防火墙规则。