azure - 从数据湖 (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 中,它会在数据湖和文件夹中生成文件。运行此脚本永远不会有任何权限问题。
我究竟做错了什么?
解决方案
我可以重现你的问题。其实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
,那么您将能够访问现有和新的文件夹/文件。
推荐阅读
- postgresql - 我可以将 Amazon RDS PostgreSQL 与 Active Directory AD 或 AD 连接器连接吗?
- java - 如何调用 AWS Lambda 函数的 ssl 端点
- swift - iOS UILabel textColor 在深色模式下不更新
- tensorflow - 了解模型训练日志语句
- python - 使用 WebRTC 和 Python 服务器进行人脸情绪分析
- python-3.x - PyQt5 从子小部件访问数据以打印在父窗口上
- reactjs - 将 react 本机项目上传到 git hub 存储库的正确过程是什么?
- ubuntu - 在 Ubuntu 上将 Jhipster 项目作为 jar 运行,并且在登录时需要 HTTPS
- audio - FFMPEG 音频规范化器 dynaudnorm 对 amix 没有影响
- laravel - 如何使用 Eloquent 按顺序列出父模型及其子表?