3

我正在通过 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 并检查池,我会看到以下null条目证实了这一点Identity

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:对象 ID 为“guid”的客户端“me@contoso.com”有权在范围“/subscriptions/mysubscription/resourceGroups/myrg/providers/Microsoft.Sql”上执行操作“Microsoft.Sql/servers/write” /服务器/mydw'; 但是,由于在“/subscriptions/mysubscription/resourceGroups/myrg”范围内的名称为“c6475066-bbe2-4c03-866c-7556d5e92e9b”和 ID 为“c6475066bbe24c03866c7556d5e92e9b”的拒绝分配,访问被拒绝。

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

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

4

1 回答 1

3

2020 年 12 月 30 日更新:现在 Synapse 是 GA,这似乎已解决。Polybase 和 COPY INTO 现在可以在具有安全防火墙 ADLS Gen 2 存储帐户的 Synapse 工作区 SQL 池中工作。更新的说明在此处发布。

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

如果您有在 2020 年 7 月 12 日之前创建的 Synapse 工作区,则在使用托管标识进行身份验证时可能会遇到类似的错误消息:com.microsoft.sqlserver.jdbc.SQLServerException: Managed Service Identity has not been enabled on this服务器。请启用托管服务标识并重试。请按照以下步骤通过重新注册工作区的托管标识来解决此问题:

  1. 转到 Azure 门户中的 Synapse 工作区
  2. 转到托管身份边栏选项卡
  3. 如果“允许管道”选项已被选中,则必须取消选中此设置并保存
  4. 检查“允许管道”选项并保存

附带说明一下,如果您使用 MSI,我相信同样的方法适用于无服务器。但是,如果您想使用 AAD 身份验证,请参阅

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

于 2020-08-18T12:07:18.603 回答