You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

解决Synapse无服务器SQL池SQL管理员查询ADLS视图权限问题

我来帮你搞定这个问题!你遇到的核心矛盾是:SQL管理员账户默认没有访问Azure Data Lake Storage (ADLS)的权限,而且你之前尝试授权的WorkspaceSystemIdentity并不是数据库范围凭据——它是Synapse工作区的托管标识,这就是你执行授权语句报错的原因。下面是一步步的解决方案:

1. 确认Synapse工作区托管标识的ADLS权限

首先要确保Synapse工作区的托管标识(也就是你提到的WorkspaceSystemIdentity)在ADLS的devicetelemetry容器上拥有Storage Blob Data Reader权限(如果需要写入操作可以选Contributor)。这一步是基础,因为我们后续要通过这个托管标识让SQL管理员间接访问ADLS。

2. 创建关联托管标识的数据库范围凭据

在视图所在的数据库中,创建一个数据库范围凭据,把它和Synapse工作区的托管标识绑定:

CREATE DATABASE SCOPED CREDENTIAL WorkspaceIdentityCredential
WITH IDENTITY = 'Managed Identity';

这里不需要设置SECRET,因为托管标识的凭据不需要密钥,SQL会自动关联工作区的托管标识。

3. 修改视图,指定使用这个凭据

原来的视图没有指定访问ADLS的凭据,所以默认会用当前查询用户的权限(SQL管理员没有ADLS权限,因此报错)。现在修改视图,让它使用我们刚创建的凭据:

ALTER 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',
CREDENTIAL = [WorkspaceIdentityCredential] -- 新增这一行,指定凭据
) AS [result] 
GO

4. 给SQL管理员授予凭据的引用权限

现在这个数据库范围凭据已经存在了,给你的SQL管理员账户授予引用它的权限:

GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL::[WorkspaceIdentityCredential] TO [sqlAdmin];

验证效果

完成以上步骤后,用你的SQL管理员账户重新查询DeviceTelemetryView,应该就能正常返回数据了!

为什么之前的方法失败?

WorkspaceSystemIdentity是Synapse工作区层面的托管标识,不是数据库内的数据库范围凭据对象,所以你执行GRANT REFERENCES时会提示找不到它。我们需要在数据库内创建一个映射到该托管标识的凭据,才能让SQL管理员通过这个凭据间接获取ADLS的访问权限。

内容的提问来源于stack exchange,提问作者Josh L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:50:41