使用托管标识验证外部表
外部表是引用存储在 Azure 数据资源管理器数据库外部的数据的架构实体。 可以定义外部表以引用 Azure 存储或 SQL Server 中的数据,并支持各种身份验证方法。
在本文中,你将了解如何创建使用托管标识进行身份验证的外部表。
先决条件
托管标识分为两种类型:
选择以下选项卡之一来设置首选的托管标识类型。
按照步骤向群集添加用户分配的标识,并保存“对象(主体) ID”供以后使用。
运行 .alter-merge policy managed_identity 命令。 此命令对群集设置托管标识策略,这样就能将托管标识用于外部表。 将 <objectId>
替换为对象(主体)ID。
.alter-merge cluster policy managed_identity ```[
{
"ObjectId": "<objectId>",
"AllowedUsages": "ExternalTable"
}
]```
注意
若要对特定数据库设置策略,请使用 database <DatabaseName>
而不是 cluster
。
按照步骤向群集添加系统分配的标识。
运行以下 .alter-merge managed_identity 命令。 此命令对群集设置托管标识策略,这样就能将托管标识用于外部表。
.alter-merge cluster policy managed_identity ```[
{
"ObjectId": "system",
"AllowedUsages": "ExternalTable"
}
]```
注意
若要对特定数据库设置策略,请使用 database <DatabaseName>
而不是 cluster
。
2 - 授予托管标识对外部资源的权限
托管标识必须对外部资源拥有权限才能成功完成身份验证。
选择与相关外部资源类型对应的选项卡,并分配所需的权限。
下表显示了外部资源所需的权限。 若要从外部资源导入或查询数据,请为托管标识授予读取权限。 若要将数据导出到外部资源,请为托管标识授予写入权限。
外部数据存储 |
读取权限 |
写入权限 |
授予权限 |
Azure Blob 存储 |
存储 Blob 数据读者 |
存储 Blob 数据参与者 |
分配 Azure 角色 |
Data Lake Storage Gen2 |
存储 Blob 数据读取者 |
存储 Blob 数据参与者 |
分配 Azure 角色 |
Data Lake Storage Gen1 |
读取器 |
参与者 |
分配 Azure 角色 |
若要从 SQL 数据库导入或查询数据,请为托管标识授予表 SELECT 权限。 若要将数据导出到 SQL 数据库,请为托管标识授予 CREATE、UPDATE 和 INSERT 权限。 有关详细信息,请参阅权限。
要从 Cosmos DB 数据库导入或查询数据,请为托管标识授予读取权限。
有关详细信息,请参阅权限。
3 - 创建外部表
有两种支持使用托管标识进行身份验证的外部表:Azure 存储外部表和 SQL Server 外部表。
选择以下选项卡之一来设置 Azure 存储或 SQL Server 外部表。
若要创建 Azure 存储外部表,请执行以下步骤:
基于存储连接字符串模板创建连接字符串。 此字符串指示要访问的资源及其身份验证信息。 指定托管标识身份验证方法。
运行 .create 或 .alter external table 以创建表。 使用在上一步骤中获取的连接字符串作为 storageConnectionString 参数。
示例
以下命令创建 MyExternalTable
,该表引用 Azure Blob 存储中 mystorageaccount
的 mycontainer
中的 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。
若要创建 SQL Server 外部表,请执行以下步骤:
创建 SQL Server 连接字符串。 此字符串指示要访问的资源及其身份验证信息。 指定托管标识身份验证方法。
运行 .create 或 .alter external table 命令以创建表。 使用连接字符串作为 SqlConnectionString 参数。
示例
以下命令创建 MySqlExternalTable
,该表引用 SQL Server 的 MyDatabase
中的 MySqlTable
表。 该表有两列,一列包含整数 x
,另一列包含字符串 s
。 连接字符串包含 ;Authentication="Active Directory Managed Identity";User Id=123456789
,指示使用对象 ID 为 123456789
的用户分配的托管标识来访问表。
.create external table MySqlExternalTable (x:int, s:string) kind=sql table=MySqlTable
(
h@'Server=tcp:myserver.database.chinacloudapi.cn,1433;Authentication="Active Directory Managed Identity";User Id=123456789;Initial Catalog=MyDatabase;'
)
注意
若要使用系统分配的托管标识进行身份验证,请删除 ;User Id={object_id}
并仅指定 ;Authentication="Active Directory Managed Identity"
。
要创建 Cosmos DB 外部表,请执行以下步骤:
创建 Cosmos DB 连接字符串。 此字符串指示要访问的资源及其身份验证信息。 指定托管标识身份验证方法。
运行 .create 或 .alter external table 命令以创建表。 使用连接字符串作为 SqlConnectionString 参数。
示例
用户分配的托管标识
以下命令会创建 MyCosmosDbExternalTable
,以引用 Cosmos DB 帐户 mycosmos
的数据库 MyDatabase
中 MyCollection
的数据。
- 连接字符串包含
;Authentication="Active Directory Managed Identity";User Id=123456789
,指示使用对象 ID 为 123456789
的用户分配的托管标识来访问表。
.create external table MyCosmosDbExternalTable (x:int, s:string) kind=sql
(
h@'AccountEndpoint=https://mycosmos.documents.azure.cn:443/;Database=MyDatabase;Collection=MyCollection;Authentication="Active Directory Managed Identity";User Id=123456789;'
)
with
(
sqlDialect = "CosmosDbSQL"
)
系统分配的托管标识
连接字符串仅包含 ;Authentication="Active Directory Managed Identity";
,指示使用系统分配的托管标识
.create external table MyCosmosDbExternalTable (x:int, s:string) kind=sql
(
h@'AccountEndpoint=https://mycosmos.documents.azure.cn:443/;Database=MyDatabase;Collection=MyCollection;Authentication="Active Directory Managed Identity";'
)
with
(
sqlDialect = "CosmosDbSQL"
)
相关内容