Azure Synapse链接服务配置问题:托管身份连接自建MSSQL失败
问题解决指南:Synapse链接服务配置(托管身份连接自建MSSQL)
一、为什么IAM界面看不到Synapse相关角色?
Synapse存在两套权限管控体系,需区分清楚:
- Azure RBAC:作用于订阅/资源组/Synapse工作区级,在Azure门户的Synapse工作区「访问控制(IAM)」页面配置。若在此处搜不到Synapse角色,检查:
- 是否打开的是Synapse工作区的IAM页面,而非订阅或资源组的IAM页面;
- 清除角色搜索框的过滤条件,直接输入「Synapse」关键词,即可找到如「Azure Synapse Administrator」「Azure Synapse Contributor」等角色。
- Synapse专用RBAC:作用于Synapse工作区内部(如管道、SQL池等资源),需在Synapse Studio内配置:进入「管理」→「访问控制」,这里能看到Synapse专属角色(如Synapse Administrator、Synapse SQL Administrator等)。
你遇到的Microsoft.Synapse/workspaces/read权限需求,属于Synapse内部RBAC范畴,需在Synapse Studio内配置。
二、解决两个错误,完成托管身份链接配置
1. 修复Unauthorized错误(缺少Microsoft.Synapse/workspaces/read权限)
即使你有订阅级所有者权限,Synapse内部RBAC可能未同步分配权限,需手动配置:
- 打开Synapse Studio,进入「管理」→「访问控制」;
- 点击「添加角色分配」,选择「Synapse Contributor」或「Synapse Administrator」角色,将你的账号添加为成员;
- 保存后等待1-2分钟让权限生效,再尝试创建链接服务。
2. 修复SqlFailedToConnect错误(托管身份登录失败)
系统分配托管身份连接自建MSSQL,需完成以下步骤:
步骤1:在自建MSSQL中创建托管身份的登录名
使用MSSQL管理工具(如SSMS)连接到你的自建服务器,执行以下SQL:
-- 创建登录名,名称必须和Synapse工作区名称完全一致 CREATE LOGIN [你的Synapse工作区名称] FROM EXTERNAL PROVIDER;
步骤2:在目标数据库中创建用户并授予权限
继续执行SQL:
USE [你的目标数据库名称]; -- 创建数据库用户,关联刚才的登录名 CREATE USER [你的Synapse工作区名称] FOR LOGIN [你的Synapse工作区名称]; -- 授予读取数据的权限(根据需求调整,如db_datawriter用于写入) ALTER ROLE db_datareader ADD MEMBER [你的Synapse工作区名称];
步骤3:确保MSSQL防火墙允许Synapse访问
- 除了开启「允许Azure服务和资源访问此服务器」,还需将Synapse工作区的出站IP地址添加到MSSQL防火墙白名单:
- 在Azure门户进入Synapse工作区,点击「网络」→「出站IP」,复制所有IP地址;
- 进入自建MSSQL服务器的「防火墙和虚拟网络」设置,添加这些IP地址到允许列表。
步骤4:验证链接服务配置
创建链接服务时:
- 服务器名称填写自建MSSQL的公网IP或可访问的域名;
- 认证方式选择「系统分配托管身份」;
- 数据库名称填写目标数据库的正确名称;
- 点击「测试连接」验证是否成功。
内容的提问来源于stack exchange,提问作者Ishwar Jangid
相关产品推荐
相关产品推荐

