使用 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 身份验证”

在 Azure SQL 环境中启用“仅限 Microsoft Entra 身份验证”时,将禁用 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 身份验证”功能的服务器。 有关详细信息,请参阅支持“仅限 Microsoft Entra 身份验证”的 Azure Policy

权限

作为高特权 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 Database

有关详细信息,请参阅 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') 

注解

  • 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 身份验证”,则不支持以下功能:

  • Microsoft Entra 服务器主体支持Azure SQL 数据库服务器角色,但如果 Microsoft Entra 登录名为组,则不支持。
  • 弹性作业
  • SQL 数据同步
  • 更改数据捕获 (CDC) - 如果以 Microsoft Entra 用户身份在 Azure SQL 数据库中创建数据库并对其启用变更数据捕获,则 SQL 用户将不能禁用或更改 CDC 项目。 但是,另一个 Microsoft Entra 用户将能够在同一数据库上启用或禁用 CDC。 同样,如果以 SQL 用户身份创建 Azure SQL 数据库,则无法以 Microsoft Entra 用户身份启用或禁用 CDC
  • 事务复制 - 由于复制参与者之间的连接需要 SQL 身份验证,因此在已启用“仅限 Microsoft Entra 身份验证”的情况下,对于使用事务复制将 Azure SQL 托管实例、本地 SQL Server 或 Azure VM SQL Server 实例中所做的更改推送到 Azure SQL 数据库中数据库的方案,SQL 数据库不支持事务复制
  • 针对 Microsoft Entra 组成员帐户的 EXEC AS 语句

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

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

  • 事务复制
  • 托管实例中的 SQL 代理作业支持“仅限 Microsoft Entra 身份验证”。 但是,作为有权访问托管实例的 Microsoft Entra 组成员的 Microsoft Entra 用户不能拥有 SQL 代理作业
  • 针对 Microsoft Entra 组成员帐户的 EXEC AS 语句

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

后续步骤