【问题标题】:Attempting to Read parcquet files on linked storage in Azure Synapse尝试在 Azure Synapse 中的链接存储上读取 parcquet 文件
【发布时间】:2020-12-17 09:55:50
【问题描述】:

我正在尝试授予对 Gen2 Data Lake 容器上 parquet 文件的访问权限。我在容器上有所有者 RBAC,但希望限制其他用户在容器中的访问。

我的查询很简单:

SELECT
  TOP 100 *
FROM
  OPENROWSET(
    BULK 'https://aztsworddataaipocacldl.dfs.core.windows.net/pocacl/Top/Sub/part-00006-c62926ba-c530-4ad8-87d1-cf38c67a2da3-c000.snappy.parquet',
    FORMAT='PARQUET'
  ) AS [result]

当我运行它时,连接没有问题。我已尝试将 ACL 权限添加到文件(当然还有包含文件夹“Top”和“Sub”)。

I've give RWX on the 'Top' folder using Storage Explorer and default so that it cascades to the 'Sub' folder and parquet files as I add them

当我的同事尝试运行 SQL 脚本时,会收到错误消息。 Failed to execute query. Error: File 'https://aztsworddataaipocacldl.dfs.core.windows.net/pocacl/Top/Sub/part-00006-c62926ba-c530-4ad8-87d1-cf38c67a2da3-c000.snappy.parquet' cannot be opened because it does not exist or it is used by another process. NB 类似的结果也出现在 Spark 中,但结果为 403

SQL on-demand 提供了出错后following help file的链接,提示:

如果您的查询失败并显示“文件无法打开,因为它不存在或被另一个进程使用”的错误,并且您确定两个文件都存在并且它没有被另一个进程使用,这意味着 SQL on-demand无法访问该文件。 发生此问题的原因通常是您的 Azure Active Directory 身份无权访问该文件。默认情况下,按需 SQL 会尝试使用您的 Azure Active Directory 身份访问文件。要解决此问题,您需要拥有访问文件的适当权限。最简单的方法是在您尝试查询的存储帐户上授予自己“存储 Blob 数据参与者”角色。 p>

我不希望授予 Storage Blob Data Contributor 或 Storage Blob Data Reader,因为这样可以访问容器上的每个文件,而不仅仅是我希望最终用户能够查询的文件。我们发现 SSMS 连接到 parquet 外部表时也会出现同样的情况。

那么分部分:

  1. 这是使用 ACL 授予访问权限的正确模式,还是应该使用其他方法?
  2. 我应该启用存储帐户或查询/笔记本中的设置以支持 ACL 吗?*
  3. 鉴于我们仍处于预览阶段,ACL 是否已在 Synapse Workspace 上实施?

*我拒绝粘贴我的整个设置,因为我真的不知道什么是相关的,什么与这个问题完全无关,但当然可以提供。

【问题讨论】:

  • 当您执行CREATE DATABASE SCOPED CREDENTIALCREATE EXTERNAL DATA SOURCE 时,您使用了哪些详细信息?例如,您是否使用了 SAS 密钥?据我了解,按需 SQL 仅提供 AAD 或 SAS 密钥访问。
  • 2 点关于 1 我没有在我们的内部环境中使用创建数据库或创建外部数据源但在另一个环境中我有。我没有使用 SAS 密钥。我的印象是访问控制列表使用 AAD,这不正确吗?
  • 作为更新:访问控制文档 (docs.microsoft.com/en-us/azure/storage/blobs/…) 规定: >如果您将角色分配给存储帐户级别的安全主体,则可以使用访问控制列表授予该角色安全主体提升了对特定文件和目录的访问权限。哪个角色 (docs.microsoft.com/en-us/azure/role-based-access-control/…) 最适合我设置和 ACL NB 我已经尝试过与贡献者一起进行此操作。
  • 我建议使用 SAS 进行细粒度控制 - 看看 docs。如果你需要,我可以做一个例子,但它就在那里。
  • @wBob 谢谢,我会看看,这对于从 sql 按需查询 spark sql 有用吗?

标签: azure-data-lake azure-synapse


【解决方案1】:

ACL 功能在 Azure Synapse Analytics 预览版中似乎无法正常工作。

我现在已经设法让它工作了。目前我看到一旦 Read|Execute 提供给一个文件夹,它就允许访问该文件夹和子文件夹中包含的文件。即使没有对子文件夹中的文件提供特定 ACL 访问权限,也可以访问。这不是我所期望的,但它为我提供了足够的继续:仅授予对 Gold 文件夹的访问权限允许分离对我想让用户查询的文件和我想要隐藏的工作文件的访问。

【讨论】:

    【解决方案2】:

    当您将 ACL 分配给文件夹时,它不会递归地传播到文件夹内的所有文件。只有新文件从文件夹继承。

    你可以看到这个here

    【讨论】:

    • 嗨乔万。在添加子文件夹和文件之前,我将 ACL 添加到 Top 文件夹以解决此问题。正如您所说,只有新文件从文件夹继承。我想我在OP中说过?也许你错过了。
    猜你喜欢
    • 2021-11-11
    • 2017-07-13
    • 2014-09-08
    • 1970-01-01
    • 2012-06-16
    • 2023-03-18
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    相关资源
    最近更新 更多