【问题标题】:How do I write a DAX expression in Power BI for row-level security?如何在 Power BI 中编写 DAX 表达式以实现行级安全?
【发布时间】:2021-07-01 06:39:11
【问题描述】:

我正在尝试基于单独的用户表在一个表上实现行级安全性。我在 this 这样的地方看到过这个话题,但我的情况还没有解决。

用户表:

交易表:

我要保护的表称为事务。每行中的一个字段是 CompanyID。用户表包含三列:AccountIDUserEmailCompanyID。我想要的是只有分配给给定 CompanyID 的用户才能使用这些 CompanyID 查看 Transactions 表中的行。

由于多个用户可以查看给定的行,因此我在 CompanyID 字段中建立了从 Transactions 到 Users 的一对多关系。

我创建了一个 DAX 表达式,它使用以下内容过滤用户表:

[UserEmail] = USERPRINCIPALNAME()

当我在 Power BI Desktop 中选择“查看为 -> 其他用户”并输入随机电子邮件时,我仍然可以看到整个报表。知道我遗漏了什么吗?

编辑: 我省略了一个重要的规定:任何与 CompanyID 为 1 关联的用户都可以查看 Transaction 表的所有记录。我尝试过类似的方法

  [UserEmail] = USERPRINCIPALNAME() || 
COUNTROWS(FILTER('Users', [UserEmail] = USERPRINCIPALNAME() && [CompanyId] = 1)) = 1

但它们不起作用。即使是 CompanyId 为 1 的用户也被禁止查看表格。

【问题讨论】:

    标签: powerbi dax row-level-security


    【解决方案1】:

    来自文档:

    默认情况下,行级安全过滤使用单向 过滤器,关系是否设置为单向或 双向。您可以手动启用双向交叉过滤 通过选择关系并检查 双向应用安全过滤器复选框。选择此选项 当您还在服务器上实现了动态行级安全性时 级别,其中行级别的安全性基于用户名或登录 ID。

    https://docs.microsoft.com/en-us/power-bi/admin/service-admin-rls

    【讨论】:

    • 感谢您的回复。我上面所做的其他一切似乎都是正确的吗?
    • 是的,看起来是对的,但是需要检查Users和Transactions的关系
    • 您有没有看到我对原始问题所做的修改?如果您对如何解决此问题有任何想法,我将不胜感激。
    • 我对所有复杂 RLS 场景的一般指导是构建一个具有正确粒度的表以应用简单的 RLS 过滤器。所以这里有一个表 UserCompany(UserId,CompanyId) 枚举每个用户可以访问的公司。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 2023-03-17
    • 2022-08-13
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    相关资源
    最近更新 更多