问题描述
我正在尝试基于单独的用户表在一个表上实现行级安全。我在 this 之类的地方看到过这方面的讨论,但一直无法解决我的问题。
用户表:
交易表:
我想要保护的表称为交易。每行中的一个字段是 CompanyID。用户表包含三列:AccountID
、UserEmail
和 CompanyID
。我希望只有分配给给定 CompanyID 的用户才能使用这些 CompanyID 查看 Transactions 表中的行。
由于不止一个用户可以查看给定的行,我在 CompanyID 字段上建立了从交易到用户的一对多关系。
[UserEmail] = USERPRINCIPALNAME()
当我在 Power BI Desktop 中选择“查看为 -> 其他用户”并输入随机电子邮件时,我仍然可以看到整个报告。知道我要遗漏什么吗?
编辑: 我遗漏了一个重要的规定:任何与 CompanyID 为 1 相关联的用户都可以查看 Transaction 表的所有记录。我尝试过类似的方法
[UserEmail] = USERPRINCIPALNAME() ||
COUNTROWS(FILTER('Users',[UserEmail] = USERPRINCIPALNAME() && [CompanyId] = 1)) = 1
但它们不起作用。即使 CompanyId 为 1 的用户也被禁止查看表格。
解决方法
来自文档:
默认情况下,行级安全过滤使用单向 过滤器,无论是将关系设置为单向还是 双向。您可以手动启用双向交叉过滤 通过选择关系并检查行级安全性 双向应用安全过滤器复选框。选择这个选项 当您还在服务器上实现了动态行级安全性时 级别,其中行级安全性基于用户名或登录 ID。
https://docs.microsoft.com/en-us/power-bi/admin/service-admin-rls