我目前正在销售领域建立一个新的数据模型。在我想要替换的旧数据模型中,我对每个用户都有非常具体的行级安全设置:有时,设置可以用一个";"与";过滤器:
UserXY应该可以访问所有来自中国销售玩具的客户
有时,它们被定义为";OR":
UserXYZ应该可以访问来自欧洲的所有客户和所有食品
由于访问权限因客户而异,必须为每个用户创建一个或多个角色(如果权限基于"AND",则必须创建一个额外的角色(。
将来,我们希望通过表来控制数据访问,在表中定义用户可以访问的各个对象。但我担心可能无法涵盖不同维度的AND/OR逻辑。
当然,MS也有关于动态RLS的概念(https://learn.microsoft.com/en-us/power-bi/connect-data/desktop-tutorial-row-level-security-onprem-ssas-tabular)。但由于这只是一个维度,它不会涵盖我们的需求。
有人曾经在数据模型中偶然发现过类似的问题吗?是否有任何最佳实践解决方案可以更好地处理表格模型中的单个RLS访问权限?
谨致问候,Ivo
当您有复杂的RLS需求时,在您的模型中有一个简单的模式可以遵循。
引入并填充表单(UserName,DimensionKey(的用户权利表,该表单将过滤器流到目标维度(或者(GroupId,DimensionKey((。
所以对于
UserXY应该可以访问所有来自中国销售玩具的客户
所以提前运行一个查询;所有来自中国销售玩具的顾客;在CustomerEntilement表中插入所有
insert into CustomerEntitlement (UserName, CustomerId)
select 'UserXY', CustomerId
from DimCustomer c
join FactSales s
on s.CustomerID = c.CustomerID
where s.ProductType = 'Toys'
然后,您只需在CustomerEntitlement上设置一个RLS过滤器。