繁体   English   中英

从数据湖 (gen1) 复制到 blob 存储时,数据工厂失去权限

[英]data factory loses permissions when copying from data lake (gen1) to blob storage

尝试从数据湖 gen1 复制到 blob 存储时,数据工厂给了我这个错误:

"message": "Failure happened on 'Sink' side. ErrorCode=UserErrorFailedFileOperation,
'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Upload file failed at
 path myblobcontainer\\file_that_im_tryin_to_copy.xml.,Source=Microsoft.DataTransfer.Common,''Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Failed to read a 'AzureDataLakeStore' file. File path: 'SourceFolderInDataLake/2019/09/26/SomeOtherFile.usql'.,Source=Microsoft.DataTransfer.ClientLibrary,''Type=System.Net.WebException,Message=The remote server returned an error: (403) Forbidden.

我有一个将执行1-Patient.usqlU-SQL Script活动: 在此处输入图像描述

在此处输入图像描述

下一个活动是copy data步骤:

在此处输入图像描述

资源

在此处输入图像描述

下沉

在此处输入图像描述

我已经使用本教程配置了角色/权限。

我可以通过转到Data Explorer --> Access来解决这个问题:

在此处输入图像描述

然后我点击Advanced

在此处输入图像描述

单击Apply to all children后,复制工作正常!

在此处输入图像描述

请注意,Copy Data活动之前,数据工厂正在执行usql内部的gen1脚本。 该脚本存储在 gen1 中,它会在数据湖和文件夹中生成文件。 运行此脚本永远不会有任何权限问题。

我究竟做错了什么?

我可以重现你的问题。 实际上,不需要Apply folder permissions to sub-folders 问题应该是数据湖gen1的访问控制导致的,问题的关键是文件上传和权限设置的顺序。

您可以先检查Azure Data Lake Storage Gen1 中的访问控制,并参考以下基于我的测试的信息。

我想您将下面的权限添加到根/

在此处输入图像描述

如果你的文件在设置权限之前已经存在,会受到操作的影响,即设置了对文件的访问权限,你就可以访问文件了。

但是如果您在设置权限后上传文件或创建新文件夹,则文件夹和文件将没有访问权限,您将无法访问它们。 你可以select这个文件,直接点击Access查看。

设置了上面的权限后,那么如果你设置了A default permission entry ,它不会影响现有的文件夹和文件,但是如果你创建新的文件夹和文件,你将获得所有的访问权限。 即旧文件夹和文件仍然无法访问,新的将可以访问。 如果你想获得旧的访问权限,只需再次添加屏幕截图的权限, Apply folder permissions to sub-folders是相同的逻辑。

因此,总而言之,如果您希望您的服务主体/MSI 访问数据湖中的所有文件,您可以添加第三个选项An access permission entry and a default permission entry ,那么您将能够访问现有的和新的文件夹/文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM