当 运行 数据工厂中的管道与暂存 Blob 存储 + Polybase 到 Azure 数据仓库时出现管理器身份错误

Manager Identity error when running a pipeline in Data Factory with Staging Blob Storage + Polybase to a Azure DataWarehouse

我在尝试使用 Polybase + 启用暂存 Blob 存储将数据从 Azure SQL 提取到 Azure DW 数据库时收到此错误消息。

托管服务标识尚未在此服务器上启用。请启用托管服务身份并重试。

我尝试创建一个托管身份用户,将其分配给 Web 服务,并授予该用户将此用户链接到在数据库中具有所有者权限的 AAD 组的权限,但它不起作用。

你的 sink 、 source 和 blob 是同一个订阅的一部分吗?由于错误是关于 SQDWH 访问的抱怨,我认为您需要检查一下。

https://docs.microsoft.com/en-us/azure/data-factory/connector-azure-sql-data-warehouse#managed-identity.

让我知道进展如何。

我假设您在接收器端使用身份验证类型 = 托管身份。

我们需要给 ADF 足够的权限。在 Azure 门户上导航到以下内容。 仪表板->SQL 数据仓库-><> - 查询编辑器(预览版)

CREATE USER [your ADF Name ] FROM EXTERNAL PROVIDER;
EXEC sp_addrolemember db_owner, [your ADF Name];

现在执行管道,它应该可以正常工作。

我想重现你的问题,所以我特意删除了 ADF 的权限

EXEC sp_droprolemember db_owner, [your ADF Name];

我看到以下错误(这不是您报告的原因)

{
    "errorCode": "2200",
    "message": "ErrorCode=FailedDbOperation,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Error happened when loading data into SQL Data Warehouse.,Source=Microsoft.DataTransfer.ClientLibrary,''Type=System.Data.SqlClient.SqlException,Message=User does not have permission to perform this action.,Source=.Net SqlClient Data Provider,SqlErrorNumber=15247,Class=16,ErrorCode=-2146232060,State=1,Errors=[{Class=16,Number=15247,State=1,Message=User does not have permission to perform this action.,},],'",
    "failureType": "UserError",
    "target": "Copy data1",
    "details": []
}

我认为您的管道还有其他问题。

您需要创建一个用户并使用 db_owner 权限登录。与用户登录以测试它是否真的有效。 PS DF Polybase 并不像您想象的那么好...在引擎盖下它将文件分成较小的文件,将数据转储到 tempdb tables,然后才将其加载到您的 table,如果你有数十亿条记录,这需要相当长的时间。 我用它做了很多测试,我们最终直接使用 CTAS,因为它的速度提高了 10 倍。 https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-develop-ctas

首先,使用 username/password 登录 Azure PowerShell。 其次,运行以下命令分配您的数据库数据仓库服务器。

Set-AzSqlServer -ResourceGroup -ServerName -AssignIdentity