Power BI 报表服务器中的行级别安全性 (RLS)

时间:2021-11-28 22:00:00

在 Power BI Desktop 中定义角色和规则

你可以在 Power BI Desktop 中定义角色和规则。 发布到 Power BI 时,它还会发布角色定义。

若要定义安全角色,请执行以下步骤。

  1. 将数据导入 Power BI Desktop 报表,或配置 DirectQuery 连接。

    备注

    不能在 Power BI Desktop 中为 Analysis Services 实时连接定义角色。 需要在 Analysis Services 模型中执行此操作。

  2. 选择“建模” 选项卡。

  3. 选择“管理角色” 。

    Power BI 报表服务器中的行级别安全性 (RLS)

  4. 选择“创建” 。

    Power BI 报表服务器中的行级别安全性 (RLS)

  5. 为角色提供名称。

  6. 选择你想要应用 DAX 规则的表。

  7. 输入 DAX 表达式。 此表达式应返回 true 或 false。 例如:[实体 ID] =“值”。

    备注

    可以在此表达式内使用 username() 。 请注意,username() 在 Power BI Desktop 中采用“域\用户名”格式 。 在 Power BI 服务和 Power BI 报表服务器中,采用用户的用户主体名称 (UPN) 格式。 或者,可以使用 userprincipalname(),它始终返回采用其用户主体名称格式 username@contoso.com 的用户 。

    Power BI 报表服务器中的行级别安全性 (RLS)

  8. 创建 DAX 表达式后,你可以选择表达式框上方的“检查”以验证该表达式。

    Power BI 报表服务器中的行级别安全性 (RLS)

    备注

    在此表达式框中,即使使用的区域设置通常使用分号分隔符(例如,法语或德语),也要使用逗号分隔 DAX 函数参数。

  9. 选择保存。

无法在 Power BI Desktop 中将用户分配到角色。 在 Power BI 服务中分配用户。 通过使用 username() 或 userprincipalname() DAX 函数并配置好正确的关系,则可以启用 Power BI Desktop 中的动态安全。

双向交叉筛选

默认情况下,行级别安全性筛选采用单向筛选器,无需考虑关系是设置为单向还是双向。 可以手动启用具有行级别安全性的双向交叉筛选器。

  • 选择关系并选中“双向应用安全性筛选器”复选框 。

    Power BI 报表服务器中的行级别安全性 (RLS)

基于用户名或登录 ID 实现动态行级别安全性时,请选中此框。

若要了解更多信息,请参阅在 Power BI Desktop 中使用 DirectQuery 的双向交叉筛选保护表格 BI 语义模型技术白皮书。

在 Power BI Desktop 中验证角色

创建角色后,请在 Power BI Desktop 中测试角色结果。

  1. 选择“以角色身份查看” 。

    Power BI 报表服务器中的行级别安全性 (RLS)

    在“以角色身份查看”中,可以看到创建的角色 。

    Power BI 报表服务器中的行级别安全性 (RLS)

  2. 选择创建的角色 >“确定”,应用该角色 。 报表呈现与该角色相关的数据。

  3. 你还可以选择其他用户,并提供给定用户 。 最好提供用户主体名称 (UPN),因为 Power BI 服务和 Power BI 报表服务器使用该名称。

    Power BI 报表服务器中的行级别安全性 (RLS)

  4. 选择“确定”,报表将基于该用户所见呈现内容 。

在 Power BI Desktop 中,如果使用的是基于 DAX 表达式的动态安全,“其他用户”仅显示不同的结果 。

向角色添加成员

在 Power BI 报表服务器中保存报表后,便可在服务器上管理安全性并添加或删除成员。 只有具有报表的发布者或内容管理器权限的用户才能使用行级别安全性选项,并且该选项不会呈灰色。

如果报表没有所需角色,则需要在 Power BI Desktop 中打开报表,添加或修改角色,然后将其保存回 Power BI 报表服务器。

  1. 在 Power BI Desktop 中,将报表保存到 Power BI 报表服务器。 需要使用更适合 Power BI 报表服务器的 Power BI Desktop 版本。

  2. 在 Power BI 报表服务中,请选择报表旁边的省略号(…)  。

  3. 选择“管理” > “行级别安全性” 。

    Power BI 报表服务器中的行级别安全性 (RLS)

    在“行级别安全性”页上,将成员添加到在 Power BI Desktop 中创建的角色 。

  4. 若要添加成员,请选择“添加成员” 。

  5. 在文本框中以用户名格式(域\用户)输入用户或组,并选择要为其分配的角色。 成员需在你的组织内。

    Power BI 报表服务器中的行级别安全性 (RLS)

    根据配置 Active Directory 的方式,在此处输入“用户主体名称”同样有效。 在此情况下,报表服务器会在列表中显示相应用户名。

  6. 单击“确定”进行应用 。

  7. 若要删除成员,请选择成员名称旁边的框并选择“删除” 。 一次可以删除多个成员。

    Power BI 报表服务器中的行级别安全性 (RLS)

username() 和 userprincipalname()

可在数据集内利用 DAX 函数 username() 或 userprincipalname()。 可在 Power BI Desktop 中的表达式内使用它们。 发布模型时,Power BI 报表服务器将使用它们。

在 Power BI Desktop 中,username() 返回采用域\用户格式的用户,userprincipalname() 返回采用 user@contoso.com 格式的用户。

在 Power BI Desktop 中,username() 和 userprincipalname() 均返回用户的“用户主体名称 (UPN)”,类似于电子邮件地址。

如果在 Power BI 报表服务器中使用自定义身份验证,则会返回为用户设置的用户名格式。

限制

以下是 Power BI 模型上有关行级别安全性的当前限制。

使用 username() DAX 函数生成报表的用户现在将注意到新的行为,该行为会返回用户主体名称 (UPN),但配合使用 DirectQuery 和集成安全性时除外。 由于该场景中不考虑 RLS,因此该场景中的行为保持不变。

只能在使用 Power BI Desktop 创建的数据集上定义 RLS。 若要为使用 Excel 创建的数据集启用 RLS,首先必须将你的文件转换为 Power BI Desktop (PBIX) 文件。 了解关于 Excel 文件的详细信息。

只支持使用已存储凭据的提取、转换、加载 (ETL) 和 DirectQuery 连接。 连接到分析服务的实时连接和使用集成身份验证的 DirectQuery 连接均在底层数据源中进行处理。

如果配合使用集成安全性和 DirectQuery,用户可能会注意到:

  • 已禁用 RLS,且已返回所有数据。
  • 用户不能更新其角色分配,并且在“RLS 管理”页上收到错误。
  • 对于 DAX 用户名函数,仍继续按“域\用户”接收用户名。

在 Power BI 报表服务器中,报表作者无权查看报表数据,除非他们在上传报表后为自己分配了相应角色。