Power BI 行级别安全性 (RLS) 可用于限制给定用户的数据访问。 筛选器可限制行级别上的数据。 你可以定义角色中的筛选器。

可以使用 Power BI Desktop 为导入到 Power BI 的数据模型配置 RLS。 你还可以在使用 DirectQuery(如 SQL Server)的数据集上配置 RLS。 在此之前,你只能在 Power BI 外的本地 Analysis Services 模型中实现 RLS。 对于 Analysis Services 的实时连接,你可以在本地模型上配置行级别安全性。 实时连接数据集不会显示安全选项。

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

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

如果你想利用动态安全,则需要启用预览开关,从而为 DirectQuery 启用两个方向的交叉筛选。 这将使得能够在两个方向上进行交叉筛选和应用安全筛选器。

若要定义安全角色,你可以执行以下操作。

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

    Note:

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

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

  3. 选择“管理角色”。

  4. 选择“创建”。

  5. 为角色提供名称。

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

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

    Note:

    可以在此表达式内使用 username()*。 请注意,*username() 在 Power BI Desktop 中将采用*域\用户名*的格式。 在 Power BI 服务中,它的格式则为用户的 UPN。 或者,可以使用 userprincipalname(),它将始终返回采用其用户主体名称格式的用户。

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

  9. 选择“保存”。

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

验证 Power BI Desktop 中的角色

创建角色后,你可以测试 Power BI Desktop 中的角色结果。 若要执行此操作,请选择“以角色身份查看”。

“以角色身份查看”对话框允许更改正在查看的特定用户或角色的视图。 你将看到创建的角色。

选择创建的角色,然后选择“确定”,将角色应用于正在查看的视图。 报表将仅呈现与该角色相关的数据。

你还可以选择其他用户,并提供给定用户。 最好提供用户主体名称 (UPN),因为 Power BI 服务将使用该名称。 选择“确定”,报表将呈现基于该用户能看到的内容。

Note:

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

管理模型上的安全性

若要管理数据模型上的安全性,你需要执行以下操作。

  1. 为数据集选择“省略号(...)”。
  2. 选择“安全”。

这将转到 RLS 页面,使你可以为 Power BI Desktop 中创建的角色添加成员。 只有数据集的所有者才能看到可用的安全性。 如果数据集在某个组中,则只有该组的管理员才能看到安全选项。

你只能创建或修改 Power BI Desktop 中的角色。

使用成员

添加成员

你可以通过键入邮件地址、用户姓名、你想要添加的安全组或通讯组列表,以向你的角色添加成员。 此成员需在你的组织内。 不能添加在 Power BI 内创建的组。

你还可以通过角色名称或“成员”旁边的括号内的数字看到有多少成员属于该角色。

移除成员

你可以通过选择成员名称旁的 X 来移除成员。

验证 Power BI 服务中的角色

你可以通过测试角色来验证你定义的角色是否正常工作。

  1. 选择角色旁的“省略号 (...)”。
  2. 选择“作为角色测试数据”

然后你会看到对该角色可用的报表。 仪表板不在此视图中显示。 在上面的蓝色栏中,你将看到被应用的内容。

可通过选择“立即以此角色查看”来测试其他角色或角色组合。

可选择以特定人员的身份查看数据,或选择可用角色的组合以验证它们是否工作。

选择“返回到行级安全性”以返回到正常查看。

使用 username() 或 userprincipalname() DAX 函数

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

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

在 Power BI 服务中,username() 和 userprincipalname() 都将返回用户的用户主体名称 (UPN)。 这看起来类似于电子邮件地址。

在 Power BI 中使用 RLS 和应用工作区

如果将 Power BI Desktop 报表发布到 Power BI 服务中的应用工作区,这些角色将应用于只读成员。 将需要指示这些成员只可以查看应用工作区设置中的 Power BI 内容。

Warning:

如果已配置应用工作区,因此成员具有编辑权限,那么将不会向这些成员应用 RLS 角色。 用户将能看到所有数据。

限制

这是云模型上有关行级安全性的当前限制列表。

  • 如果你以前有在 Power BI 服务中定义了角色/规则,则将需要在 Power BI Desktop 中重新创建它们。
  • 只能通过使用 Power BI Desktop 客户端在创建的数据集上定义 RLS。 若想为使用 Excel 创建的数据集启用 RLS,首先需要将你的文件转换为 PBIX 文件。 了解详细信息
  • 仅支持 ETL 和 DirectQuery 连接。 在本地模型上处理到 Analysis Services 的实时连接。
  • 问与答以及 Cortana 此时不受 RLS 的支持。 如果对所有模型配置了 RLS,你将无法看到仪表板的问与答输入框。 这还在规划之中,但具体日程尚不可知。
  • 对于使用 RLS 的数据集,暂不支持外部共享。
  • 对于任何给定的模型,可以分配给安全角色的 Azure AD 主体(例如单个用户或安全组)的最大数量为 1,000。 若要将大量用户分配给角色,请确保分配安全组,而不是单个用户。

已知问题

有一个已知的问题,那就是当尝试从 Power BI Desktop 发布以前已发布过的内容时,将收到一个错误信息。 该场景如下所示。

  1. Anna 有一个已发布到 Power BI 服务且已配置了 RLS 的数据集。

  2. Anna 在 Power BI Desktop 中更新报表并重新发布。

  3. Anna 将收到一个错误。

解决方法:重新从 Power BI 服务中发布 Power BI Desktop 文件,直到此问题得到解决。 可以通过选择“获取数据” > “文件”来执行此操作。

常见问题解答

问:如果我以前在 Power BI 服务中为数据集创建了角色/规则会怎么样? 如果我不执行任何操作,它们是否仍将起作用? 答:不能。 视觉对象将不会正确呈现。 你需要重新创建 Power BI Desktop 中的角色/规则,然后发布到 Power BI 服务。

问:我是否可以为 Analysis Services 数据源创建这些角色? 答︰如果你将数据导入 Power BI Desktop 中,那么你就可以创建。 如果你正在使用实时连接,那么你将不能配置 Power BI 服务中的 RLS。 这是在 Analysis Services 模型内部部署中定义的。

后续步骤

Power BI Desktop 行级别安全性 (RLS)

更多问题? 尝试咨询 Power BI 社区