SSAS表格模型中高级行级安全的最佳实践是什么



我目前正在销售领域建立一个新的数据模型。在我想要替换的旧数据模型中,我对每个用户都有非常具体的行级安全设置:有时,设置可以用一个";"与";过滤器:

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过滤器。

相关内容

最新更新