我们正在 Azure Synapse 内建立一个三角洲湖
查询 Delta Lake 可在 Synapse 内进行。为此,我们设置了一个 View
CREATE VIEW V_Test AS
SELECT
*
FROM
OPENROWSET(
BULK 'https://XXXX.dfs.core.windows.net/gold/testtable',
FORMAT = 'DELTA'
) AS [result]
从 Synapse 内查询此 View 时,会按预期返回结果。
现在,我们希望在仅支持 SQL Server 身份验证的应用程序中可视化数据。使用 AD 身份验证登录时尝试从 SQLServerManagementStudio 查询此 View 有效,但使用 SQL Server 凭据登录时无效
Msg 13807, Level 16, State 1, Procedure V_test, Line 4 [Batch Start Line 0]
Content of directory on path 'https://XXXX.dfs.core.windows.net/gold/testtable/_delta_log/*.json' cannot be listed.
Msg 4413, Level 16, State 1, Line 3
Could not use view or function 'V_test' because of binding errors.
当应用程序仅支持 SQL Server 凭据时,是否有办法以安全的方式使其工作?
应用程序 -- Synapse 无服务器池 -- Delta Lake
最佳答案
在 Synapse Studio 中,您可以通过交互式用户身份使用数据湖中的数据。使用 Synapse SQL Serverless 端点进行查询并进行 SQL 身份验证,使用 Synapse 托管标识或 View 元数据级别中指定的其他标识。我假设您自己的用户帐户具有在 RBAC 和 ACL 级别获取数据湖的适当权限,但使用无服务器查询时使用的身份没有正确设置 ACL 级别权限。需要对路径/gold/testtable/** 中的文件进行读取和执行 (r-x) 权限。
Delta Lake 表包含多个文件。除了读取权限之外,Delta Lake 还需要执行/列出权限才能查看文件夹中的所有文件。确保您正确设置了默认 ACL,以便在修改 Delta Lake 表并添加新文件时,这些文件也具有正确的权限。
有关存储访问权限的更多信息:https://learn.microsoft.com/en-us/azure/synapse-analytics/sql/develop-storage-files-storage-access-control?tabs=managed-identity .
有关 ACL 权限的更多信息:https://learn.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-access-control#how-to-set-acls
关于authentication - 使用 Azure Synapse 无服务器 SQL 从外部工具查询 Delta Lake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72457887/