Power BI Embedded中的安全过滤

时间:2019-12-16 08:26:58

标签: azure powerbi powerbi-embedded row-level-security azure-security

目前,我有以下情况。我在Power BI中有一个报告,该报告从具有所有公司数据的数据集中读取。在我的ASP .NET MVC应用程序中,用户将选择要为其显示报告的公司,并且使用Power BI Embedded,该应用程序通过JS中定义的嵌入配置(从服务器传递的过滤器参数)按公司的ID过滤报告。

我正在使用应用拥有数据方法,其中有一个主帐户,并且为该主帐户生成了嵌入令牌。 访问该报告的用户没有对所有公司的访问权限,这是在服务器端处理的。但是,使用这种方法,用户可以轻松地更改JS中的嵌入配置,并显示未经授权访问的公司的报告。

我研究了行级安全性,发现以下方法https://community.powerbi.com/t5/Developer/PowerBi-Embedded-API-Works-with-RLS/td-p/231064,其中每个公司都有一个角色,并且为该特定公司生成了嵌入令牌。这将是一种理想的方法,但是在我的情况下,公司不是预先定义的,可以随时创建。因此,我需要为每个公司创建一个角色。但是,由于Power BI没有提供自动创建角色的方法,因此无法通过编程方式实现。

我能想到的唯一方法是为每个新公司克隆一个报表,并创建特定于该报表的数据集,该数据集将仅包含该特定公司的数据。然后,生成的嵌入令牌将仅对该特定报告有效。

有人也遇到过这种困境吗?在这种情况下我应该做什么建议?

1 个答案:

答案 0 :(得分:1)

您仍然可以使用RLS,但是每个公司都没有角色。使用USERPRINCIPALNAME() DAX功能可以找出正在查看报告的用户。在数据库中,创建一个表以指定哪个用户可以看到哪个公司,并将其添加到模型中。然后使用RLS将此表过滤为仅用户当前所在的行(在这里是USERPRINCIPALNAME()起作用的行),然后让此表与数据表之间的关系过滤掉不应该存在的行看过。这样,根本就不会有JavaScript过滤器,因此某些恶意用户无法更改任何内容。

请参见Using the username() or userprincipalname() DAX function