使用托管标识运行连续导出作业
适用于:✅Azure 数据资源管理器
在以下情况下,应使用托管标识配置连续导出作业:
- 当外部表使用模拟身份验证时。
- 当查询引用其他数据库中的表时。
- 当查询引用启用了行级别安全策略的表时。
使用托管标识配置的连续导出作业将代表该托管标识执行。
本文介绍了如何配置系统分配或用户分配的托管标识,以及使用该标识创建连续导出作业。
先决条件
配置托管标识
托管标识分为两种类型:
系统分配:系统分配的标识将连接到群集,删除该群集时也会删除该标识。 对于每个群集,只能分配一个系统分配的标识。
用户分配:用户分配的托管标识是独立的 Azure 资源。 可以将多个用户分配的标识分配给群集。
选择以下选项卡之一来设置首选的托管标识类型。
按照步骤添加用户分配的标识。
在 Azure 门户中,在托管标识资源的左侧菜单中选择“属性”。 复制并保存“租户 ID”和“主体 ID”,以便在后续步骤中使用。
运行以下 .alter-merge policy managed_identity 命令,将
<objectId>
替换为在上一步骤中获取的托管标识对象 ID。 此命令对群集设置托管标识策略,以便能够将托管标识用于连续导出。.alter-merge cluster policy managed_identity ```[ { "ObjectId": "<objectId>", "AllowedUsages": "AutomatedFlows" } ]```
注意
若要对特定数据库设置策略,请使用
database <DatabaseName>
而不是cluster
。运行以下命令,以向托管标识授予对用于连续导出的所有数据库(例如包含外部表的数据库)的数据库查看者权限。
.add database <DatabaseName> viewers ('aadapp=<objectId>;<tenantId>')
请将
<DatabaseName>
替换为相关数据库,将<objectId>
替换为在步骤 2 中获取的托管标识主体 ID,将<tenantId>
替换为在步骤 2 中获取的 Microsoft Entra ID 租户 ID。
设置一个外部表
外部表引用 Azure Blob 存储、Azure Data Lake Gen1 和 Azure Data Lake Gen2 等 Azure 存储或 SQL Server 中的数据。
选择以下选项卡之一来设置 Azure 存储或 SQL Server 外部表。
基于存储连接字符串模板创建连接字符串。 此字符串指示要访问的资源及其身份验证信息。 对于连续导出流,我们建议使用模拟身份验证。
运行 .create 或 .alter external table 以创建表。 使用在上一步骤中获取的连接字符串作为 storageConnectionString 参数。
例如,以下命令创建
MyExternalTable
,该表引用 Azure Blob 存储中mystorageaccount
的mycontainer
中的 CSV 格式数据。 该表有两列,一列包含整数x
,另一列包含字符串s
。 连接字符串以;impersonate
结尾,表示使用模拟身份验证来访问数据存储。.create external table MyExternalTable (x:int, s:string) kind=storage dataformat=csv ( h@'https://mystorageaccount.blob.core.chinacloudapi.cn/mycontainer;impersonate' )
授予托管标识对相关外部数据存储的写入权限。 托管标识之所以需要写入权限,是因为连续导出作业代表该托管标识将数据导出到数据存储。
外部数据存储 所需的权限 授予权限 Azure Blob 存储 存储 Blob 数据参与者 分配 Azure 角色 Data Lake Storage Gen2 存储 Blob 数据参与者 分配 Azure 角色 Data Lake Storage Gen1 参与者 分配 Azure 角色
创建一个连续导出作业
选择以下选项卡之一来创建代表用户分配或系统分配的托管标识运行的连续导出作业。
运行 .create-or-alter continuous-export 命令并将 managedIdentity
属性设置为托管标识对象 ID。
例如,以下命令创建一个名为 MyExport
的连续导出作业,以代表用户分配的托管标识将 MyTable
中的数据导出到 MyExternalTable
。 <objectId>
应是托管标识对象 ID。
.create-or-alter continuous-export MyExport over (MyTable) to table MyExternalTable with (managedIdentity=<objectId>, intervalBetweenRuns=5m) <| MyTable