0

目前我有以下情况。我在 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 不提供自动创建角色的方法。

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

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

4

1 回答 1

2

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

请参阅使用 username() 或 userprincipalname() DAX 函数

于 2019-12-16T09:00:09.017 回答