快捷搜索:

BI数据级权限解决方案(1)

BI数据阐发是今朝企业的热门利用,而对企业来说,权限节制是异常紧张的,尤其是作为决策用的企业报表。今朝基于微软SQL Server体系的BI架构为Integration Services + Analysis Service + Reporting Services,Integration Services和Analysis都属于利用后台的办事,不会在用户前端展现,其权限节制体系不在我们这篇文章的评论争论范围内(然则实现数据级权限节制,必要Analysis Services的介入)。而对付前端展示用的企业报表,权限节制体系分为2种:报表级权限和数据级权限。报表级权限较为简单,主要用于节制谁能够看这个报表;数据级权限则对照繁杂了,任何人看同一张报表,报表上的数据只能是他有权限查看的数据。简单说,便是总经理看到的数据和经理看到的数据是不一样的,虽然他们在看同一张报表。对照报表级权限和数据级权限,会发明假如实现了数据级权限的节制,那么企业报表是否必要进行权限节制已经不再紧张(当然,为了界面友好性,照样应该节制下的)。

这篇文章主要便是讲述基于SQL Server架构的BI数据级权限的办理规划,这也是我给一个德国大年夜型跨国企业客户实施其BI项目中,对方异常注重的一个功能。这里先简单先容下这个客户和项目,出于保密要求,我把该客户叫做Customer S(简称CS,呵呵,不是那个游戏哦)。

CS项今朝端采纳Sharepoint,后台采纳SQL Server,主要阐发客户S的贩卖数据。CS的组织布局分为部门、区域;部门和区域是互订交叉的;某个部门的总部职员能够看到全国所有区域的数据;而区域员工则只能看到该区域的数据了。用户能够查看的数据权限,必要在网页上可以进行设置设置设备摆设摆设。这便是客户对数据级权限的要求。

针对这些需求,数据级权限办理规划采纳如下架构:

报表查看流程阐明:

用户查看报表

报表从Cube中获取数据

Cube从数据库中(记任命户的数据权限设置设置设备摆设摆设)得到造访用户的权限设置设置设备摆设摆设,根据设置设置设备摆设摆设返回响应的数据

报表显示结果数据

数据权限设置设置设备摆设摆设流程阐明:

用户造访数据权限设置设置设备摆设摆设页面(因为基于Sharepoint,是以是内嵌数据权限Webpart的Sharepoint页面)

页面获取Cube布局(因为Cube的布局内容很宏大年夜,为了避免网页相应慢,一样平常经由过程ajax树状来展示其布局)

用户改动数据权限设置,并且保存到数据库中

阐明:这里面进行数据权限节制的工具为域帐号(可以为域用户或者组)。

纵览数据权限实现的这个流程,我们提掏出中心几个紧张的实现详细解说办理规划,他们是:

Cube中若何进行权限节制

设置数据权限时,若何读取Cube布局

Cube中若何进行权限节制

SQL Server Analysis Services本身供给了一种设置Cube数据数据权限的机制。打开Analysis Services,我们可以看到“法度榜样集”和“角色”2个条款,他们便是和数据权限设置慎密相关的内容了。如下图所示:

法度榜样集:这是一个DLL类库,经由过程Visual Studio中新建一个Class Library(类库)来实现。主要感化是返回用户能够造访的Cube数据。

角色:这是造访用户的角色。在这里面可以设置角色的用户,更紧张的是设置Cube调用哪个法度榜样集来获取用户能够造访的数据。

这个类库的感化很简单,抛开BI不谈,着实他就调用了一个存储历程,把返回结果做了一个字符串拼接,然后返回这个字符串。一样平常的返回结果会是大年夜致如下:{[Location].[City].&[Seattle]},这表示用户在Location维度下只能够看到Seattle的数据,其他的城市数据都看不到。当然假如是多个城市,那便是用逗号分隔的列表,比如:{[Location].[City].&[Seattle],[Location].[City].&[Washington]}。

如上所示,字符串拼接很简单,然则这些用户能够造访的详细数据记录在哪呢?这便是用户在网页上设置好数据权限,记录在数据库中的字符串了。

在这里你要更清楚地话,就必要进一步懂得MDX,这不在这篇文章的评论争论范围之内。

我们首先完成了第一步,结下来便是在角色设置里调用这个DataSecurity.dll类库了。这个对照简单,然则繁琐,对付Cube中的每一个维度都必要手动设置。这个步骤根据如下的示意图走便是了,没有什么代码事情。

打开SecruityRole角色的属性,进入“维度数据”中就可以设置数据权限了。每一个必要节制数据权限的维度和属性都必要设置下,基础上设置为一条语句:

StrtoSet(BI.DataSecurity.GetDimensionSet(USERNAME, "City"))

对这个语句解释下:StrtoSet是将字符串转换为MDX里的数据集。USERNAME是造访者的域帐号,City则为我们自定义的参数,表示要获取City属性维度的授权数据。

到了这里,我们已经完成了很紧张的一步,数据权限的主体已经实现了。然则对付用户来说,他必要有一个前端界面来设置这些数据权限。下面的内容便是为了办理这个问题,不过这里,我只挑出最紧张的部分,读取Cube布局来讲,其他的部分你完全可以自己设计。在CS这个项目中,我们是做了如下事情:

您可能还会对下面的文章感兴趣: