我们在asp.net mvc中设计了多租户Web应用程序。我们的数据库存储在Azure上。我们在数据库中创建了安全策略,因此没有客户端可以看到另一个客户端的数据,并且在每个表中,每个条目都有租户ID。
我们使用Power Bi创建了一些仪表板,使用具有租户ID参数的sql存储过程访问数据。出于测试目的,我在Power Bi桌面内运行仪表板时提供了租户ID。现在,我们正在尝试将这些仪表板集成到我们的Web应用程序中。为此,我们在web.config文件中做了必要的更改。
问题是,我们将如何提供用户登录到电源bi的tenantID,以便用户只能看到该特定客户端的数据?
先谢谢了。
答案 0 :(得分:0)
这取决于报告的storage mode(导入或DirectQuery)以及如何将其集成到您的应用程序中(Embedded API,Publish to web (public)或Secure embed)。 / p>
如果存储模式为Imported
,则意味着您的报告包含数据的副本。结果是您无法基于当前用户查询数据库并获取数据,因为数据的副本是一个,并且它与正在查看报表的所有用户共享。因此,数据应针对所有租户,并且您必须在每个用户会话中对其进行过滤。可以通过两种方式进行过滤-通过添加“常规”报告级别过滤器或通过实施Row-level security (RLS)。
可以通过passing the filter in the URL或defining the filter in the embedded configuration进行过滤。第一个可以与Secure embed一起使用,而第二个则适用于使用Embedded API的情况。请注意,Publish to web
方法不支持URL过滤器。重要的部分是,以这种方式添加的过滤器将在Filters pane中可见,并且用户可以对其进行修改或删除(因此,这不是保护数据的好方法)。如果您使用API嵌入报表,则可以通过在embed config中设置filterPaneEnabled: false
来隐藏“过滤器”窗格,但这也将隐藏所有其他过滤器,最终用户将能够对数据进行切片仅使用您提供的视觉效果(例如,报告中的切片器)。另请注意,安全嵌入要求报表的每个查看器都具有Power BI Pro许可证
(或者,如果您发布报告的工作空间已分配了专用容量,即Power BI Premium或Power BI Embedded是Power BI Free许可证)。
使用RLS,您将在报告中包含所有租户的所有数据,而Power BI会为您过滤它,因此用户将仅看到与其租户相关的数据。这可以通过两种方式实现-为每个租户定义一个角色并将最终用户包括在相应的角色中,或者在报表中使用use userprincipalname() DAX函数以根据当前用户过滤数据。
我的建议是使用RLS,在这种情况下,这样做的好处是将只嵌入一个报表,并且根本不需要从您的应用程序将任何参数传递给它。