无法将托管标识添加到 Synapse 池
Posted
技术标签:
【中文标题】无法将托管标识添加到 Synapse 池【英文标题】:Cannot Add Managed Identity to Synapse Pool 【发布时间】:2020-12-07 00:39:19 【问题描述】:我正在通过 Synapse 工作室运行 Azure Synapse 工作流并遇到此错误:
"errorCode": "2200",
"message": "ErrorCode=FailedDbOperation,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Please make sure SQL DW has access to ADLS Gen2 account,Source=Microsoft.DataTransfer.ClientLibrary,''Type=System.Data.SqlClient.SqlException,Message=Managed Service Identity has not been enabled on this server. Please enable Managed Service Identity and try again.,Source=.Net SqlClient Data Provider,SqlErrorNumber=105096,Class=16,ErrorCode=-2146232060,State=1,Errors=[Class=16,Number=105096,State=1,Message=Managed Service Identity has not been enabled on this server. Please enable Managed Service Identity and try again.,,],'",
"failureType": "UserError",
"target": "Copy data1",
"details": []
如果我进入 Azure Powershell 并检查池,我会发现 Identity
中的 null
条目证实了这一点:
ResourceGroupName : workspacemanagedrg-c6475066-bbe3-4c02-866c-7556d5e92e0b
ServerName : <mydw>
Location : eastus2
SqlAdministratorLogin : <myadmin>
SqlAdministratorPassword : <mypw>
ServerVersion : 12.0
Tags :
Identity :
FullyQualifiedDomainName : <mydw>.database.windows.net
这有两点很特别:
-
我的 Synapse 工作区已经有一个与之关联的托管标识:
-
我在尝试运行 Powershell 命令时遇到权限被拒绝,如 this question 中所述
Set-AzSqlServer:对象 ID 为“guid”的客户端“me@contoso.com”有权在范围“/subscriptions/mysubscription/resourceGroups/myrg/providers/”上执行操作“Microsoft.Sql/servers/write” Microsoft.Sql/servers/mydw';但是,由于在“/subscriptions/mysubscription/resourceGroups/myrg”范围内的名称为“c6475066-bbe2-4c03-866c-7556d5e92e9b”和 ID 为“c6475066bbe24c03866c7556d5e92e9b”的拒绝分配,访问被拒绝。
我已验证此托管身份确实可以访问我的数据源 (ADLS Gen2),当我在工作室中测试连接时,它们都可以正常工作。
如何将托管标识从 Synapse 工作区分配到我创建的 sql 池?
【问题讨论】:
【参考方案1】:2020 年 12 月 30 日更新:现在 Synapse 已正式发布,这一问题似乎已得到解决。 Polybase 和 COPY INTO 现在可以在具有安全防火墙 ADLS Gen 2 存储帐户的 Synapse 工作区 SQL 池中工作。更新后的说明发布在here。
COPY INTO 文档底部有一条注释,说明 Polybase 或 COPY 可能需要旧版 Synapse 工作区才能在 Synapse 工作区的 SQL 池中使用托管服务标识。
如果您有一个在 2020 年 7 月 12 日之前创建的 Synapse 工作区, 使用身份验证时,您可能会遇到类似的错误消息 托管标识:com.microsoft.sqlserver.jdbc.SQLServerException: 此服务器上未启用托管服务标识。请 启用托管服务标识,然后重试。请按照以下步骤 通过重新注册工作区的托管解决此问题 身份:
转到 Azure 门户中的 Synapse 工作区 转到 托管身份刀片 如果“允许管道”选项是 已选中,您必须取消选中此设置并保存 检查 “允许管道”选项并保存
附带说明,如果您使用 MSI,我相信同样的方法也适用于无服务器。但是,如果您想使用 AAD 身份验证,请参阅 this。
截至 2020 年 8 月的旧信息现已过时:我有同样的问题并打开了支持案例 120073024005140。我得到的答案是,此 Polybase 或 COPY INTO with MSI 方案尚未在 Synapse 工作区中运行,但即将推出.现在,您必须使用其他类型的身份验证,例如存储帐户密钥身份验证,并且您必须打开存储帐户防火墙。或者,您也可以使用旧版“Azure Synapse Analytics(以前称为 SQL DW)”SQL 池(没有 Synapse 工作区和 Synapse 工作室),此功能正在运行。
【讨论】:
我注意到您的存储帐户周围不能有 vNet。这有点令人失望,但我想这就是你有时通过预览得到的。即使切换到 SQL Auth,我也会遇到同样的错误。如果我从 Polybase 切换,一切都很好,所以我可能只是等待 Polybase 进行排序 @murtihash 还没有。欢迎在 11 月再次提问! 如果它是公开的,你能链接到支持票吗? @C.Nivs 我不知道支持案例有公共假期。 我现在已经更新了这个答案以反映它现在正在工作。以上是关于无法将托管标识添加到 Synapse 池的主要内容,如果未能解决你的问题,请参考以下文章
通过托管标识通过 Synapse 访问 Azure 存储帐户
将 Azure Databricks 增量表迁移到 Azure Synapse SQL 池