我需要为我的维度和多维数据集(事实)实现精细的分层安全性。
要求是当用户连接到SSAS时,我希望他们只能看到属于该特定租户的数据数据子集。
最重要的是,我需要能够允许用户与他/她有权使用的维度和事实进行交互。例如,如果经理A管理管理人员D的人员B和经理C,那么当经理A查看销售时,他/她需要能够看到层级中的每个人,包括经理C和人员D销售。但如果该OLAP客户端是经理C,那么他/她只看到人员D的销售。这必须像任何层次结构(子父关系)那样递归地工作。
我的基本数据集包括:
至于关系,每个租户都有多个客户,员工角色,促销和销售。我的事务数据库规范化为第3范式,所有租户共享同一个数据库。
在创建维度和事实时,我试图根据我的知识对结构进行非规范化。例如,我在Sales事实和任何其他维度中都有Tenant代理键。顺便问一下,你们会推荐一些东西吗?
我研究过网络,我看到实现这个设计的不同方法,是:
安全明智
事实和维度之间的无事实事实表以及通过USERNAME()设置的用户上下文。在我的情况下,我必须将所有维度映射到员工(使用主键/外键方法)并添加新的度量组等。
在每个租户属性上使用默认成员和允许设置STRMEMBER,将Visual Totals设置为true。
管理层次结构
看起来这些方法之间存在一些重叠,但我不确定这会有多好,也不知道是否有其他方法可以实现这一点。
注意:我们的系统是在网上销售的产品,因此我不能简单地为每个租户设置一个角色,否则这将更容易解决。
有人可以推荐一种方法吗?
干杯, 罗布森