如何通过用户托管标识限制ADF对Azure SQL DB的架构级访问
如何通过用户托管标识实现Azure SQL的架构/表级权限控制
首先明确核心结论:可以通过用户托管标识(UMI)实现Azure SQL的架构或表级权限限制,但不能直接用单个UMI区分不同人员的权限——必须为不同权限需求创建独立的UMI,再为每个UMI分配精细化权限,最后让对应人员使用的ADF资源绑定对应的UMI。
以下是具体操作步骤:
1. 创建对应权限组的用户托管标识
根据你的权限需求,在Azure门户中创建独立的UMI:
- 比如为需要访问X表的人员创建
UMI-X,为需要访问Y表的人员创建UMI-Y。
2. 在Azure SQL中为每个UMI创建数据库用户
以AAD管理员身份连接到目标Azure SQL数据库,执行T-SQL创建对应UMI的外部用户:
-- 为UMI-X创建数据库用户(替换为你的UMI名称) CREATE USER [UMI-X] FROM EXTERNAL PROVIDER; -- 为UMI-Y创建数据库用户 CREATE USER [UMI-Y] FROM EXTERNAL PROVIDER;
3. 分配架构/表级精细化权限
建议通过创建自定义角色来管理权限(便于后续维护),再将UMI用户添加到对应角色:
示例1:表级权限(让UMI-X仅访问SchemaA.TableX)
-- 创建专属角色 CREATE ROLE Role_X_Table_Access; -- 授予角色对目标表的SELECT权限(可根据需求添加INSERT/UPDATE等) GRANT SELECT ON SchemaA.TableX TO Role_X_Table_Access; -- 将UMI-X用户添加到该角色 ALTER ROLE Role_X_Table_Access ADD MEMBER [UMI-X];
示例2:架构级权限(让UMI-Y访问SchemaB下所有表)
CREATE ROLE Role_Y_Schema_Access; -- 授予角色对整个Schema的SELECT权限 GRANT SELECT ON SCHEMA::SchemaB TO Role_Y_Schema_Access; ALTER ROLE Role_Y_Schema_Access ADD MEMBER [UMI-Y];
4. 在ADF中绑定对应UMI到资源
为不同人员使用的ADF数据集/管道,配置Azure SQL连接时选择对应的UMI作为身份验证方式:
- 给X人员的ADF资源绑定
UMI-X - 给Y人员的ADF资源绑定
UMI-Y
关键注意事项
- 单个UMI是一个统一的身份实体,所有通过它发起的请求都会使用同一权限,无法直接区分不同人员。因此必须为不同权限组创建独立UMI。
- 如果是让AAD用户直接访问SQL而非通过ADF托管标识,无需绕UMI,直接创建AAD用户对应的SQL外部用户并授权即可。
内容的提问来源于stack exchange,提问作者AzSurya Teja
相关产品推荐
相关产品推荐

