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

使用托管标识从一个 Azure 流分析 作业中访问 Azure SQL 数据库或 Azure Synapse Analytics。

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

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

Overview

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

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

  • 将 Active Directory 管理员添加到您的 SQL Server 或 Synapse 工作区,以为该资源启用 Microsoft Entra ID(托管身份)身份验证。

  • 接下来,在数据库中创建一个表示 Stream Analytics 作业身份的受限用户。 每当流分析作业与 SQL DB 或 Synapse SQL DB 资源交互时,此标识将用于检查流分析作业具有哪些权限。

  • 向您的 Stream Analytics 作业授予权限,以访问 SQL 数据库或 Synapse SQL 池。

  • 最后,将 Azure SQL 数据库 / Azure Synapse Analytics 添加为流分析作业中的输出。

先决条件

要使用此功能,你需要:

  • Azure 流分析 作业。

  • Azure SQL 数据库 资源

创建管理标识

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

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

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

    选择系统分配的托管标识

    Microsoft Entra ID为Stream Analytics作业的身份创建了一个服务主体。 Azure管理新创建的标识的生命周期。 删除流分析作业时,Azure会自动删除关联的标识(即服务主体)。

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

  4. 保存配置时,服务主体的对象 ID(OID)显示为主体 ID,如以下部分所示:

    显示为主体 ID 的对象 ID

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

选择Active Directory管理员

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

  1. 转到Azure SQL 数据库或Azure Synapse Analytics SQL 池资源。 选择资源所在的 SQL Server 或 Synapse 工作区。 可以在 服务器名称工作区名称旁边的资源概述页中找到指向这些资源的链接。

  2. 请在 SQL Server 和 Synapse Workspace 的“设置”中分别选择“Active Directory Admin”或“SQL Active Directory Admin”。 然后选择 “设置管理员”。

    Active Directory管理页

  3. 在Active Directory管理页上,搜索用户或组作为SQL Server的管理员,然后选择Select。 此用户可以在下一部分中创建独立数据库用户

    Add Active Directory admin

    Active Directory管理员页面显示Active Directory的所有成员和组。 显示为灰色的用户或组无法被选择,因为它们不被支持作为 Microsoft Entra 管理员。 请在 使用 Microsoft Entra 身份验证通过 SQL 数据库或 Azure Synapse 进行身份验证 Microsoft Entra 功能和限制 部分中查看支持的管理员列表。

  4. Active Directory admin 页上选择 Save。 更改管理员的过程需要几分钟时间。

创建包含的数据库用户

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

有关详细信息,请参阅 SQL 数据库和 Azure Synapse Analytics 的通用身份验证(SSMS 对 MFA 的支持)

  1. 使用 SQL Server Management Studio 连接到Azure SQL或Azure Synapse数据库。 User name 是具有 ALTER ANY USER 权限的Microsoft Entra用户。 在SQL Server上设置的管理员就是一个示例。 使用 Microsoft Entra ID – MFA通用认证

    连接 SQL Server

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

    可以通过选择Options 连接属性选项 连接到数据库来指定特定的 Azure SQL 或 Azure Synapse 数据库。

    SQL Server连接属性

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

    “新建防火墙规则”窗口

    1. 如果是,请转到Azure门户上的 SQL Server 或 Synapse 工作区资源。 在 “安全 ”部分下,打开 “防火墙”和“虚拟网络 ”或 “防火墙” 页。
    2. 添加一个可以任意命名的新规则。
    3. 使用“发件人” IP 地址作为“开始 IP”“新建防火墙规则”窗口。
    4. 使用新建防火墙规则窗口中的到 IP 地址作为结束 IP
    5. 选择 Save,然后再次尝试从SQL Server Management Studio进行连接。
  3. 连接后,创建专属数据库用户。 以下 SQL 命令创建一个与您的流分析作业同名的独立数据库用户。 请务必在 ASA_JOB_NAME周围包括括号。 使用以下 T-SQL 语法并运行查询。

    CREATE USER [ASA_JOB_NAME] FROM EXTERNAL PROVIDER;
    

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

    SELECT * FROM <SQL_DB_NAME>.sys.database_principals
    WHERE type_desc = 'EXTERNAL_USER'
    
  4. 为了让 Microsoft Entra ID 验证流分析作业是否有权访问 SQL 数据库,您需要授予 Microsoft Entra 与数据库进行通信的权限。 为此,请再次转到 Azure 门户中的 Firewalls 和虚拟网络Firewalls 页, 并启用 Allow Azure 服务和资源以访问此服务器workspace

    防火墙和虚拟网络

授予流分析作业权限

创建包含数据库用户并在门户中授予对 Azure 服务的访问权限后,如前一节所述,您的流分析作业凭借托管标识获得权限,允许其通过托管标识 CONNECT 到 Azure SQL 数据库资源。 向流分析作业授予 SELECTINSERT 权限,因为作业稍后在流分析工作流中需要这些权限。 SELECT 权限允许作业测试其与Azure SQL数据库中表的连接。 INSERT 权限允许在配置输入和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或Azure Synapse数据库,然后选择 Properties > 权限。 从权限菜单中,可以看到之前添加的流分析作业,并且可以根据需要手动授予或拒绝权限。

若要查看添加到 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 数据库 或 Azure Synapse 的输出

注释

使用 SQL 托管实例 (MI) 作为引用输入时,必须在SQL 托管实例中配置公共终结点。 配置 数据库 属性时,必须使用端口指定完全限定的域名。 例如: sampleserver.public.database.windows.net,3342

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

确保使用适当的输出架构在 SQL 数据库中创建表。 将 SQL 数据库输出添加到流分析作业时,需要提供此表的名称。 此外,请确保作业具有 SELECTINSERT 权限来测试连接并运行流分析查询。 如果尚未执行此操作,请参阅 “授予流分析作业权限 ”部分。

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

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

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

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

SQL 参考数据的其他步骤

使用 SQL 引用数据时,Azure 流分析 要求您配置作业的存储帐户。 该作业使用此存储帐户来存储与流分析作业相关的内容,例如 SQL 引用数据快照。
按照以下步骤设置关联的存储帐户:

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

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

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

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

    流分析作业的存储帐户设置页的屏幕截图。

重要

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

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

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

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

有关更多详细信息,请参阅前面的部分。

删除托管标识

仅当删除作业时,才删除为流分析作业创建的托管标识。 如果不删除作业,则无法删除托管标识。 如果不再想要使用托管标识,请更改输出的身份验证方法。 在删除作业之前,托管标识会继续存在,如果您决定再次使用托管身份验证,则会使用该标识。

后续步骤