使用 Azure SQL 进行仅限 Microsoft Entra 身份验证

适用于:Azure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics(仅限专用 SQL 池)

“仅限 Microsoft Entra 身份验证”是 Azure SQL 中可使服务仅支持 Microsoft Entra 身份验证的一项功能,它受 Azure SQL 数据库和 Azure SQL 托管实例的支持。

注意

Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。

仅限 Microsoft Entra 的身份验证也可用于独立服务器上的专用 SQL 池(前称 SQL DW)。 可为 Azure Synapse 工作区启用“仅限 Microsoft Entra 身份验证”。 有关详细信息,请参阅 Azure Synapse 工作区“仅限 Microsoft Entra 身份验证”。

当你启用仅支持 Microsoft Entra 的认证时,你会禁用 Azure SQL 环境中的 SQL 认证,包括来自 SQL 服务器管理员、登录和用户的连接。 只有使用 Microsoft Entra 认证的用户才能连接到服务器或数据库。

可以使用 Azure 门户、Azure CLI、PowerShell 或 REST API 启用或禁用“仅限 Microsoft Entra 身份验证”。 也可以在创建服务器期间使用 Azure 资源管理器 (ARM) 模板配置“仅限 Microsoft Entra 身份验证”。

有关 Azure SQL 身份验证的详细信息,请参阅身份验证和授权。

功能描述

当你启用 Microsoft Entra 仅认证时,你会在服务器或托管实例层面禁用 SQL 认证。 这一更改阻止了基于SQL认证凭证的任何认证。 SQL 认证用户无法连接到 Azure SQL 数据库 或托管实例的逻辑服务器,包括其所有数据库。 虽然 SQL 认证被禁用,但拥有适当权限的 Microsoft Entra 账户仍然可以创建新的 SQL 认证登录和用户。 新创建的SQL认证账户无法连接到服务器。 启用“仅限 Microsoft Entra 身份验证”不会删除现有的 SQL 身份验证登录名和用户帐户。 该功能仅阻止这些账户连接到服务器及为该服务器创建的任何数据库。

你也可以用 Azure Policy 强制创建启用仅支持 Microsoft Entra 认证的服务器。 有关详细信息,请参阅支持对 Azure SQL 进行“仅限 Microsoft Entra 身份验证”的 Azure Policy。

该服务还会在配置过程中生成服务器管理员名称,即使已禁用 SQL 认证,该名称仍可能出现在 Azure 门户中。 更多信息请参见 系统生成服务器管理员账户。

权限

作为高特权 Microsoft Entra 内置角色(例如 Azure 订阅所有者和参与者)成员的 Microsoft Entra 用户可以启用或禁用“仅限 Microsoft Entra 身份验证”。 此外,SQL 安全管理者角色也可以启用或禁用“仅限 Microsoft Entra 身份验证”功能。

SQL Server 贡献者和 SQL 托管实例 贡献者角色没有启用或禁用仅支持 Microsoft Entra 的认证功能的权限。 此限制与职责分离方法一致,用户可以在其中创建Azure SQL服务器或创建Microsoft Entra管理员,不能启用或禁用安全功能。

必需操作

以下操作已添加到 SQL 安全管理者角色,使其能够管理“仅限 Microsoft Entra 身份验证”功能。

  • Microsoft.Sql/servers/azureADOnlyAuthentications/*
  • Microsoft.Sql/servers/administrators/read - 只有访问 Azure 门户“Microsoft Entra ID”菜单的用户才需要此操作
  • Microsoft.Sql/managedInstances/azureADOnlyAuthentications/*
  • Microsoft.Sql/managedInstances/read

还可将上述操作添加到自定义角色,以管理仅 Microsoft Entra 身份验证。 有关详细信息,请参阅在 Microsoft Entra ID 中创建和分配自定义角色。

使用 API 管理“仅限 Microsoft Entra 身份验证”

重要

在启用“仅限 Microsoft Entra 身份验证”之前,必须先设置 Microsoft Entra 管理员。

必须使用 Azure CLI 2.14.2 或更高版本。

name 对应于服务器或实例名称的前缀(例如 myserver),resource-group 对应于服务器所属的资源(例如 myresource)。

Azure SQL 数据库

有关详细信息,请参阅 az sql server ad-only-auth。

在 SQL 数据库中启用或禁用

启用

az sql server ad-only-auth enable --resource-group myresource --name myserver

Disable

az sql server ad-only-auth disable --resource-group myresource --name myserver

检查 SQL 数据库中的状态

az sql server ad-only-auth get --resource-group myresource --name myserver

Azure SQL 托管实例

有关详细信息,请参阅 az sql mi ad-only-auth。

启用

az sql mi ad-only-auth enable --resource-group myresource --name myserver

Disable

az sql mi ad-only-auth disable --resource-group myresource --name myserver

检查 SQL 托管实例中的状态

az sql mi ad-only-auth get --resource-group myresource --name myserver

使用 T-SQL 检查“仅限 Microsoft Entra 身份验证”

使用 SERVERPROPERTY 函数IsExternalAuthenticationOnly,检查你的服务器或托管实例是否启用了仅支持 Microsoft Entra 认证。 1 表示该功能已启用,表示 0 该功能已被禁用。

SELECT SERVERPROPERTY('IsExternalAuthenticationOnly')

系统生成服务器管理员账户

当你为 Azure SQL 数据库 或启用仅支持 Microsoft Entra 认证的 Azure SQL 托管实例 创建逻辑服务器时,服务会生成一个服务器管理员名和一个随机密码。 生成的名称以随机字符串开头CloudSA,并在 Azure 门户中以服务器管理员登录方式出现。

账户存在是为了满足配置需求,而不是提供连接方式。 无论配置哪种资源类型,都需要SQL认证管理员值。 仅支持 Microsoft Entra 的认证会改变哪些认证方法可以在配置后建立连接,但它不会取消该配置要求,因此服务会生成满足连接所需的值。

看到生成的名称并不意味着SQL认证已启用。 启用仅限 Microsoft Entra 的身份验证时:

  • 任何SQL认证账户都无法连接,包括系统生成的管理员。
  • 生成的账户不是共享账户、后备方案,也不是应急访问途径。
  • 应用程序和管理员必须使用 Microsoft Entra 认证才能连接。
  • Microsoft Entra 管理员和其他经授权的 Microsoft Entra 主体仍然是受支持的管理方式。
  • 服务在配置后会永久移除控制平面上的密码。

注解

  • SQL Server 参与者可以设置或删除 Microsoft Entra 管理员,但不能设置“仅限 Microsoft Entra 身份验证”。 SQL 安全管理器无法设置或删除 Microsoft Entra 管理员,但可以设置“仅限 Microsoft Entra 身份验证”。 只有具有更高 Azure RBAC 角色或包含这两种权限的自定义角色的帐户才能设置或删除 Microsoft Entra 管理员,以及设置“仅限 Microsoft Entra 身份验证”。 参与者角色就是这样的一种角色。
  • 在 Azure 门户中启用或禁用“仅限 Microsoft Entra 身份验证”后,可以在“SQL 服务器”菜单中看到“活动日志”条目。 Azure 门户中的活动日志项目的屏幕截图。
  • 如果指定了 Microsoft Entra 管理员,则只有拥有适当权限的用户才能启用或禁用“仅限 Microsoft Entra 身份验证”设置。 如果未设置 Microsoft Entra 管理员,Microsoft Entra 仅限身份验证设置将保持非活动状态,无法启用或禁用。 如果未设置 Microsoft Entra 管理员,则使用 API 启用“仅限 Microsoft Entra 身份验证”也会失败。
  • 在已启用“仅限 Microsoft Entra 身份验证”的情况下,支持拥有适当权限的用户更改 Microsoft Entra 管理员。
  • 只允许拥有适当权限的用户在 Azure 门户中更改 Microsoft Entra 管理员以及启用或禁用“仅限 Microsoft Entra 身份验证”。 在 Azure 门户中执行一次“保存”即可完成这两项操作。 必须先设置 Microsoft Entra 管理员,才能启用仅限 Microsoft Entra 的身份验证。
  • 在启用“仅限 Microsoft Entra 身份验证”功能时,不支持删除 Microsoft Entra 管理员。 如果启用了“仅限 Microsoft Entra 身份验证”,则使用 API 移除 Microsoft Entra 管理员将会失败。
    • 如果已启用“仅限 Microsoft Entra 身份验证”设置,则 Azure 门户中的“删除管理员”按钮将处于非活动状态 。
  • 允许删除 Microsoft Entra 管理员和禁用“仅限 Microsoft Entra 身份验证”设置,但需要适当的用户权限才能完成操作。 在 Azure 门户中执行一次“保存”即可完成这两项操作。
  • 拥有适当权限的 Microsoft Entra 用户可以模拟现有的 SQL 用户。
    • 即使启用了“仅限 Microsoft Entra 身份验证”功能,也仍可以在 SQL 身份验证用户之间继续进行模拟。

SQL 数据库中仅使用 Microsoft Entra 身份验证的限制

如果为 SQL 数据库启用“仅限 Microsoft Entra 身份验证”,则不支持以下功能:

  • Azure SQL 数据库中的弹性作业
  • SQL 数据同步
  • 变更数据捕获(CDC)——如果你作为 Microsoft Entra 用户在 Azure SQL 数据库 中创建数据库并启用变更数据采集,SQL 用户无法禁用或更改 CDC 的工件。 然而,其他 Microsoft Entra 用户可以在同一数据库上启用或禁用 CDC。 同样,如果你以 SQL 用户身份创建 Azure SQL 数据库,则无法以 Microsoft Entra 用户身份启用或禁用 CDC
  • 使用 Azure SQL 托管实例进行事务复制 - 由于复制参与者之间的连接需要 SQL 身份验证,当启用 Microsoft Entra-only 身份验证时,如果利用事务复制将 Azure SQL 托管实例、本地 SQL Server 或 Azure VM SQL Server 实例中的更改推送到 Azure SQL 数据库中的数据库,这种场景不支持事务复制。
  • 用于 Microsoft Entra 组成员帐户的 EXEC AS 语句

Azure SQL 托管实例中“仅限 Microsoft Entra 身份验证”的限制

如果为 SQL 托管实例启用“仅限 Microsoft Entra 身份验证”,则不支持以下功能:

有关限制的详细信息,请参阅 SQL Server 与 Azure SQL 托管实例之间的 T-SQL 区别。