如何根据用户名和位置应用动态行级安全性?

时间:2018-09-27 12:42:15

标签: powerbi powerbi-desktop row-level-security

这与Power BI中的行级安全性有关。这是我要在其上实现此RLS的虚拟表。

Please check this table link

我现在正在使用的RLS公式是-

[location] = LOOKUPVALUE([location],[login],USERPRINCIPALNAME()) 

我的最终要求是使这种RLS能够在以下情况下工作:如果用户登录,则他应该看到该数据(如果他所在的位置),并且还应该看到该位置的其他用户。

但是查找抛出错误:

  

提供了多个值的表,其中期望有一个值

此外,单个用户可以访问多个位置,而单个位置可以有多个用户。

如何使用Lookup或任何其他可能的方式实现这种级别的行级安全性?

1 个答案:

答案 0 :(得分:1)

您的要求也可以通过这种方式完成,您需要同时在Power BI桌面和应用服务器上工作才能实现此目的。

在桌面中

  1. Power BI Desktop允许您创建角色。单击“管理角色” 然后单击“创建新角色”。
  2. 您需要根据此处的位置创建角色。
  3. 例如,创建一个称为位置A的规则,然后单击 表格,并将公式提供给该表格上的过滤器。例如, [Location] =“ A”。

因此,您可以像这样创建'n'个角色,然后发布仪表板。

App.PowerBI.Com

  1. 现在,打开app.powerbi.com,然后转到相应的数据集并 右键单击它,选择安全性-您将在其中找到组。

  2. 在“网上论坛”上,输入应具有访问权限的电子邮件ID。 您可以在多个组中添加一个人,这样他们就可以看到 不止一组。

测试

  1. 台式机也允许您对其进行测试-您可以单击“查看” 角色,以查看该组中的用户看到的内容。

还要记住,只有有权访问仪表板的人员才能看到其中的数据。因此,您将需要与他们共享,并且需要将其添加到组中。如果您无法执行其中一项操作,那么他们将在仪表板上看不到任何内容。

最有效的方法

这是一种更好的方法,我认为这是您要的方法,

[login] = username() 

username()函数会自动获取已登录用户的电子邮件地址。

在所需表中的新角色上创建上述过滤器。 这样,您仍将在相应数据集的安全性部分下的角色内手动添加这些50000个用户。

但是,如果它们都属于组织中的特定组,并且您的Office-365团队以正确的方式配置了后端,那么您只需要输入该组即可。

但是大多数公司的后端都没有此配置,因为很难控制数据安全性。

更改数据模型

要满足您的要求,您还需要更改数据模型。

您最初需要拥有两个表。

值表-您可以在其中有很多列,例如name和all,但这没关系。

Actual_Table

位置电子邮件地址表作为第二个表。

Access_Table

现在将位置从“值”表合并到“电子邮件地址”表,这将成为您的最终表。将此用于可视化,但是请在DAX上非常清楚-因为您可能有重复的行和不同的值。

Final_Table

现在在此表上创建RLS。它应该工作。

顾名思义,行级安全性应用于每行。因此,将分别为每一行评估该公式。因此,您唯一的选择是拥有一个包含所有值的平面表。