如何通过Az CLI与AAD组配置Azure Synapse架构RBAC访问权限
解决Azure Synapse Schema级RBAC配置问题(Az CLI方式)
一、Synapse RBAC的正确Scope格式
你不需要获取schema的ID,Synapse角色分配的scope采用路径格式而非GUID。针对SQL池中的schema,scope格式如下:
- 专用SQL池:
/workspaces/{你的Synapse工作区名}/sqlPools/{SQL池名}/databases/{数据库名}/schemas/{schema名} - 无服务器SQL池(数据库固定为
master):/workspaces/{你的Synapse工作区名}/sqlPools/sqlondemand/databases/master/schemas/{schema名}
二、Az CLI配置Synapse RBAC权限命令
1. 给AAD组G1配置全架构访问
直接给SQL池级的Reader角色即可覆盖所有schema,无需逐个配置:
# 专用SQL池 az synapse role assignment create --workspace-name SynapseID --role "Synapse SQL Pool Reader" --assignee {G1的AAD组ID} --scope /workspaces/SynapseID/sqlPools/{你的SQL池名} # 无服务器SQL池 az synapse role assignment create --workspace-name SynapseID --role "Synapse SQL On-Demand Reader" --assignee {G1的AAD组ID} --scope /workspaces/SynapseID/sqlPools/sqlondemand
2. 给AAD组G2配置仅B/C schema访问
针对单个schema分配Reader角色,分别执行命令:
# 专用SQL池 - 配置schema B az synapse role assignment create --workspace-name SynapseID --role "Synapse SQL Pool Reader" --assignee {G2的AAD组ID} --scope /workspaces/SynapseID/sqlPools/{你的SQL池名}/databases/{数据库名}/schemas/B # 专用SQL池 - 配置schema C az synapse role assignment create --workspace-name SynapseID --role "Synapse SQL Pool Reader" --assignee {G2的AAD组ID} --scope /workspaces/SynapseID/sqlPools/{你的SQL池名}/databases/{数据库名}/schemas/C # 无服务器SQL池 - 配置schema B az synapse role assignment create --workspace-name SynapseID --role "Synapse SQL On-Demand Reader" --assignee {G2的AAD组ID} --scope /workspaces/SynapseID/sqlPools/sqlondemand/databases/master/schemas/B
三、更优的细粒度权限控制方案(SQL GRANT)
Synapse RBAC在schema层级的灵活性有限,更推荐用SQL权限语句直接配置,通过Az CLI执行即可:
1. 登录到Synapse SQL池
# 专用SQL池登录 az synapse sql pool connect --workspace-name SynapseID --name {你的SQL池名} --auth-type AAD # 无服务器SQL池登录 az synapse sql on-demand connect --workspace-name SynapseID --auth-type AAD
2. 执行GRANT语句配置权限
将以下SQL保存为grant_permissions.sql文件:
-- 给G1授予所有schema的SELECT权限(访问视图需该权限) GRANT SELECT ON SCHEMA::A TO [G1组名]; GRANT SELECT ON SCHEMA::B TO [G1组名]; GRANT SELECT ON SCHEMA::C TO [G1组名]; -- 给G2仅授予B/C schema的SELECT权限 GRANT SELECT ON SCHEMA::B TO [G2组名]; GRANT SELECT ON SCHEMA::C TO [G2组名];
然后用Az CLI执行:
# 专用SQL池执行SQL文件 az synapse sql pool query --workspace-name SynapseID --name {你的SQL池名} --file-path ./grant_permissions.sql # 无服务器SQL池执行SQL文件 az synapse sql on-demand query --workspace-name SynapseID --file-path ./grant_permissions.sql
注意事项
- 确保Az CLI已安装
synapse扩展,未安装则执行:az extension add --name synapse - 执行命令前,你的账号需拥有
Synapse Administrator或Owner权限,才能分配角色或执行GRANT语句
内容的提问来源于stack exchange,提问作者Jakub Jón
相关产品推荐
相关产品推荐

