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

Synapse无服务器SQL池视图RLS配置:ADLS访问权限错误解决

问题解决:Azure Synapse无服务器SQL池视图访问ADLS权限错误+行级安全实现

问题根源

出现event.csv无法打开错误的核心原因:用户通过OPENROWSET访问ADLS时,默认使用自身Entra ID身份进行认证,但用户无ADLS直接访问权限,导致认证失败。需切换为Synapse托管标识访问ADLS,同时完成RLS配置并限制用户直接访问底层资源。

解决方案步骤

1. 修改视图,强制使用托管标识访问ADLS

更新vw_events_rls视图,在OPENROWSET中指定使用Synapse工作区托管标识认证,绕过用户自身权限:

ALTER VIEW vw_events_rls
AS
SELECT e.*
FROM OPENROWSET(
    BULK 'https://<你的ADLS账户名>.dfs.core.windows.net/<容器名>/events.csv',
    FORMAT = 'CSV',
    FIRSTROW = 2,
    -- 指定使用Synapse托管标识访问ADLS
    CREDENTIAL = (IDENTITY = 'Managed Identity')
) AS e
JOIN user_access ua ON ua.username = SUSER_SNAME()
WHERE 
    -- 行级过滤逻辑:can_see_hidden=1的用户可见所有行,否则过滤hide行
    (ua.can_see_hidden = 1 OR e.event_show <> 'hide')

2. 配置外部表user_access使用托管标识

若之前创建的user_access外部表未使用托管标识,需重新配置外部数据源并重建表:

-- 创建基于托管标识的外部数据源
CREATE EXTERNAL DATA SOURCE adls_managed_source
WITH (
    LOCATION = 'https://<你的ADLS账户名>.dfs.core.windows.net/<容器名>',
    CREDENTIAL = (IDENTITY = 'Managed Identity')
);

-- 重建user_access外部表
CREATE OR ALTER EXTERNAL TABLE user_access (
    username VARCHAR(256),
    can_see_hidden INT
)
WITH (
    LOCATION = 'user_access.csv',
    DATA_SOURCE = adls_managed_source,
    FORMAT = 'CSV',
    FIRSTROW = 2
);

3. 限制用户直接访问底层资源

即使用户拥有Synapse SQL池管理员权限,也需撤销其对外部数据源、外部表的直接访问,确保只能通过视图获取数据:

-- 撤销用户对外部数据源的访问权限
REVOKE ALL ON EXTERNAL DATA SOURCE::adls_managed_source FROM user1, user2;

-- 撤销用户对user_access表的直接查询权限
REVOKE SELECT ON user_access FROM user1, user2;

-- 授予用户视图的查询权限
GRANT SELECT ON vw_events_rls TO user1, user2;

验证操作

  1. user1验证:登录后执行SELECT * FROM vw_events_rls;,应能查看所有行,无文件访问错误。
  2. user2验证:登录后执行查询,应仅显示event_show<>'hide'的行,无权限错误。
  3. 直接访问验证:尝试执行SELECT * FROM user_access;或直接用OPENROWSET访问ADLS文件,应返回权限不足提示,确保用户无法直接访问ADLS资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:00:14