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

在Synapse无服务器池创建外部表访问ADLS Gen2 Delta表遇权限问题

问题分析与解决办法

错误原因

你遇到的Msg 16561错误,是因为使用SQL密码认证的管理员账号(非Azure Entra ID)访问ADLS Gen2目录时,没有足够权限列出目录内容。虽然你创建了数据库范围凭据,但仍有几个关键配置需要确认:

1. 检查SAS Token的权限

你的SAS Token必须包含List和Read权限,否则无法读取Delta表的目录结构。重新生成SAS时需确保:

  • 权限勾选List、Read
  • 资源类型至少包含Container和Object
  • 有效期覆盖当前访问时间

2. 验证数据库范围凭据与外部数据源的关联

执行以下SQL确认配置正确:

-- 检查数据库范围凭据是否存在
SELECT name, credential_id FROM sys.database_scoped_credentials WHERE name = 'datalakegen2';
-- 检查外部数据源是否关联了正确的凭据
SELECT name, location, credential_id FROM sys.external_data_sources WHERE name = 'data_lake_gen2_dfs';

同时确认外部表的LOCATION路径正确,ADLS Gen2上该目录确实存在且包含Delta表的_delta_log文件夹和数据文件。

3. 为SQL账号授予显式权限

即使是管理员账号,也需要显式授予访问外部数据源和表的权限:

-- 授予外部数据源的引用权限
GRANT REFERENCES ON EXTERNAL DATA SOURCE::data_lake_gen2_dfs TO [你的SQL管理员账号];
-- 授予外部表的查询权限
GRANT SELECT ON EXTERNAL TABLE::dbo.table_ext TO [你的SQL管理员账号];

4. 检查ADLS Gen2的防火墙设置

  • 如果存储账户开启了防火墙,需勾选“允许受信任的Azure服务访问此存储账户”,确保Synapse能访问
  • 若从本地SSMS连接,需将本地IP添加到ADLS的防火墙允许列表中

5. 确认Delta表版本兼容性

Synapse无服务器池支持Delta Lake 2.0及以下版本,需确保ADLS上的Delta表版本符合要求,且外部表结构与Delta表完全匹配(列名、数据类型一致)

关于非Entra ID账号的授权说明

对于SQL密码认证的账号(非Azure Entra ID),Synapse无服务器池仅支持通过数据库范围凭据(SAS或存储账户密钥)访问ADLS Gen2,无法使用RBAC权限。因此核心是确保SAS Token权限充足,且账号拥有外部数据源和表的显式访问权限。

内容的提问来源于stack exchange,提问作者Anupam Chand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:41:12