使用托管标识验证外部表

外部表是引用存储在 Azure 数据资源管理器数据库外部的数据的架构实体。 可以定义外部表以引用 Azure 存储或 SQL Server 中的数据,并支持各种身份验证方法。

在本文中,你将了解如何创建使用托管标识进行身份验证的外部表。

先决条件

1 - 配置用于外部表的托管标识

托管标识分为两种类型:

  • 系统分配:系统分配的标识将连接到群集,删除该群集时也会删除该标识。 对于每个群集,只能分配一个系统分配的标识。

  • 用户分配:用户分配的托管标识是独立的 Azure 资源。 可以将多个用户分配的标识分配给群集。

选择以下选项卡之一来设置首选的托管标识类型。

  1. 按照步骤向群集添加用户分配的标识,并保存“对象(主体) ID”供以后使用。

  2. 运行 .alter-merge policy managed_identity 命令。 此命令对群集设置托管标识策略,这样就能将托管标识用于外部表。 将 <objectId> 替换为对象(主体)ID。

    .alter-merge cluster policy managed_identity ```[
        {
          "ObjectId": "<objectId>",
          "AllowedUsages": "ExternalTable"
        }
    ]```
    

    注意

    若要对特定数据库设置策略,请使用 database <DatabaseName> 而不是 cluster

2 - 授予托管标识对外部资源的权限

托管标识必须对外部资源拥有权限才能成功完成身份验证。

选择与相关外部资源类型对应的选项卡,并分配所需的权限。

下表显示了外部资源所需的权限。 若要从外部资源导入或查询数据,请为托管标识授予读取权限。 若要将数据导出到外部资源,请为托管标识授予写入权限。

外部数据存储 读取权限 写入权限 授予权限
Azure Blob 存储 存储 Blob 数据读者 存储 Blob 数据参与者 分配 Azure 角色
Data Lake Storage Gen2 存储 Blob 数据读取者 存储 Blob 数据参与者 分配 Azure 角色
Data Lake Storage Gen1 读取器 参与者 分配 Azure 角色

3 - 创建外部表

有两种支持使用托管标识进行身份验证的外部表:Azure 存储外部表SQL Server 外部表

选择以下选项卡之一来设置 Azure 存储或 SQL Server 外部表。

若要创建 Azure 存储外部表,请执行以下步骤:

  1. 基于存储连接字符串模板创建连接字符串。 此字符串指示要访问的资源及其身份验证信息。 指定托管标识身份验证方法

  2. 运行 .create 或 .alter external table 以创建表。 使用在上一步骤中获取的连接字符串作为 storageConnectionString 参数。

示例

以下命令创建 MyExternalTable,该表引用 Azure Blob 存储中 mystorageaccountmycontainer 中的 CSV 格式数据。 该表有两列,一列包含整数 x,另一列包含字符串 s。 连接字符串以 ;managed_identity=system 结尾,表示使用系统分配的托管标识进行身份验证以访问数据存储。

.create external table MyExternalTable (x:int, s:string) kind=storage dataformat=csv 
( 
    h@'https://mystorageaccount.blob.core.chinacloudapi.cn/mycontainer;managed_identity=system' 
)

注意

若要使用用户分配的托管标识进行身份验证,请将 system 替换为托管标识对象 ID。