限制对 Power BI 模型对象的访问权限

已完成

作为数据建模人员,您可以考虑限制用户对 Power BI 模型对象的访问权限。 对象级安全性 (OLS) 可以限制对特定表和列及其元数据的访问权限。 通常,您会将对象级安全性应用于存储敏感数据(例如员工个人数据)的安全对象。

以 Tailspin Traders 为例。 此组织有一个名为 DimEmployee 的数据仓库维度表。 该表包括存储员工姓名、电话、电子邮件地址和薪金的列。 虽然常规报表使用者可以看到员工姓名和联系人详细信息,但他们不能看到薪金值。 只有高级人力资源员工才能查看薪金值。 因此,数据建模人员使用对象级安全性仅向特定人力资源员工授予对薪金列的访问权限。

设置对象级安全性

若要设置对象级安全性,首先要创建角色。 您可以按照设置 RLS 时的相同方式在 Power BI Desktop 中创建角色。 接下来,您需要向角色添加对象级安全性规则。 此功能不受 Power BI Desktop 支持,因此您需要采取其他方法,例如,使用 Power BI Desktop 的 TMDL 视图(当前处于预览版)。 借助此功能,您可以使用表格模型定义语言 (TMDL) 编写脚本、修改和应用更改,为使用代码进行语义建模提供替代体验,而无需使用图形用户界面(例如模型视图)。

若要打开此公开预览版功能,请转到文件 > 选项和设置 > 选项 > 预览功能,然后选中 TMDL 视图旁边的框。

启用预览功能后,TMDL 视图选项卡将出现在 Power BI Desktop 窗口的左侧:

首次打开 TMDL 视图时,代码编辑器将为空,您可以通过从数据窗格中选择对象(您可以在模型视图中找到角色)并将它们拖动到代码编辑器中,编写诸如表、度量值、列或角色等语义模型对象的脚本。

默认情况下,所有模型表和列均不受限制。 可以将它们设置为读取。 如果设置为,则与角色关联的用户无法访问该对象。 如果设置为读取,则与角色关联的用户无法访问对象。 限制特定列时,请确保表未设置为

createOrReplace
    role 'All Employees (no HR)'
        tablePermission Employee
            columnPermission Salary = none

准备就绪后,您可以选择应用按钮以针对语义模型执行 TMDL 脚本,并在单个步骤中应用 TMDL 代码更改。

添加对象级安全性规则后,可以将模型发布到 Power BI 服务。 对 RLS 使用相同的流程以将帐户和安全组映射到角色。

注意事项

在 Power BI 报表中,当用户无权访问表或列时,将收到一条错误消息。 该消息将通知他们该对象不存在。

仔细考虑对象级安全性是否是适合您的项目的解决方案。 当用户打开查询受限对象的 Power BI 报表时,错误消息可能会令人困惑,并导致负面体验。 对他们来说,报表似乎坏了。 更好的方法是针对不同的报表使用者要求创建一组单独的模型或报表。

限制

在实现对象级安全性时需要注意一些限制。

无法从不同的角色结合使用行级别安全性和对象级安全性,因为它可能会引入对安全数据的意外访问。 此外,如果表级别安全性会中断关系链,则无法设置它。 例如,如果表 A 和 B 以及表 B 和 C 之间存在关系,则无法保护表 B。如果表 B 受到保护,则对表 A 的查询无法传输表 A 和 B 以及表 B 和 C 之间的关系。在这种情况下,您可以在表 A 和 C 之间设置单独的关系。

但是,引用受保护列的模型关系将起作用,前提是该列的表不受保护。

最后,虽然无法保护度量值,但引用安全对象的度量值会自动受到限制。