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

时间:2019-09-26 16:15:53

标签: azure azure-active-directory azure-data-lake azure-data-factory-2 azure-data-explorer

尝试从数据Lake 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.usqlenter image description here

enter image description here

下一个活动是copy data步骤:

enter image description here

来源

enter image description here

下沉

enter image description here

我已经使用this tutorial配置了角色/权限。

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

enter image description here

然后我点击Advanced

enter image description here

点击Apply to all children之后,复制就可以了!

enter image description here

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

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

我可以重现您的问题。实际上,Apply folder permissions to sub-folders不是必需的。该问题可能是由数据湖gen1的访问控制引起的,该问题的关键是文件的上传顺序和设置的权限。

您可以先检查Access control in Azure Data Lake Storage Gen1,然后参考下面基于我的测试的信息。

我想您将如下所示的权限添加到根/中。

enter image description here

如果在设置权限之前文件已经存在,则该文件将受操作影响,即将设置对文件的访问权限,您可以访问文件。

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

在设置了上面的权限之后,如果您设置A default permission entry,它将不会影响现有的文件夹和文件,但是如果您创建新的文件夹和文件,则将获得所有这些文件的访问权限。即旧文件夹和文件仍然无法访问,新文件夹和文件将具有访问权限。如果要访问旧的访问权限,只需再次添加如屏幕快照之类的权限,Apply folder permissions to sub-folders就是相同的逻辑。

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