正在尝试读取Azure Synapse中链接存储上的parcquet文件



我正试图访问Gen2 Data Lake容器上的镶木地板文件。我在容器上有所有者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"one_answers"Sub"(。

我已经使用Storage Explorer和默认值在"Top"文件夹上提供RWX,以便在添加时级联到"Sub"文件夹和镶木地板文件

当我的同事尝试运行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随需应变提供了一个链接到错误后的以下帮助文件,它建议:

如果您的查询失败,错误为"文件不存在或被另一个进程使用而无法打开",并且您确定这两个文件都存在,并且没有被另一进程使用,则意味着SQL按需无法访问该文件此问题通常是因为您的Azure Active Directory标识没有访问该文件的权限。默认情况下,SQL点播正在尝试使用您的Azure Active Directory标识访问该文件。若要解决此问题,您需要具有访问该文件的适当权限最简单的方法是在您试图查询的存储帐户上授予自己"存储Blob数据贡献者"角色。

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

所以分为几个部分:

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

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

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

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

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

你可以在这里看到这个

转到azure存储资源管理器更改路由文件夹中的ACL权限,右键单击您的存储并单击"比例门访问控制列表";

最新更新