你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。

Microsoft Entra authentication for Azure Synapse Analytics

本文详细介绍了在 Azure Synapse Analytics 中结合 Synapse SQL 使用 Microsoft Entra 身份验证。

Note

Microsoft Entra server principals 目前在 Azure Synapse Analytics 中现处于预览版。

要配置 Microsoft Entra 认证,请参见“配置和管理 Microsoft Entra 认证与 Azure Synapse Analytics”。

Overview

使用 Microsoft Entra ID,你可以集中管理数据资产中人和服务的标识。 通过将 Microsoft Entra 与 Azure Synapse Analytics 集成进行身份验证,您可以简化身份和权限管理,同时实现对数据连接的详细条件访问和治理。

使用 Microsoft Entra 身份验证具有以下优势:

  • 替换安全性较低的身份验证方法,如用户名和密码。
  • 消除或帮助阻止用户身份在服务器之间的扩散。
  • Microsoft Entra 组使数据库权限管理能够从单个帐户和操作组中抽象出来。
  • 允许在单一位置中轮换密码。
  • Microsoft Entra 的身份验证完全可以替代 SQL 身份验证。
  • Azure 资源的托管标识无需存储连接到数据库的服务的密码,也无需存储从数据库到其他 Azure 资源的连接的密码。
  • 启用现代安全控制功能,包括强大的多重身份验证,并提供一系列简单的验证选项,例如来电、短信、带有密码的智能卡或移动应用通知。
  • Microsoft Entra ID 可实现与许多新式身份验证协议的集成,包括 OpenID Connect、OAuth2.0、Kerberos 约束委派等。
  • 支持集中监视与数据源的连接。
  • 启用条件访问控制,例如需要合规的设备或身份验证方法才能成功连接。

Note

Microsoft Entra 身份验证仅支持源自 Microsoft Entra ID 的访问令牌,不支持第三方访问令牌。 Microsoft Entra ID 也不支持将 Microsoft Entra ID 查询重定向到第三方端点。 这一限制适用于所有SQL平台和支持Microsoft Entra认证的操作系统。

配置步骤

配置 Microsoft Entra 身份验证的一般步骤包括:

  1. 创建并配置 Microsoft Entra 租户。
  2. 创建一个 Azure Synapse 工作空间或独立专用 SQL 池。
  3. 在工作区或逻辑服务器上分配一名 Microsoft Entra 管理员。
  4. 在您的数据库中创建映射到 Microsoft Entra 标识的 SQL 主体。
  5. 配置客户端应用程序,以使用 Azure Identity 库和身份验证方法进行连接。
  6. 使用 Microsoft Entra 标识连接数据库。

支持的标识和身份验证方法

Azure Synapse Analytics 支持在 Synapse SQL 中使用以下 Microsoft Entra 身份作为登录名和用户(主体):

  • Microsoft Entra 用户:Microsoft Entra 租户中任何类型的用户,包括内部用户、外部用户、来宾和成员。 还支持与 Microsoft Entra ID 联合的 Active Directory 域的成员,并且可以将其配置为无缝单一登录。
  • 应用:存在于 Azure 中的应用程序可以使用服务主体或托管身份直接向 Azure Synapse Analytics 进行身份验证。 使用托管身份更受欢迎,因为认证无需密码,无需开发者管理的凭证。
  • Microsoft Entra 组可基于组织的组成员身份管理用户和应用程序访问权限,从而简化整个组织的访问管理。

对于用户标识,支持以下身份验证方法:

  • Microsoft Entra 集成(Windows 身份验证)由 Microsoft Entra 混合标识与 Active Directory [联合身份验证] 提供支持。
  • Microsoft Entra MFA 或多重身份验证,它需要除用户已知信息之外的额外安全检查。
  • Microsoft Entra 密码身份验证,该身份验证使用在 Microsoft Entra ID 中存储和管理的用户凭证。
  • Microsoft Entra 默认身份验证,该身份验证扫描应用程序计算机上的各种凭证缓存,并且可以使用用户令牌向 SQL 进行身份验证。

对于服务或工作负载标识,支持以下身份验证方法:

  • Azure 资源的托管标识,包括用户分配和系统分配的标识。 托管身份标识认证是基于令牌的,其中身份标识被分配给需要使用该标识进行身份验证的资源。 Azure 标识平台会验证该关系,从而实现无密码身份验证。
  • Microsoft Entra 服务主机名称和应用程序(客户端)密码。 不建议使用此身份验证方法,因为存在密码被猜测和泄露的风险。
  • Microsoft Entra 默认身份验证,该身份验证扫描应用程序计算机上的各种凭证缓存,并且可以使用应用程序令牌向 SQL 进行身份验证。

Microsoft Entra 管理员

要启用 Microsoft Entra 认证,必须为您的 Azure Synapse 工作空间或逻辑服务器设置 Microsoft Entra 管理员。 该管理员与SQL管理员并存。 Microsoft Entra 管理员可以是 Azure 租户中的用户、组、服务主体或托管身份。 一次只能配置一个身份。 移除 Microsoft Entra 管理员会禁用基于 Microsoft Entra 身份验证的连接,即使对于数据库中已有权限的现有 Microsoft Entra 用户,此类连接也会被禁用。

Tip

Microsoft Entra 群组使多个身份能够在服务器上充当 Microsoft Entra 管理员。 当管理员设置为组时,所有组成员都会继承 Microsoft Entra 管理员角色。 通过将管理员管理从服务器数据平面作转移到 Microsoft Entra ID 和组所有者手中,Microsoft Entra 组管理员提高了可管理性。 组可用于连接到 SQL 的所有 Microsoft Entra 标识,支持在服务器和数据库中进行一次性用户和权限配置,从而将所有用户管理工作交给组。

Microsoft Entra管理员扮演了特殊角色:这是第一个可以创建其他Microsoft Entra登录名和用户(统称为主体)的帐户。 管理员是服务器的 master 数据库中包含的数据库用户。 管理员帐户是每个用户数据库中 db_owner 角色的成员,并且以 dbo 用户身份输入每个用户数据库。 有关管理员帐户的详细信息,请参阅管理数据库和登录名。

Microsoft Entra 主体

Note

Microsoft Entra server principals (logins) 目前正處於 Azure Synapse Analytics 預覽階段。

你可以通过三种方式在 Azure Synapse Analytics 中将 Microsoft Entra 标识创建为主体:

  • 作为服务器主体或 登录名
  • 作为基于登录名的用户(数据库主体的类型)
  • 作为封闭数据库用户

Important

Azure SQL 的 Microsoft Entra 身份验证不与 Azure RBAC 集成。 要使用 Microsoft Entra 身份连接到 Azure SQL 并执行查询,你需要在它们需要访问的数据库中创建这些 Microsoft Entra 主体。 SQL Server Contributor 和 SQL DB Contributor 角色负责保护与管理相关的部署操作,而非数据库连接访问。

专用 SQL 池中的登录(服务器主体)

Microsoft Entra 身份的 Server principals(logins)目前为 Azure Synapse Analytics 专用 SQL 池预览版。

以下 T-SQL 演示如何创建 Microsoft Entra 登录名:

CREATE LOGIN [MSEntraUser] FROM EXTERNAL PROVIDER

Microsoft Entra 登录名在 sys.server_principals 中具有以下属性值:

Property Value
SID (安全标识符) Microsoft Entra 标识的对象 ID 的二进制表示形式
类型 E = Microsoft Entra ID 中的外部登录名或应用程序
X = 来自 Microsoft Entra ID 的外部组
类型描述 用于 Microsoft Entra 登录或应用的 EXTERNAL_LOGIN
Microsoft Entra 组中的 EXTERNAL_GROUP

基于登录名的用户

以登录为基础的用户会继承分配给其 Microsoft Entra 登录的服务器级角色和权限。

以下 T-SQL 演示如何为 Microsoft Entra 标识创建基于登录名的用户:

CREATE USER [MSEntraUser] FROM LOGIN [MSEntraUser]

下表详细介绍了 sys.database_principals 中基于 Microsoft Entra 登录名的用户属性值:

Property Value
SID (安全标识符) 微软 Entra 身份对象 ID 的二进制表示形式,加上 “AADE”
类型 E = Microsoft Entra ID 中的外部登录名或应用程序
X = 来自 Microsoft Entra ID 的外部组
类型描述 用于 Microsoft Entra 登录或应用的 EXTERNAL_LOGIN
Microsoft Entra 组中的 EXTERNAL_GROUP

受限的数据库用户

包含的数据库用户具有可移植性,可随数据库一起迁移。 它们与服务器或实例中定义的身份无关联,你可以轻松地将它们和数据库一起从一个服务器或实例迁移到另一个,而不会造成中断。

以下 T-SQL 演示如何为 Microsoft Entra 标识创建包含的数据库用户:

CREATE USER [MSEntraUser] FROM EXTERNAL PROVIDER

基于 Microsoft Entra 数据库的用户与 sys.database_principals 中基于登录的用户具有相同的属性值,SID 的构造方式除外:

Property Value
SID (安全标识符) Microsoft Entra 标识的对象 ID 的二进制表示形式
类型 E = Microsoft Entra ID 中的外部登录名或应用程序
X = 来自 Microsoft Entra ID 的外部组
类型描述 用于 Microsoft Entra 登录或应用的 EXTERNAL_LOGIN
Microsoft Entra 组中的 EXTERNAL_GROUP

若要获取 SID 所基于的原始 Microsoft Entra GUID,请使用以下 T-SQL 转换:

SELECT CAST(sid AS UNIQUEIDENTIFIER) AS EntraID FROM sys.database_principals

Caution

你可能会无意中创建一个独立 Microsoft Entra 数据库用户,其名称与服务器或实例级别的 Microsoft Entra 登录名相同。 由于安全主体之间没有连接,数据库用户不会继承服务器登录的权限。 连接请求中身份可能被混淆,导致行为未定义。

使用以下 T-SQL 查询来确定数据库用户是基于登录名的用户还是包含的数据库用户:

SELECT CASE
    WHEN CONVERT(VARCHAR(100), sid, 2) LIKE '%AADE' AND len(sid) = 18 THEN 'login-based user'
    ELSE 'contained database user'
    END AS user_type,
    *
FROM sys.database_principals WHERE TYPE = 'E' OR TYPE = 'X'

使用以下 T-SQL 查询查看数据库中的所有 Microsoft Entra 主体:

SELECT
  name,
  CAST(sid AS UNIQUEIDENTIFIER) AS EntraID,
  CASE WHEN TYPE = 'E' THEN 'App/User' ELSE 'Group' AS user_type,
  sid
FROM sys.database_principals WHERE TYPE = 'E' OR TYPE = 'X'

仅使用 Microsoft Entra 身份验证

当你启用仅 Microsoft Entra 身份验证时,将禁用 SQL 身份验证。 你不能用SQL认证来连接工作区、SQL池或数据库。

若要开始,请参见 “配置仅限 Microsoft Entra 身份验证”。

多重身份验证 (MFA)

Microsoft Entra 多重身份验证是 Microsoft 基于云的标识和访问管理服务提供的安全功能。 多重身份验证要求用户在密码之外提供额外的验证步骤,从而增强用户登录的安全性。

Microsoft Entra 多重身份验证可帮助保护对数据和应用程序的访问,同时可以满足用户对简单登录过程的需求。 MFA 通过要求用户提供两个或两个以上的身份验证因素,为用户登录添加了额外的安全层。 这些因素通常包括用户知道的东西(密码)、用户拥有的东西(智能手机或硬件令牌),以及/或用户自身的东西(生物识别数据)。 通过结合多种因素,MFA 可显著降低未经授权的访问的可能性。

多因素认证是 Azure Synapse Analytics 支持的认证方法。

要开始,请参见配置 Microsoft Entra 多因素认证。

Microsoft Entra B2B 支持

所有 SQL 产品中的 Microsoft Entra 身份验证还支持 Microsoft Entra B2B 协作,从而使企业能够邀请来宾用户与其组织协作。 来宾用户可以作为单个用户或 Microsoft Entra 组的成员连接到数据库。

Microsoft Entra 与 Active Directory 联合身份验证的信任体系结构

Microsoft Entra ID 还与熟悉的标识和访问管理解决方案(如 Active Directory)集成。 通过混合加入您的本地 Active Directory,您可以启用通过 Microsoft Entra ID 联合的 Windows 身份,使用单点登录凭证连接到 Azure Synapse Analytics。

对于联合身份验证,Microsoft Entra ID 提供两种安全身份验证方法:直通身份验证和密码哈希身份验证。 如果考虑将本地 Active Directory 联合到 Microsoft Entra ID,请查看为 Microsoft Entra 混合标识解决方案选择正确的身份验证方法。

有关 Microsoft Entra 混合标识的设置和同步的详细信息,请参阅以下文章:

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 或 Azure Synapse 资源。

Permissions

Microsoft Entra 管理员分配的权限与 Azure Synapse Analytics 中分配给其他主体的权限不同。 在某些情况下,Azure Synapse Analytics 还需要 Microsoft Graph 权限才能使用 Microsoft Entra 认证。

管理员权限

创建 Microsoft Entra 管理员时,将为其分配以下权限和角色:

  • 每个数据库的 db_owner

Azure Synapse Analytics 权限

主体需要在数据库中拥有 ALTER ANY USER 权限以便创建用户。

默认情况下,服务器管理员账户、带有 CONTROL ON DATABASE 的数据库用户以及属于 db_owner 数据库角色的成员拥有 ALTER ANY USER 权限。

要在 Azure SQL 中创建 Microsoft Entra 主体,请求身份必须查询 Microsoft Graph 以获取主体的详细信息。 在初始部署时,唯一可以查询 Microsoft Graph 的身份是 Microsoft Entra 管理员。因此,管理员必须是第一个创建其他 Microsoft Entra 主体对象的身份。 之后,管理员可以将ALTER ANY USER分配给其他主体,使他们能够创建其他 Microsoft Entra 主体。

使用 Microsoft Entra 身份验证进行零接触部署

由于 Microsoft Entra 管理员必须是第一个连接到数据库并创建其他 Microsoft Entra 用户的身份,添加你部署基础设施的身份作为管理员会很有帮助。 然后,部署可以执行初始设置,例如创建其他 Microsoft Entra 主体并为其分配权限。 部署时,可以使用 PowerShell ARM 模板等工具来编写自动创建服务主体的脚本。 Azure SQL 目前不支持原生 API 来配置用户创建和权限管理。 你只能通过直接连接到SQL实例来执行这些操作。

Microsoft Graph 权限

若要创建 Microsoft Entra 主体和其他几种应用场景,Azure SQL 需要进行 Microsoft Graph 调用,以检索有关 Microsoft Entra ID 中的标识的信息,并验证其是否存在。 为此,SQL 进程必须在客户租户内拥有或获得 Microsoft Graph 的读取权限。 您可以通过多种方式实现这种访问:

  • 如果执行命令的SQL主体是用户身份,你无需在SQL实例上授予额外权限来查询Microsoft Graph。
  • 如果执行命令的SQL主体是服务身份,如服务主体或托管身份,Azure SQL实例需要自身权限来查询Microsoft Graph。
    • 将应用权限分配给逻辑服务器或托管实例的主服务器标识(托管标识)。 SQL 进程可以使用主服务器标识向租户中的其他 Azure 服务进行身份验证,例如 Microsoft Graph。 下表解释了各种场景以及命令成功执行所需的 Microsoft Graph 权限。
Scenario 最低权限
CREATE USER或CREATE LOGIN,对于 Microsoft Entra 服务主体或托管身份 Application.Read.All
CREATE USER或者CREATE LOGIN针对 Microsoft Entra 用户 User.Read.All
CREATE USER或CREATE LOGIN针对 Microsoft Entra 组 组成员读取所有 (GroupMember.Read.All)

Tip

目录阅读器角色是你可以分配给标识的最小范围角色,涵盖所有必要的权限。 通过使用角色,你可以将它们分配给 Microsoft Entra 安全组,这使管理从对单个实体的管理中抽离,转为按概念组管理。

工具支持

SQL Server Management Studio (SSMS) 支持许多 Microsoft Entra 身份验证连接选项,包括多重身份验证。

从 2015 版开始,适用于 Visual Studio 的 SQL Server Data Tools (SSDT) 支持使用 Microsoft Entra ID 进行密码、集成和交互式身份验证。 有关详细信息,请参阅 SQL Server Data Tools (SSDT) 中的 Microsoft Entra ID 支持。

  • 目前,SSDT 对象资源管理器 不显示 Microsoft Entra 用户。 解决方法是在 sys.database_principals 中查看这些用户。

最低版本

要在Azure Synapse Analytics中使用Microsoft Entra认证,使用这些工具时需要以下最低版本:

  • SQL Server Management Studio (SSMS) 18.6 或更高版本
  • Visual Studio 2015 的 SQL Server Data Tools,版本 14.0.60311.1(2016 年 4 月)或更高版本
  • 用于 SQL Server 的 .NET Framework 数据提供程序,最低版本 .NET Framework 4.6
  • 从版本 15.0.1 开始,sqlcmd 实用工具和 bcp 实用工具支持使用多重身份验证的 Active Directory 交互式身份验证。
  • Microsoft JDBC Driver 6.0 for SQL Server 支持 Microsoft Entra 身份验证。 另外,请参阅设置连接属性。

将 Microsoft Entra 连接到 Azure Synapse Analytics

在为你的 Azure SQL 资源配置 Microsoft Entra 认证后,你可以通过 SQL Server Management Studio、SQL Server Data Tools 和客户端应用程序连接。

Limitations

在使用 Azure Synapse Analytics 进行 Microsoft Entra 认证时,请考虑以下限制:

  • 属于超过 2048 个 Microsoft Entra 安全组的成员的 Microsoft Entra 用户和服务主体(Microsoft Entra 应用程序)不受支持,且无法登录数据库。

  • 不支持以下系统功能,并在由 Microsoft Entra 主体执行时返回 NULL 值:

    • SUSER_ID()
    • SUSER_NAME(<ID>)
    • SUSER_SNAME(<SID>)
    • SUSER_ID(<name>)
    • SUSER_SID(<name>)
  • 我们建议将连接超时值设置为 30 秒。

  • 属于某个组且该组是db_owner数据库角色成员的 Microsoft Entra 用户在尝试在 Azure Synapse Analytics 中使用 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问题,请将 Microsoft Entra 用户的标识直接添加到db_owner角色。

  • Azure Synapse Analytics 不会为通过 Microsoft Entra 组成员登录的用户创建隐式用户。 因此,即使 Microsoft Entra 组是拥有这些权限的角色成员,需要分配所有权的操作也可能失败。

    例如,通过具有 db_ddladmin 角色的 Microsoft Entra 组登录到数据库的用户,如果没有显式定义的架构,如表、视图或类型,则无法执行 CREATE SCHEMA、ALTER SCHEMA 以及其他对象创建语句。 若要解决此问题,必须为该用户创建 Microsoft Entra 用户,或者更改 Microsoft Entra 组的设置,以便分配一个如 DEFAULT_SCHEMA 的角色。

  • 移除 Microsoft Entra 管理员会导致无法进行 Microsoft Entra 身份验证连接。