DataBricks UnityCatalog 创建表失败,并显示“无法获取 SAS 令牌 UnauthorizedAccessException:PERMISSION_DENIED:请求未授权”

Mau*_*lla 5 databricks databricks-unity-catalog

我是 DataBricks Unity Catalog 的新手,我正在尝试按照https://docs.databricks.com/_static/notebooks/unity-catalog-example-notebook.html上的快速入门笔记本进行操作。

在我看来,我已经做了我必须做的一切:

  • 我在 Azure 中创建了一个 Databricks 访问连接器(它成为托管标识)
  • 我创建了一个存储帐户 ADLS Gen2(具有分层命名空间的 Datalake)加上容器
  • 在我的数据湖容器上,我将存储 Blob 数据贡献者角色分配给上面的托管标识
  • 我创建了一个新的 Databricks Premium 工作区
  • 我在 Unity Catalog 中创建了一个新的元存储,将访问连接器“绑定”到 DataLake
  • 将元存储绑定到高级 databricks 工作区
  • 我向我的 Databricks 用户授予了上述 Databricks 工作区的管理员权限
  • 我在相同的高级工作区中创建了一个新集群,选择框架 11.1 和“单用户”访问模式
  • 我运行了工作区,它正确创建了一个新目录,为其分配了适当的权限,创建了一个架构,并确认我是该架构的所有者

同一笔记本的唯一(但最重要)失败的 SQL 命令是尝试创建托管 Delta 表并插入两条记录的命令:

CREATE TABLE IF NOT EXISTS quickstart_catalog_mauromi.quickstart_schema_mauromi.quickstart_table
  (columnA Int, columnB String) PARTITIONED BY (columnA);
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它开始工作,实际上它开始在我的存储帐户中创建此增量表的文件夹结构 在此输入图像描述

,但是它失败并出现以下错误:

java.util.concurrent.ExecutionException: Failed to acquire a SAS token for list on /data/a3b9da69-d82a-4e0d-9015-51646a2a93fb/tables/eab1e2cc-1c0d-4ee4-9a57-18f17edcfabb/_delta_log due to java.util.concurrent.ExecutionException: com.databricks.sql.managedcatalog.acl.UnauthorizedAccessException: PERMISSION_DENIED: request not authorized
Run Code Online (Sandbox Code Playgroud)

请注意,在运行表创建命令之前,我没有在“unity-catalog”容器下创建任何文件夹。所以看起来是可以成功创建文件夹结构,但是在创建“table”文件夹后,它无法获取“SAS token”。

所以我无法理解,因为我是这个工作区的管理员,并且因为 Databricks 托管身份被分配了存储容器上的贡献者角色,而且因为 Databricks 实际上开始创建其他文件夹。我还应该配置什么?

小智 5

实际上,您可以使用 Unity 和 Databricks Access Connector 在 Azure ADLS Gen2 中施加更多限制。Storage Blob Data ContributorOwner存储帐户级别的权限不是必需的,并且在企业环境中通常不需要。在测试时,我发现以下访问权限就足够了:

  1. Storage Blob Delegator在存储帐户级别。
  2. Storage Blob Data Contributor在存储帐户容器级别。

此外,请确保存储帐户的防火墙配置为允许从 Databricks 进行访问(请参阅此处此处),并确保根据文档配置 CORS 。


Mau*_*lla 1

我发现:您只需在容器级别将存储 Blob 数据贡献者角色分配给 Azure Databricks 连接器。事实上,您需要在存储帐户级别分配相同的角色和相同的连接器。我在文档中找不到此信息,坦率地说,我无法理解为什么需要此信息,因为创建了增量表路径。

然而,这样一来,它就有效了。