首页 > 解决方案 > 从数据湖 (gen1) 复制到 blob 存储时,数据工厂失去权限

问题描述

尝试从数据湖 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.

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

在此处输入图像描述

下一个活动是一个copy data步骤:

在此处输入图像描述

资源

在此处输入图像描述

下沉

在此处输入图像描述

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

我可以通过以下方式解决此问题Data Explorer --> Access

在此处输入图像描述

然后我点击Advanced

在此处输入图像描述

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

在此处输入图像描述

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

我究竟做错了什么?

标签: azureazure-active-directoryazure-data-lakeazure-data-factory-2azure-data-explorer

解决方案


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

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

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

在此处输入图像描述

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

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

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

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


推荐阅读