我正在尝试授予对 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”和“Sub”)。
我已经使用存储资源管理器和默认值在“顶部”文件夹中提供了 RWX,以便在我添加它们时它级联到“子”文件夹和镶木地板文件
当我的同事尝试运行 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 在错误后提供了指向 以下帮助文件的链接,它建议:
如果您的查询失败并显示“文件无法打开,因为它不存在或被另一个进程使用”的错误,并且您确定这两个文件都存在并且它没有被另一个进程使用,这意味着 SQL 按需不能访问文件。发生此问题的原因通常是您的 Azure Active Directory 身份无权访问该文件。默认情况下,按需 SQL 会尝试使用您的 Azure Active Directory 身份访问文件。要解决此问题,您需要具有访问该文件的适当权限。最简单的方法是在您尝试查询的存储帐户上授予自己“存储 Blob 数据参与者”角色。
我不希望授予 Storage Blob Data Contributor 或 Storage Blob Data Reader,因为这可以访问容器上的每个文件,而不仅仅是我希望最终用户能够查询的文件。我们发现 SSMS 连接到 parquet 外部表时会发生相同的体验。
那么分部分:
- 这是使用 ACL 授予访问权限的正确模式,还是应该使用其他方法?
- 存储帐户或我的查询/笔记本中是否有我应该启用以支持 ACL 的设置?*
- 鉴于我们仍处于预览阶段,ACL 是否已在 Synapse Workspace 上实施?
*我拒绝粘贴我的整个设置,因为我真的不知道什么是相关的,什么与这个问题完全无关,但当然可以提供。