[英]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.usql
的U-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.