无法将托管标识添加到 Synapse 池

Cannot Add Managed Identity to Synapse Pool

我正在通过 Synapse studio 运行设置 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

这有两点特别之处:

  1. 我的 Synapse 工作区已经有一个与之关联的托管标识:
  1. 我在尝试 运行 Powershell 命令时遇到权限被拒绝的问题,如 中所述

Set-AzSqlServer: The client 'me@contoso.com' with object id 'guid' has permission to perform action 'Microsoft.Sql/servers/write' on scope '/subscriptions/mysubscription/resourceGroups/myrg/providers/Microsoft.Sql/servers/mydw'; however, the access is denied because of the deny assignment with name 'c6475066-bbe2-4c03-866c-7556d5e92e9b' and Id 'c6475066bbe24c03866c7556d5e92e9b' at scope '/subscriptions/mysubscription/resourceGroups/myrg'.

我已验证此托管身份确实可以访问我的数据源 (ADLS Gen2),并且当我在工作室中测试连接时,它们都能正常工作。

如何将托管身份从我的 Synapse 工作区分配到我创建的 sql 池?

2020 年 12 月 30 日更新:由于 Synapse 已正式发布,这似乎已得到解决。 Polybase 和 COPY INTO 现在可以在 Synapse 工作区 SQL 池中使用,该池具有安全的防火墙 ADLS Gen 2 存储帐户。更新后的说明已发布 here

COPY INTO 文档底部有一条注释,可能需要在较旧的 Synapse 工作区上使用 Polybase 或 COPY 才能在 Synapse 中的 SQL 池中使用托管服务标识工作区。

If you have a Synapse workspace that was created prior to 12/07/2020, you may run into a similar error message when authenticating using Managed Identity: com.microsoft.sqlserver.jdbc.SQLServerException: Managed Service Identity has not been enabled on this server. Please enable Managed Service Identity and try again. Follow these steps to work around this issue by re-registering the workspace's managed identity:

  1. Go to your Synapse workspace in the Azure portal
  2. Go to the Managed identities blade
  3. If the “Allow Pipelines” option is already checked, you must uncheck this setting and save
  4. Check the "Allow Pipelines" option and save

附带说明一下,如果您使用 MSI,我相信同样的方法也适用于 Serverless。但是,如果您想使用通过 AAD 身份验证的传递,请参阅 this.

截至 2020 年 8 月的旧信息现已过时:我有同样的问题并打开了支持案例 120073024005140。我得到的答案是这个 Polybase 或 COPY INTO with MSI 场景尚未在 Synapse 工作区中工作,但它来了。现在您必须使用其他类型的身份验证,如存储帐户密钥身份验证,并且您必须让存储帐户防火墙保持打开状态。或者,您可以使用较旧的“Azure Synapse Analytics(以前称为 SQL DW)”SQL 池(无 Synapse 工作区和无 Synapse 工作室),此功能正在运行。