authentication - 使用 Azure Synapse 无服务器 SQL 从外部工具查询 Delta Lake

标签 authentication azure-synapse delta-lake

我们正在 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/

相关文章:

authentication - 具有用户名/密码身份验证的 ncat ssl 连接?

xml - 使用 XSD 进行 aadhar auth XML 验证

C# 和 SQL Server 身份验证

azure-synapse - 强制 CETAS 只写入一个文件?

apache-spark - Pyspark 数据框 Parquet 与增量 : different number of rows

databricks - Delta Lake 存储层 - 概念

pyspark - 如何将 Tableau/BI 工具连接到 Delta Lake? (没有数据 block )

javascript - 如何检测我的 Firefox 扩展是否成功登录?

azure - 在某些 Synapse Serverless View 上授予登录 SELECT 权限,但无法在*整个* Datalake 上运行 OPENROWSET

azure - 将数组变量传递给 ADF 中的 IN 条件