使用托管标识访问 Azure 流分析作业的 Azure SQL 数据库

Azure 流分析支持对 Azure SQL 数据库输出接收器进行托管标识身份验证。 托管标识消除了基于用户的身份验证方法的如下限制:发生密码更改或用户令牌过期(每隔 90 天过期)时需要重新进行身份验证。 当你不再需要手动进行身份验证时,流分析部署可以完全自动化。

托管标识是 Microsoft Entra ID 中注册的托管应用程序,表示给定的流分析作业。 托管应用程序用于对目标资源进行身份验证。 本文介绍如何通过 Azure 门户为流分析作业的 Azure SQL 数据库输出启用托管标识。

概述

本文介绍使用托管标识身份验证模式将流分析作业连接到 Azure SQL 数据库 SQL 池所需的步骤。

  • 首先为流分析作业创建一个系统分配托管标识。 这是你的作业在 Microsoft Entra ID 中的标识。

  • 将 Active Directory 管理员添加到 SQL Server,这将为该资源启用 Microsoft Entra ID(托管标识)身份验证。

  • 接下来,在数据库中创建一个表示流分析作业标识的包含的用户。 每当流分析作业与 SQL DB 资源交互时,它将引用这个标识来检查流分析作业拥有哪些权限。

  • 向流分析作业授予访问 SQL 数据库池所需的权限。

  • 最后,在流分析作业中添加 Azure SQL 数据库作为输出。

先决条件

使用此功能需满足以下条件:

  • 有 Azure 流分析作业。

  • 有 Azure SQL 数据库资源。

创建托管标识

首先,创建 Azure 流分析作业的托管标识。

  1. Azure 门户中,打开 Azure 流分析作业。

  2. 从左侧导航菜单中,选择“配置”下的“托管标识”。 然后,选中“使用系统分配的托管标识”旁的框,然后选择“保存”。

    Select system-assigned managed identity

    在 Microsoft Entra ID 中为流分析作业的标识创建服务主体。 新建标识的生命周期将由 Azure 管理。 删除流分析作业时,Azure 会自动删除关联的标识(即服务主体)。

  3. 你还可以切换到用户分配的托管标识

  4. 保存配置后,服务主体的对象 ID (OID) 将列为主体 ID,如下所示:

    Object ID shown as Principal ID

    服务主体与流分析作业同名。 例如,如果作业的名称是 MyASAJob,则服务主体的名称也是 MyASAJob。

选择 Active Directory 管理员

创建托管标识后,选择 Active Directory 管理员。

  1. 导航到 Azure SQL 数据库 SQL 池资源,并相应地选择 SQL Server。 可在服务器名称或工作区名称附近的资源概述页中找到指向这些资源的链接 。

  2. 对于 SQL Server,请在“设置”下选择“Active Directory 管理员”或“SQL Active Directory 管理员”。 然后选择“设置管理员”。

    Active Directory admin page

  3. 在“Active Directory 管理员”页中,搜索将成为 SQL Server 管理员的某个用户或组,并单击“选择”。 这将是能够在下一个部分创建“包含的数据库用户”的用户。

    Add Active Directory admin

    “Active Directory 管理员”页会显示 Active Directory 的所有成员和组。 不能选择灰显的用户或组,因为他们无法充当 Microsoft Entra 管理员。 请参阅将 Microsoft Entra 身份验证用于 SQL 数据库的身份验证Microsoft Entra 功能和限制部分中的支持的管理员列表。

  4. 在“Active Directory 管理员”页中,选择“保存”。 更改管理员的过程只需要几分钟。

创建包含数据库用户

接下来,在 Azure SQL 中创建包含的数据库用户,该用户将映射到 Microsoft Entra 标识。 包含的数据库用户在主数据库中没有登录名,但它映射到与数据库关联的目录中的标识。 Microsoft Entra 标识可以是单独的用户帐户,也可以是组。 在这种情况下,你需要为流分析作业创建包含的数据库用户。

有关详细信息,请查看下面关于 Microsoft Entra 集成背景信息的文章:SQL 数据库和 Azure Synapse Analytics 的通用身份验证(对 MFA 的 SSMS 支持)

  1. 使用 SQL Server Management Studio 连接到 Azure SQL 数据库。 “用户名”是具有 ALTER ANY USER 权限的 Microsoft Entra 用户。 在 SQL Server 上设置的管理员是一个示例。 使用“使用 MFA 的 Microsoft Entra ID - Universal”身份验证。

    Connect to SQL Server

    服务器名称 <SQL Server name>.database.chinacloudapi.cn 在不同区域可能不同。 例如,中国地区应使用 <SQL Server name>.database.chinacloudapi.cn

    可以通过转到“选项”>“连接属性”>“连接到数据库”来指定特定的 Azure SQL 数据库。

    SQL Server connection properties

  2. 首次连接时,可能会遇到以下窗口:

    New firewall rule window

    1. 如果是这样,请在 Azure 门户中转到 SQL Server 资源。 在“安全”部分下,打开“防火墙和虚拟网络”/“防火墙”页 。
    2. 使用任意规则名称添加新规则。
    3. 使用“新建防火墙规则”窗口中的“发件人”IP 地址作为“开始 IP”。
    4. 使用“新建防火墙规则”窗口中的“收件人”IP 地址作为“结束 IP”。
    5. 选择“保存”,并尝试再次从 SQL Server Management Studio 进行连接。
  3. 连接后,创建包含的数据库用户。 下面的 SQL 命令将创建一个包含的数据库用户,其名称与你的流分析作业相同。 请确保在 ASA_JOB_NAME 两侧加上括号。 使用以下 T-SQL 语法并运行查询。

    CREATE USER [ASA_JOB_NAME] FROM EXTERNAL PROVIDER;
    

    若要验证是否已正确添加包含的数据库用户,请在相关数据库下的 SSMS 中运行以下命令,并检查 ASA_JOB_NAME 是否位于“名称”列下。

    SELECT * FROM <SQL_DB_NAME>.sys.database_principals
    WHERE type_desc = 'EXTERNAL_USER'
    
  4. 为了让 Microsoft 的 Microsoft Entra ID 验证流分析作业是否有权访问 SQL 数据库,我们需要向 Microsoft Entra 授权与数据库通信的权限。 为此,请再次转到 Azure 门户的“防火墙和虚拟网络”/“防火墙”页面,并启用“允许 Azure 服务和资源访问此服务器/工作区”。

    Firewall and virtual network

授予流分析作业权限

在创建包含数据库用户并按照上节所述在门户中授予其对 Azure 服务的访问权限后,流分析作业就具有了托管标识的权限,可通过托管标识连接到 Azure SQL 数据库资源。 我们建议你向流分析作业授予“选择”和“插入”权限,因为后面在流分析工作流中会需要这些权限 。 通过“选择”权限,此作业可以测试其与 Azure SQL 数据库中表的连接。 配置输入和 Azure SQL 数据库输出后,可以通过“插入”权限测试端到端流分析查询。

可以使用 SQL Server Management Studio 将这些权限授予流分析作业。 有关详细信息,请参阅 GRANT (Transact-SQL) 参考。

若要仅对数据库中某个表或对象授予权限,请使用以下 T-SQL 语法,并运行查询。

GRANT CONNECT TO ASA_JOB_NAME;
GRANT SELECT, INSERT ON OBJECT::TABLE_NAME TO ASA_JOB_NAME;

也可以在 SQL Server Management Studio 中右键单击 Azure SQL 数据库,然后选择“属性”>“权限”。 从“权限”菜单中,你可以看到之前添加的流分析作业,可以根据需要手动授予或拒绝权限。

若要查看已添加到 ASA_JOB_NAME 用户的所有权限,请在相关 DB 下的 SSMS 中运行以下命令:

SELECT dbprin.name, dbprin.type_desc, dbperm.permission_name, dbperm.state_desc, dbperm.class_desc, object_name(dbperm.major_id)
FROM sys.database_principals dbprin
LEFT JOIN sys.database_permissions dbperm
ON dbperm.grantee_principal_id = dbprin.principal_id
WHERE dbprin.name = '<ASA_JOB_NAME>'

创建 Azure SQL 数据库输出

注意

将 SQL 托管实例 (MI) 用作引用输入时,必须在 SQL 托管实例中配置公共终结点。 配置 database 属性时,必须使用端口指定完全限定的域名。 例如,“sampleserver.public.database.chinacloudapi.cn,3342”。

配置托管标识后,便可以将 Azure SQL 数据库输出添加到流分析作业。

请确保已在 SQL 数据库中使用适当的输出架构创建了一个表。 在向流分析作业添加 SQL 数据库输出时,此表的名称是必须填写的必需属性之一。 此外,请确保此作业具有“选择”和“插入”权限,以便测试连接并运行流分析查询。 如果尚未执行此操作,请参阅授予流分析作业权限部分。

  1. 返回到你的流分析作业,然后在“作业拓扑”下导航到“输出”页。

  2. 选择“添加”>“SQL 数据库”。 在 SQL 数据库输出接收器的输出属性窗口中,从“身份验证模式”下拉列表选择“托管标识”。

  3. 填写其余的属性。 若要详细了解如何创建 SQL 数据库输出,请参阅使用流分析创建 SQL 数据库输出。 完成后,选择“保存”。

  4. 单击“保存”后,资源的连接测试应该会自动触发。 成功完成后,你已成功将流分析作业配置为使用托管标识身份验证模式连接到 Azure SQL 数据库。

关于 SQL 参考数据的其他步骤

Azure 流分析要求在使用 SQL 参考数据时配置作业的存储帐户。 此存储帐户用于存储与流分析作业相关的内容,例如 SQL 参考数据快照。

按照以下步骤设置关联的存储帐户:

  1. 在“流分析作业”页面上,在左侧菜单的“配置”下选择“存储帐户设置”。

  2. 在“存储帐户设置”页面上,选择“添加存储帐户”。

  3. 按照说明配置存储帐户设置。

    Screenshot of the Storage account settings page of a Stream Analytics job.

重要

  • 若要使用连接字符串进行身份验证,必须禁用存储帐户防火墙设置。
  • 要使用托管标识进行身份验证,必须将流分析作业添加到存储 Blob 数据参与者角色和存储表数据参与者角色的存储帐户访问控制列表中。 如果不向作业授予访问权限,作业将无法执行任何操作。 有关如何授予访问权限的详细信息,请参阅使用 Azure RBAC 授予托管标识对另一资源的访问权限。

用户分配的托管标识的其他步骤

如果选择了用户分配的托管标识来将 ASA 连接到 Synapse,请重复这些步骤:

  1. 创建包含的数据库用户。 将 ASA_Job_Name 替换为用户分配的托管标识。 请参阅以下示例。
    CREATE USER [User-Assigned Managed Identit] FROM EXTERNAL PROVIDER;
    
  2. 向用户分配的托管标识授予权限。 将 ASA_Job_Name 替换为用户分配的托管标识。

有关更多详细信息,请参阅上述部分。

删除托管标识

仅当删除流分析作业后,才会删除为该作业创建的托管标识。 如果不删除作业,则无法删除其托管标识。 如果不想再使用托管标识,可以更改对输出的身份验证方法。 在删除作业之前,托管标识会始终存在,如果决定再次使用托管标识身份验证,将再次使用该标识。

后续步骤