Power BI 行级别安全性 (RLS)

Power BI 行级别安全性 (RLS) 可用于限制给定用户的数据访问。 筛选器限制行级别的数据访问,你可以定义角色中的筛选器。 在 Power BI 服务中,工作区的成员有权访问工作区中的数据集。 RLS 不限制此类数据访问。

可以使用 Power BI Desktop 为导入到 Power BI 的数据模型配置 RLS。 你还可以在使用 DirectQuery(如 SQL Server)的数据集上配置 RLS。 对于 Analysis Services 或 Azure Analysis Services 的实时连接,你可以在模型中配置行级安全性,而不是在 Power BI Desktop 中配置。 实时连接数据集不会显示安全选项。

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

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

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

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

    注意

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

  2. 从“建模”选项卡中,选择“管理角色” 。

    选择“管理角色”

  3. 从“管理角色”窗口中,选择“创建” 。

    选择“创建”

  4. 在“角色”下,提供角色的名称。

    注意

    不能使用逗号定义角色,例如 London,ParisRole

  5. 在“表”下,选择要对其应用 DAX 规则的表。

  6. 在“表筛选器 DAX 表达式”框中,输入 DAX 表达式。 此表达式返回值 true 或 false。 例如:[Entity ID] = “Value”

    “管理角色”窗口

    注意

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

  7. 创建 DAX 表达式后,选择“表达式”框上方的“复选标记”以验证该表达式。

    验证 DAX 表达式

    注意

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

  8. 选择“保存”。

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

默认情况下,行级别安全性筛选采用单双向筛选器,无需考虑关系是设置为单向还是双向。 通过选择关系并勾选“在两个方向上应用安全筛选器”复选框,可手动启用具有行级别安全性的双向交叉筛选。 请注意,如果一个表参与多个双向关系,你只能为其中一个关系选择此选项。 如果你还在服务器级别实现了动态行级别安全性,则选择此选项,其中行级别安全性基于用户名或登录 ID。

有关详细信息,请参阅在 Power BI Desktop 中使用 DirectQuery 的双向交叉筛选保护表格 BI 语义模型技术文章。

应用安全性筛选器

在 Power BI Desktop 中验证角色

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

  1. 从“建模”选项卡中,选择“查看方式” 。

    选择“以角色身份查看”

    “以角色身份查看”窗口将显示,在其中你可以看到已创建的角色。

    “以角色身份查看”窗口

  2. 选择创建的角色,然后选择“确定”应用该角色。

    报表呈现与该角色相关的数据。

  3. 你还可以选择其他用户,并提供给定用户。

    选择“其他用户”

    最好提供用户主体名称 (UPN),因为 Power BI 服务和 Power BI 报表服务器使用该名称。

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

  4. 选择“确定”。

    报表会基于用户能够查看的内容进行呈现。

    注意

    “以角色身份查看”功能不适用于已启用单一登录 (SSO) 的 DirectQuery 模型。

现在你已经完成了对 Power BI Desktop 中角色的验证,接下来可将报表发布到 Power BI 服务中。

管理模型上的安全性

若要管理数据模型的安全性,请在 Power BI 服务中打开保存报表的工作区,然后执行以下步骤:

  1. 在 Power BI 服务中,选择数据集的“更多选项”菜单。 将鼠标悬停在数据集名称上时将显示此菜单,无论是从导航菜单还是从工作区页中选择该菜单都是如此。

    工作区中的“更多选项”菜单

    导航菜单中的“更多选项”菜单

  2. 选择“安全”。

    从“更多选项”菜单中选择安全性

选择安全性将转到“行级别安全性”页,在此可为 Power BI Desktop 中创建的角色添加成员。 参与者(和更高的工作区角色)将参阅“安全性”,并且可以将用户分配到角色。

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

使用成员

添加成员

在 Power BI 服务中,可通过键入电子邮件地址、用户姓名或安全组,向角色添加成员。 不能添加在 Power BI 中创建的组。 可将成员添加到组织的外部

可以使用下面的组设置行级别安全性。

  • 分发组
  • 启用邮件的组
  • 安全组

不过,请注意,Office 365 组不受支持,并且不能将其添加到任何角色。

添加成员

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

角色中的成员

移除成员

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

移除成员

验证 Power BI 服务中的角色

你可以通过测试角色来验证所定义的角色是否在 Power BI 服务中正常工作。

  1. 选择该角色旁边的“更多选项”(...)。
  2. 选择“以角色身份测试数据”。

以角色身份测试

你将被重定向到使用此数据集从 Power BI Desktop 发布的报表(如果存在)。 仪表板不可用于使用“以角色身份测试”选项进行测试。

在页眉中,将显示正在应用的角色。

“现在以美国东部进行查看”的屏幕截图。

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

测试其他角色

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

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

注意

“以角色身份测试”功能不适用于已启用单一登录 (SSO) 的 DirectQuery 模型。

使用 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 服务中的工作区,RLS 角色将应用于分配有工作区“查看者”角色的成员。 即使向“查看者”提供数据集生成权限,也仍将应用 RLS。 例如,如果具有生成权限的查看者使用在 Excel 中分析,则其数据视图将受 RLS 保护。 分配有“管理员”、“成员”或“参与者”的工作区成员具有数据集编辑权限,因此 RLS 不会应用于这些成员 。 如果希望 RLS 应用于工作区中的人员,则只能为他们分配“查看者”角色。 详细了解工作区中的角色

注意事项和限制

云模型上针对行级别安全性的当前限制如下:

  • 如果你以前在 Power BI 服务中定义了角色和规则,则必须在 Power BI Desktop 中重新创建它们。
  • 只能在使用 Power BI Desktop 创建的数据集上定义 RLS。 若想为使用 Excel 创建的数据集启用 RLS,首先必须将你的文件转换为 Power BI Desktop (PBIX) 文件。 了解详细信息
  • 无法将服务主体添加到 RLS 角色。 因此,不会为将服务主体作为最终有效标识的应用使用 RLS。
  • 仅支持导入和 DirectQuery 连接。 在本地模型上处理到 Analysis Services 的实时连接。
  • “以角色身份测试/以角色身份查看”功能不适用于已启用单一登录 (SSO) 的 DirectQuery 模型。

常见问题解答

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

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

问:我能使用 RLS 限制用户可以访问的列或度量值吗?
答:不能,如果用户有权访问特定数据行,那么他们可以查看该行的所有数据列。

问:RLS 是否允许我隐藏详细的数据,但提供对在视觉对象中汇总的数据的访问权限?
答:不允许,你可以保护单个数据行,但用户始终可以查看详细信息或汇总的数据。

问:我的数据源已经定义了安全角色(例如 SQL Server 角色或 SAP BW 角色)。 这些角色与 RLS 之间有什么关系?
答:答案取决于要导入数据还是使用 DirectQuery。 如果要将数据导入 Power BI 数据集中,则不会使用数据源中的安全角色。 在这种情况下,应定义 RLS 以对在 Power BI 中进行连接的用户强制实施安全规则。 如果使用 DirectQuery,则使用数据源中的安全角色。 当用户打开报表时,Power BI 将查询发送到基础数据源,该数据源根据用户的凭据将安全规则应用于数据。

后续步骤