如何在Azure Synapse中创建/编辑仅具备数据查询权限的自定义角色
Azure Synapse最小权限配置方案
可以实现,不需要修改现有内置角色,通过自定义RBAC角色搭配多层粒度权限配置就能完全匹配你的管控要求。Synapse的权限体系是分层管控的,不存在单一角色覆盖所有场景的情况,按下面步骤配置即可。
第一步:创建工作区级自定义RBAC角色,从管控面屏蔽Pipeline及无关权限
工作区级Azure RBAC是控制Synapse工作室功能入口访问权限的核心层,内置角色普遍权限冗余,自定义角色可以精准卡控权限范围:
- 角色仅开放以下和数据查询相关的管控权限,其余权限全部不授予:
Microsoft.Synapse/workspaces/read:基础工作区可见权限,无此权限用户无法正常进入工作区Microsoft.Synapse/workspaces/bigDataPools/usePool/action:允许用户使用Spark池提交查询作业Microsoft.Synapse/workspaces/sqlPools/usePool/action:允许用户连接内置无服务器SQL池
- 权限屏蔽规则:
- 所有和Pipelines、触发器、凭据管理、托管私有端点配置、工作区设置修改、工件发布/删除/写入相关的权限全部不授予,尤其是
Microsoft.Synapse/workspaces/pipelines/*全类权限直接排除,从入口层面彻底堵死Pipeline访问路径 - 不要给目标用户分配任何内置的Synapse管理员、Synapse参与者、Synapse管道操作员这类带写入、Pipeline操作权限的角色,仅绑定你创建的这个自定义角色即可
- 所有和Pipelines、触发器、凭据管理、托管私有端点配置、工作区设置修改、工件发布/删除/写入相关的权限全部不授予,尤其是
第二步:配置内置无服务器SQL池粒度权限,仅开放SELECT查询能力
SQL池的数据面权限独立于Azure RBAC,需要单独配置才能实现仅允许SELECT的要求:
- 先在无服务器SQL池的master库为用户创建登录映射,执行以下SQL:
-- 需在master库上下文执行 CREATE LOGIN [目标用户AAD账号] FROM EXTERNAL PROVIDER;
- 切换到用户需要访问的业务数据库,创建数据库用户并仅授予读权限:
-- 需在对应业务数据库上下文执行 CREATE USER [目标用户AAD账号] FROM EXTERNAL PROVIDER; -- 授予整库SELECT权限,如需更细粒度控制可单独授权特定Schema/表 EXEC sp_addrolemember 'db_datareader', '目标用户AAD账号';
- 权限校验:确认没有给用户分配
db_owner、db_datawriter、db_ddladmin这类高权限角色,保证用户执行INSERT、UPDATE、DROP、ALTER等非查询语句时会直接报权限不足。
第三步:配置Spark池与存储层只读权限
针对Spark查询和数据湖访问的场景,单独配置最小权限:
- Spark池层面:不给用户分配Spark池管理员、池配置修改权限,仅保留基础的作业提交权限即可
- 关联ADLS Gen2存储层面:给目标用户授予对应存储容器/路径的
Storage Blob Data Reader角色,不要授予存储贡献者、Blob数据参与者这类带写入、删除权限的角色,保证不管是无服务器SQL池查询外部表,还是Spark作业读湖数据,都只有读取权限,无法修改、删除湖内数据。
配置完成后校验点
用测试账号登录Synapse工作室逐一验证权限符合预期:
- 左侧导航栏的「集成」(Pipeline功能入口)访问时提示无权限,看不到任何已有管道、触发器,也无法新建相关资源
- 可以正常连接内置无服务器SQL池,SELECT查询执行正常,非查询类语句执行被拦截
- 可以正常提交Spark作业读取湖内数据,写入数据到存储时被权限拦截
- 看不到工作区管理设置页,无法修改工作区配置、添加删除用户、操作计算资源
内容的提问来源于stack exchange,提问作者Senthil Kumar
相关产品推荐
相关产品推荐

