Power BI Embedded 中的安全筛选

Secure filtering in Power BI Embedded

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

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

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

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

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

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

Using the username() or userprincipalname() DAX function