当用户与用户 table 中的记录不匹配时,RLS 的行为如何?

How does RLS behave when user does not match record in users table?

假设我有销售和用户table。销售 table 的用户 ID 为 link 给用户 table。

在用户 table 的电子邮件列上配置了动态 RLS 过滤器:

电子邮件 = USERNAME()

有一个名为 User 的角色,我已通过 power bi 服务向其添加了几个用户。

因此,每当用户登录时,他都可以看到自己的销售数据。

但是,如果用户是用户组的成员,但在用户 table 中没有该用户的记录,那么当他登录时将不会应用过滤器,因为该电子邮件没有用户 table 中不存在。这样用户就可以看到大家的数据了?

解决这个问题的方法是什么?

对于那些不在 RLS 映射 table 中的人,他们将看不到任何数据。 您可以在 Power BI Desktop 中对此进行测试 例如,在我的 table 用户映射中,link 到客户,然后到数据,我有两个用户:

并且每个用户可以看到以下客户

因此,如果我将角色视为 'some.one@domain.com',我只会看到映射到该用户的数据。

但是,如果我将其设置为 'some.three@domain.com',您什么也看不到。

在服务中,您必须将用户添加到数据集安全设置中设置的角色中,如果您不在服务中的角色中,您会收到安全警告:

如果您在角色中,但不在映射中 table,它将 return 没有数据,就像在 Power BI Desktop 中一样。

请注意:要使 RLS 起作用,用户必须在工作区级别处于 'Viewer' 角色。如果他们是管理员、成员或贡献者,他们将能够看到所有数据。