AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 79560389
Accepted
Patterson
Patterson
Asked: 2025-04-08 00:33:42 +0800 CST2025-04-08 00:33:42 +0800 CST 2025-04-08 00:33:42 +0800 CST

尝试访问 Azure Fabric OneLake 时,Databricks 操作失败:“禁止”,403

  • 772

使用以下 PySpark 代码,我成功挂载了 Azure OneLake 存储帐户。但是,当我尝试使用以下命令读取显示路径时,display(dbutils.fs.ls('/mnt/lake'))出现以下错误:

操作失败:“禁止”,403,GET,https ://onelake.dfs.fabric.microsoft.com/DataEngineeringWKSP ?upn=false&resource=filesystem&maxResults=5000&directory=my_lakehouse.Lakehouse&timeout=90&recursive=false,禁止,“用户无权对工作区‘xxxxxx-ad19-489b-944e-82d6fc013b87’、工件‘xxxxx-3c39-44b8-8982-ddecef9e829c’执行当前操作。”

当我尝试读取 onelake 帐户中的文件时,出现类似的错误:

操作失败:“禁止”,403,HEAD,https://onelake.dfs.fabric.microsoft.com/DataEngineeringWKSP/sqlite_lakehouse.Lakehouse/Files/expdata.csv ?upn=false&action=getStatus&timeout=90

我用来挂载onelake存储账户的代码如下:

url = "abfss://[email protected]/sqlite_lakehouse.Lakehouse"
mount_folder = "/mnt/lake"

# OAuth configuration settings for OneLake
configs = {
    "fs.azure.account.auth.type.onelake.dfs.fabric.microsoft.com": "OAuth",
    "fs.azure.account.oauth.provider.type.onelake.dfs.fabric.microsoft.com": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
    "fs.azure.account.oauth2.client.id.onelake.dfs.fabric.microsoft.com": "xxxxxx-a061-4899-994b-81253d864bc8",
    "fs.azure.account.oauth2.client.secret.onelake.dfs.fabric.microsoft.com": "xxxxxx~1Q.B-Ey12zs066D_G3.E6bslnE_LqY-aFs",
    "fs.azure.account.oauth2.client.endpoint.onelake.dfs.fabric.microsoft.com": "https://login.microsoftonline.com/xxxxxxxxxxxxxf12fc6/oauth2/token"
}

mounted_list = dbutils.fs.mounts()
mounted_exist = False

for item in mounted_list:
    if mount_folder in item.mountPoint:
        mounted_exist = True
        break

if not mounted_exist:
    dbutils.fs.mount(source=url, mount_point=mount_folder, extra_configs=configs)

我认为我需要在 Azure Fabric 工作区中添加权限,但我很难找到添加权限的确切位置

  • 1 1 个回答
  • 62 Views

1 个回答

  • Voted
  1. Best Answer
    2025-04-09T01:39:49+08:002025-04-09T01:39:49+08:00

    错误:操作失败:“禁止”,403,GET, https ://onelake.dfs.fabric.microsoft.com/DataEngineeringWKSP ?upn=false&resource=filesystem&maxResults=5000&directory=my_lakehouse.Lakehouse&timeout=90&recursive=false,Forbidden,“用户无权对工作区‘xxxxxx-ad19-489b-944e-82d6fc013b87’、工件‘xxxxx-3c39-44b8-8982-ddecef9e829c’执行当前操作。”

    意味着您当前的用户身份无权访问指定的 OneLake 工作区或 Lakehouse 工件。

    正如您所提到的,您想要向服务主体提供权限,您可以按照以下步骤操作:

    首先在管理门户下

    在此处输入图片描述

    接下来,授予服务主体访问权限。现在该功能已启用,您可以授予服务主体或托管标识对 Fabric 工作区的访问权限。为此,请导航到所需的工作区并选择“管理访问权限”。

    在此处输入图片描述

    接下来,点击“+ 添加人员或组”,然后键入服务主体或托管标识的名称。当它出现在建议中时,选择它并点击“添加”。

    在此处输入图片描述

    可用角色:

    • 管理员:授予对工作区的完全控制权,包括删除权限。由于访问权限级别较高,通常不建议服务主体使用该权限。

    • 成员:提供几乎完全的访问权限,但不包括修改工作区设置或管理访问权限的能力。

    • 贡献者(推荐):允许执行大多数操作,例如管理内容,但无法修改成员访问权限或共享项目。此角色提供通过 API 访问 OneLake 所需的最低权限。

    • 查看者:提供只读权限,用于查看工作区项目、运行 SQL 查询和执行管道。请注意,此角色不允许访问OneLake 的 API。

    使用 Azure CLI 以下命令

    `az ad sp create-for-rbac -n "Fabricator`"
    

    此命令将生成一个名为Fabricator的新服务主体并显示以下详细信息:

    {
      "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": "Fabricator",
      "password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    

    appId代表客户端 ID,password 代表客户端密钥。这些凭证用于通过 Python SDK 向 OneLake 进行身份验证。

    您需要安装以下软件包:

    pip install azure-identity azure-storage-file-datalake
    

    安装必要的软件包后,您可以使用以下代码片段进行身份验证并连接到 OneLake。

    从 azure.identity 导入 ClientSecretCredential 从 azure.storage.filedatalake 导入 FileSystemClient

    cred = ClientSecretCredential(tenant_id="<your-tenant-id>",
                                  client_id="<your-client-id>",
                                  client_secret="<your-client-secret>")
    
    file_system_client = FileSystemClient(
        account_url="https://onelake.dfs.fabric.microsoft.com",
        file_system_name="<name-of-the-workspace-you-want-to-access>",
        credential=cred)
    paths = file_system_client.get_paths(path="/<name-of-the-lakehouse>.Lakehouse/Tables/")
    for p in paths:
        print(p.name)
    

    参考: 感谢@Sam Debruyn 撰写的关于如何使用服务主体身份验证访问 Microsoft Fabric 的 OneLake deltalake 0.25.5 的精彩文章

    • 1

相关问题

  • 将复制活动的序列号添加到 Blob

  • Packer 动态源重复工件

  • 选择每组连续 1 的行

  • 图形 API 调用列表 subscribedSkus 状态权限不足,但已授予权限

  • 根据列值创建单独的 DF 的函数

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve