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

已完成

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

当 Power BI 强制实施 OLS 时,它不仅会限制对表和列的访问,而且还可以保护元数据。 保护元数据时,无法使用 动态管理视图(DMV)检索有关安全表和列的信息。

重要

表格模型可以使用 透视隐藏表和列(和其他对象)。 透视定义模型对象的可查看子集,以帮助为报表作者提供特定焦点。 透视旨在降低模型的复杂性,帮助报表作者找到感兴趣的资源。 但是,透视不是安全功能,因为它们不保护对象。 即使表或列不可见,用户仍可以查询表或列。

请考虑 Adventure Works 的一个例子。 此组织具有名为 DimEmployee 的数据仓库维度表。 该表包含用于存储员工姓名、电话、电子邮件地址和工资的列。 虽然常规报表使用者可以看到员工姓名和联系人详细信息,但他们不能看到工资值。 仅允许高级人力资源人员查看工资值。 因此,数据建模器使用 OLS 仅向特定人力资源人员授予对工资列的访问权限。

屏幕截图显示了“员工”表的模型图视图,其中包括受限的“工资”列。

OLS 是继承自 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 的功能。 此功能在 Power BI Premium 中提供,可为迁移到 Power BI 的模型提供向后兼容性。 因此,无法在 Power BI Desktop 中完全设置 OLS。

设置 OLS

若要设置 OLS,首先创建角色。 可以在 Power BI Desktop 中创建角色,就像设置 RLS 时一样。 接下来,需要将 OLS 规则添加到角色。 Power BI Desktop 不支持此功能,因此需要采用其他方法。

使用 XML for Analysis(XMLA)终结点将 OLS 规则添加到 Power BI Desktop 模型。 XMLA 终结点随 Power BI Premium 一起提供,它们提供对 Power BI 服务中的 Analysis Services 引擎的访问权限。 读/写终结点支持数据集管理、应用程序生命周期管理、高级数据建模等。 可以使用启用了 XMLA 终结点的 API 编写脚本,例如 表格模型脚本语言(TMSL)PowerShell SqlServer 模块。 也可以使用客户端工具,例如 SSMS。 还有第三方工具选项,如 表格编辑器,它是用于创建、维护和管理模型的开源工具。

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

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

注意事项

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

屏幕截图显示报表可视化尝试查询受限列时的 Power BI Desktop 错误消息。

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

限制

实现 OLS 时,需要注意一些限制。

不能在同一角色中混合使用 RLS 和 OLS。 如果需要在同一模型中应用 RLS 和 OLS,请创建专用于每种类型的单独角色。 此外,如果表级安全性破坏了关系链,则不能设置表级安全性。 例如,如果表 A 和 B 和 B 和 C 之间存在关系,则无法保护表 B。如果表 B 受到保护,则表 A 上的查询无法传输表 A 和 B 和 B 和 C 之间的关系。在这种情况下,可以在表 A 和 C 之间设置单独的关系。

关系图显示了上一段中所述的关系示例。

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

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

有关详细信息,请参阅 对象级安全性