无法使用 SQL 管理凭据查询 Azure Synapse 中的无服务器池视图

Jos*_*h L 4 azure-sql-server azure-managed-identity azure-data-lake-gen2 azure-synapse

我已在 Azure Synapse 中设置了一个无服务器 SQL 池,该池正在查询我为链接的 Azure Data Lake 设置的视图。

CREATE VIEW DeviceTelemetryView
AS SELECT corporationid, deviceid, version, Convert(datetime, dateTimestamp, 126) AS dateTimeStamp, deviceData FROM
   OPENROWSET(
       BULK 'https://test123.dfs.core.windows.net/devicetelemetry/*/*/*/*/*/',
       FORMAT = 'PARQUET'
    ) AS [result]
GO
Run Code Online (Sandbox Code Playgroud)

使用 synapse studio 或 SSMS 中的 Azure AD 凭据查询此视图没有任何问题。当我尝试使用 SQL 管理员帐户进行查询时,出现以下错误:

找不到凭据“https://test123.dfs.core.windows.net/devicetelemetry/////*/ ” ,因为它存在或您没有权限。

重要的是,我能够使用 SQL 管理凭据进行查询,因为我们希望通过应用程序查询此视图以获取各种报告,因此不想使用 AAD 凭据。

我已经尝试过这里提供的SO解决方案:GRANT Database Scoped Credential语法给出不匹配的输入错误

GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL::[WorkspaceSystemIdentity] TO [sqlAdmin];
Run Code Online (Sandbox Code Playgroud)

由于这似乎是在将我的 DataLake 链接到 Synapse 时创建的默认凭据,但是在针对我的视图所在的数据库运行时,这会给我带来以下错误:

找不到数据库范围的凭据“WorkspaceSystemIdentity”,因为它不存在或您没有权限。

Kar*_*-MT 7

您需要创建服务器范围的凭据以允许访问存储文件。

服务器范围的凭据

当 SQL 登录调用OPENROWSET函数而不 DATA_SOURCE读取某些存储帐户上的文件时,将使用这些。服务器范围的凭据的名称必须与 Azure 存储的基本 URL 匹配(后面可以跟容器名称)。但是,SQL 用户无法使用 Azure AD 身份验证来访问存储,并且无服务器 SQL 池不会返回子文件夹,除非您/**在路径末尾指定。