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

如何修改Azure SQL数据集以支持Effective Identity实现RLS

解决App Owns Data嵌入时RLS无法启用的问题

你遇到的"此复选框已禁用,因为当前报表不支持提供有效用户名"提示,核心原因是你的数据集配置没有满足App Owns Data模式下传递Effective Identity的要求——虽然Desktop里RLS能正常工作,但服务端的数据源配置、RLS设置还需要调整。下面是具体的解决步骤:

1. 先确认RLS角色的定义逻辑

既然你在Desktop里能按角色查看报表,说明RLS的筛选逻辑本身没问题,但要确保角色规则是基于用户身份函数写的,这样才能和嵌入时传递的Effective Identity关联:

  • 打开Power BI Desktop,进入「建模」→「管理角色」
  • 检查每个角色的筛选条件,必须使用USERPRINCIPALNAME()(返回用户邮箱)或USERNAME()(返回用户名)函数,比如:
    [UserEmailColumn] = USERPRINCIPALNAME()
    
  • 保存后重新发布数据集到Power BI服务。

2. 针对Azure SQL DB数据源的配置调整

根据你用的是DirectQuery还是导入模式,分两种情况处理:

情况A:使用DirectQuery连接Azure SQL DB

这是最常见的需要传递身份的场景,必须确保数据源支持Azure AD身份验证:

  1. 登录Power BI服务,找到你的数据集,进入「设置」→「数据源连接」
  2. 把身份验证方式改成Azure Active Directory - Service Principal或Azure AD Integrated(绝对不能用SQL Server身份验证,否则无法传递用户身份)
  3. 确保你的App Owns Data应用(Service Principal)拥有两个关键权限:
    • 在Azure SQL DB中至少有Reader权限
    • 在Azure AD中拥有Directory Readers权限(用于读取嵌入用户的身份信息)
  4. 回到数据集的「RLS」设置页,此时「允许嵌入用户查看此数据集的RLS筛选数据」复选框应该可以正常勾选了。

情况B:使用导入模式

导入模式下RLS是在Power BI数据集内部处理的,不需要传递身份到SQL DB,但需要开启服务端的支持:

  1. 在Power BI服务的数据集「RLS」设置页,勾选允许应用使用Effective Identity访问此数据集
  2. 在你的嵌入代码中,必须明确传递EffectiveIdentity参数。比如用.NET SDK时:
    var tokenRequest = new GenerateTokenRequest(
        accessLevel: "view",
        effectiveIdentity: new EffectiveIdentity(
            username: "user@yourdomain.com",
            roles: new List<string> { "你的RLS角色名" }
        )
    );
    

3. 最后检查工作区权限

  • 确保你的App Owns Data应用在对应的Power BI工作区中是「成员」或「管理员」身份
  • 确认数据集的权限设置中,应用拥有「读取」权限

完成这些配置后,再尝试嵌入时就能正常启用RLS并传递Effective Identity了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:46:09