使用USERPRINCIPALNAME()的RLS DAX表达式失效问题排查
行级安全(RLS)中USERPRINCIPALNAME()失效的排查方案
常见问题及解决步骤
- 核对邮箱格式一致性
先确认邮箱映射表里的邮箱地址和USERPRINCIPALNAME()返回的内容完全匹配,包括大小写、完整域名后缀(比如zhangsan@company.com不能写成zhangsan)。DAX对字符串匹配是大小写敏感的,格式差一点就会匹配失败。 - 调整RLS筛选的作用对象
不要直接在主表写RLS筛选,应该把筛选逻辑加在邮箱映射表上。比如给映射表添加RLS角色规则:
利用映射表和主表的一对多关系,自动过滤主表中关联的行。如果直接在主表写关联筛选,容易因为上下文问题导致函数失效。[用户邮箱] = USERPRINCIPALNAME() - 验证USERPRINCIPALNAME()的实际返回值
在Power BI里新建一个度量值:
用实际业务账号登录报表,查看这个度量值显示的邮箱,和映射表里的记录对比,确认完全一致。当前用户 = USERPRINCIPALNAME() - 检查Power BI服务的身份配置
如果是在服务端使用,确保工作区的身份验证模式是组织身份验证,避免匿名或其他模式导致函数无法正确获取用户信息。 - 确认角色的应用与测试账号
要确保RLS角色已经绑定到目标数据集,并且测试时用的是被授权的普通用户账号,数据集所有者默认不受RLS限制,用所有者账号测试看不到效果。
内容的提问来源于stack exchange,提问作者ya23
相关产品推荐
相关产品推荐

