gpt4 book ai didi

python-3.x - 尽管使用存储 key 进行连接,azure storage gen2 上的 set_access_control 仍会引发权限错误

转载 作者:行者123 更新时间:2023-12-03 03:24:59 26 4
gpt4 key购买 nike

我正在尝试在 databricks 中使用 python 设置 azure storage gen2 目录的 acl。它抛出一个错误。我正在使用从 PyPl 安装在集群上的 azure-storage-file-datalake 包。我使用的是 python 版本 3.9.5(默认,2021 年 11 月 23 日,15:27:38)

我这样做是为了使用存储帐户 key 进行连接:

account_key = '***'
account_name = '***'

service_client = DataLakeServiceClient(account_url="{}://{}.dfs.core.windows.net".format(
"https",
account_name
), credential=account_key)
containerName = 'mark-test-fs'
filesystem_client = service_client.get_file_system_client(containerName)

运行没有错误。然后我就可以获得目录的访问控制权限:

directory_client = filesystem_client.get_directory_client('folder_1')
a = directory_client.get_access_control()
for key,value in a.items():
print(key,value)

这些属性包括:所有者$ super 用户组$ super 用户

当我尝试应用新的 acl 时,它会抛出异常:

acl = 'user::rwx,'  \
'group::r-x,' \
'other::---,' \
'mask::rwx'
change_result = directory_client.set_access_control(acl)

异常包含:

*(InvalidOwner) The owner or group is not valid.*
*RequestId:\*\*\**
*Time:2023-03-29T19:45:06.7785008Z*
*Code: InvalidOwner*
*Message: The owner or group is not valid.*
*RequestId:\*\*\**
*Time:2023-03-29T19:45:06.7785008Z*

我已经查看了很多关于这个 python 库的微软文档,但没有看到任何解释这一点的内容。代码非常简单,我已经检查了三次。它严格遵循 azure-storage-file-datalake python 库提供的示例代码。

我已经为此进行了大量的网络搜索和查看微软文档,但我不明白为什么这不起作用。我正在使用存储 key 进行连接,并且该目录由 super 用户拥有。此错误并不表明哪个所有者或组无效。

我能够使用 powershell 执行这些操作,但为了方便起见,我想在 databricks 中实现。任何帮助表示赞赏。我可以打开一个微软票证,想知道我应该在 azure 的哪个部分执行此操作。

最佳答案

I reproduce the same thing in my environment. I got this same error.

enter image description here

解决此问题。关注此MS_Doc .

它包含有关如何在存储帐户中设置和替换 ACL 的详细信息。我在我的环境中遵循了同样的操作,并被授予了对存储帐户 gen2 的访问权限。

ACL 访问的示例代码。请按照以下步骤操作:

Step1:

首先执行下面的代码,当你执行代码时,你会得到对象 id 。使用组的对象 ID

from azure.storage.filedatalake import DataLakeServiceClient

# Set the account key and name
account_key = '<access_key>'
account_name = 'vamblob'

service_client = DataLakeServiceClient(account_url="{}://{}.dfs.core.windows.net".format(
"https",
account_name
), credential=account_key)

containerName = 'pool'
filesystem_client = service_client.get_file_system_client(containerName)

directory_client = filesystem_client.get_directory_client('/')
a = directory_client.get_access_control()
for key,value in a.items():
print(key,value)

enter image description here

enter image description here

Step 2:

使用对象 ID 更改并更新权限,如下所示:

 def manage_directory_permissions():
try:
file_sy = service_client.get_file_system_client(file_system="inputdata")

dir1 = file_sy.get_directory_client("/")

acl = dir1.get_access_control()
print("Before: ",acl['permissions'])
new_dir_permissions = "user:xxxxxxxxad33d:r-x,user:7144xxxxxxxx-xxxdf2da1d1:r-x,group::rwx,mask::rw-,other::r--"

dir1.update_access_control_recursive(new_dir_permissions)

acl = dir1.get_access_control()

print("After",acl['permissions'])

except Exception as e:
print(e)


manage_directory_permissions()

enter image description here

有关更多信息请参阅GitHub link .

关于python-3.x - 尽管使用存储 key 进行连接,azure storage gen2 上的 set_access_control 仍会引发权限错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75892526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com