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

Synapse无服务器中AD/AAD登录的EXECUTE AS USER失效问题求解

在Synapse无服务器中让AAD组授权用户正常使用EXECUTE AS USER的方法

问题核心在于:Synapse无服务器中,EXECUTE AS USER只能引用数据库中显式创建的用户主体。通过AAD组间接获得权限的用户,默认不会在数据库中生成独立的主体记录,因此执行模拟时会出现身份解析错误。

解决步骤:

  1. 为目标AAD用户单独创建数据库主体
    先在master库创建对应用户的AAD登录,再在目标无服务器数据库中创建用户:

    USE master
    GO
    CREATE LOGIN [john.smith@mycompany.com] FROM EXTERNAL PROVIDER;
    
    USE DataWareHouseServerless
    GO
    CREATE USER [john.smith@mycompany.com] FROM LOGIN [john.smith@mycompany.com];
    

    创建完成后,即可正常执行模拟:

    EXECUTE AS USER = 'john.smith@mycompany.com';
    
  2. 同步权限配置
    将单独创建的用户加入你已有的ReadOnlyRestricted角色,确保其权限和原AAD组一致:

    USE DataWareHouseServerless
    GO
    ALTER ROLE ReadOnlyRestricted ADD MEMBER [john.smith@mycompany.com];
    

为什么之前的尝试失败:

  • 用xyz\john.smith或john.smith:Synapse无服务器对AAD用户的身份识别依赖完整的UPN(邮箱格式),而非本地SQL Server常用的NTLM格式;且该用户未在数据库中创建主体,无法被系统解析。
  • 模拟AAD组名称:这种方式只能模拟组本身的身份,而非组内单个用户,若需模拟组身份此方法可行,但无法实现单个用户的模拟需求。

注意:Synapse无服务器不支持EXECUTE AS LOGIN,所有身份模拟必须基于数据库内的用户主体,这是和本地SQL Server的关键差异——本地SQL Server可通过AD域解析组内用户身份,而Synapse完全依赖Azure AD的显式主体映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:12:51