还剩6页未读,继续阅读
文本内容:
数据分析是目前企业的热门应用,而对企业来说,权限控制是非常重要的,特别是作为决策Bl用的企业报表目前基于微软体系的架构为SQL ServerBl Integration Services+Analysis Service+和都属于应用后台的服务,不会在用户前端展现,Reporting Services,IntegrationServicesAnalysis其权限控制体系不在我们这篇文章的讨论范围内(但是实现数据级权限控制,需要Analysis Services的参预)而对于前端展示用的企业报表,权限控制体系分为种报表级权限和数据级权限报2表级权限较为简单,主要用于控制谁能够看这个报表;数据级权限则比较复杂了,任何人看同一张报表,报表上的数据只能是他有权限查看的数据简单说,就是总经理看到的数据和经理看到的数据是不一样的,虽然他们在看同一张报表比较报表级权限和数据级权限,会发现如果实现了数据级权限的控制,那末企业报表是否需要进行权限控制已经再也不重要(固然,为了界面友好性,还是应该控制下的)这篇文章主要就是讲述基于架构的数据级权限的解决方案,这也是我给一个德SQL ServerBl国大型跨国企业客户实施其项目中,对方非常重视的一个功能这里先简单介绍下这个客户和项BI目,出于保密要求,我把该客户叫做(简称呵呵,不是那个游戏哦)Customers CS,项目前端采用后台采用主要分析客户的销售数据的组织结CS Sharepoint,SQL Server,S CS构分为部门、区域;部门和区域是相互交叉的;某个部门的总部人员能够看到全国所有区域的数据;而区域员工则只能看到该区域的数据了用户能够查看的数据权限,需要在网页上可以进行配置这就是客户对数据级权限的要求针对这些需求,数据级权限解决方案采用如下架构报表查看流程说明:长寅用户盘期收眼a我取“用户筋负累权仪Q*保存权限设置的SQl Server希数据权限控制的Cube报表从中获取数据Cube从数据库中(记录用户的数据权限配置)获得访问用户的权限配置,根据配置返回相应的Cube数据报表显示结果数据数据权限配置流程说明用户访问数据权限配置页面(由于基于因此是内嵌数据权限的Sharepoint,Webpart Sharepoint页面)页面获取结构(由于的结构内容很庞大,为了避免网页响应慢,普通通过树Cube Cubeajax状来展示其结构)用户修改数据权限设置,并且保存到数据库中说明这里面进行数据权限控制的对象为域帐号(可以为域用户或者组)纵览数据权限实现的这个流程,我们提取出中间几个重要的实现具体讲解解决方案,他们是中如何进行权限控制Cube设置数据权限时,如何读取结构Cube中如何进行权限控制Cube本身提供了一种设置数据数据权限的机制打开SQL ServerAnalysis ServicesCube Analysis我们可以看到“程序集”和“角色个条目,他们就是和数据权限设置密切相关的内容了Services,”2如下图所示
6.Microsoft AnalysisServer
9003068.00日口勘8庠H fjDimension SecurityW二1数清源S」客露源砚图[2,终寒sm田n Qa_j棚西5s」南色jm育包,用于设体的徵雷权裁同勺D4bt4Security DLLMSecurityRole―程序集这是一个类库,通过中新建一个类库DLL VisualStudio ClassLibraryDatdSc urity来实现主要作用是返回用户能够访问的数据Cube角色这是访问用户的角色在这里面可以设置角色的用户,更重要的是设置调用哪个Cube程序集来获取用户能够访问的数据我们先来看程序集这个程序集的代码其实很简单,不会超过行其主要DataSecuHty.dll30流程如下读取访问用户的数据权限设置根据数据权限设置,返回一个能够访
1.
2.问的数据集字符串Dimension MDX我们看看如下的主要代码这个类库也就只需要这样一个文件CSnamespace BI{public classDataSecuritypublic staticstring GetDimensionSetstring domain_account,s tringdimension//方法的名字无所谓,参数比较重要//domain_account访问用户的帐号,后面我们会知道是从角色的设置中传入//dimension是获取哪个维度的数据在角色里,需要对每一个维度进行设置{//return^{[Location].[City].[Seattle]}zz,返回的结果示例SqlConnection connection=new SqlConnectionconnection_string;connection.Open;SqlCommand command=new SqlCommandz/SP_Security_GetDimensionSetByLoginAccount/z,connection;command.CommandType=System.Data.CommandType.StoredProce dure;SqlParameter pl=new SqlParameter//@domain_account//,domainaccount;SqlParameter p2=new SqlParameter©dimension”,dimensio n;command.Parameters.Add pl;command.Parameters.Addp2;SqlDataReader reader=command.ExecuteReader;string result_set=string.Empty;int count=0;while reader.ReadO count++;if result_set!=string.Empty result_set+=〃,〃;result_set+=stringreader[/,DimensionSet,,];command.Dispose;connection.Close;connection.Dispose;return〃{〃+result set+public DataSecurity这个类库的作用很简单,抛开不谈,其实他就调用了一个存储过程,把返回结果做了一个字BI符串拼接,然后返回这个字符串普通的返回结果会是大致如下{}[Location].[Cit y].[Seattle],这表示用户在维度下只能够看到的数据,其他的城市数据都看不到固然如果是Location Seattle多个城市,那就是用逗号分隔的列表,比如{[Location].[City].[Se attle],}[Location].[City].[Washington]如上所示,字符串拼接很简单,但是这些用户能够访问的具体数据记录在哪呢?这就是用户在网页上设置好数据权限,记录在数据库中的字符串了在这里你要更清晰地话,就需要进一步了解这不在这篇文章的讨论范围之内MDX,我们首先完成为了第一步,结下来就是在角色设置里调用这个类库了这个比DataSecMty.dll较简单,但是繁琐,对于中的每一个维度都需要手动设置这个步骤根据如下的示意图走就Cube是了,没有什么代码工作度身僚段母康隹义的]£I renocn NecurtyLocation♦散,||™™I LLLI—I■4s*0JW・懂图I[c]定义的・员■元W IWig«/4•«■|代员MO^ai I」刖・』SIUS0BI Dma2GMhrMrMM$MUSE UM£U/RI tDUS,才J EC■姨,城,WJWf Kuttty dllUSfUNAME iG««■M2HIB0UU\Adv2*cf4却・正看展住jj送♦IttM IBiJ施⑶京MMC^CIzP月用H现念计M打开角色的属性,进入“维度数据”中就可以设置数据权限了每一个需要控SecruityRole制数据权限的维度和属性都需要设置下,基本上设置为一条语句StrtoSetBI.DataSecurity.GetDimensionSetUSERNAME,City对这个语句解释下是将字符串转换为里的数据集是访问者StrtoSet MDXUSERNAME的域帐号,则为我们自定义的参数,表示要获取属性维度的授权数据City City到了这里,我们已经完成为了很重要的一步,数据权限的主体已经实现了但是对于用户来说,他需要有一个前端界面来设置这些数据权限下面的内容就是为了解决这个问题,不过这里,我只挑出最重要的部份,读取结构来讲,其他的部份你彻底可以自己设计在Cube CS这个项目中,我们是做了如下工作所有的设置界面都是请参见相关内容SharepointWebpartXtiIr;MH««S««中的这个要单独拿出来说,是因为这个部份比较麻烦,需要用到的原Webpart ajaxaja x因就是的结构是很大的,如果一次性读出来,肯定是等到花儿也谢了,相信没有人会用Cube他后台可以控制哪些维度需要设置数据权限有些维度不需要设置数据权限,那末就不让他在树中展示出来了ajax有自定义的角色,这个角色不同于刚才讲的中的角色这是用户自己定义的数据权Cube限角色,刚才的角色只需要那一个就足够了有了角色自然有搜索、设置用户、设置角色的数据权限、编辑、删除这个都可以根据你的需要进行设计,不一定要彻底相同,就比如我用了树来展示ajax Cube结构,但是你可以采用别的方式下面我们就进入下一个重要话题,就是读取的结构其实在读取这个结构本身,前面Cube的数据权限就已经开始起作用了,没有权限访问的数据不会浮现在树中ajax设置数据权限时,如何读取结构Cube读取的结构,微软已经提供了一套非常丰富的类库给我们这里就简单介绍下,如Cube果你在具体实现过程中遇到了问题,相信上是一个最好的办法Google下面我们介绍读取结构的具体内容,首先就是连上你的这主要通过如下语句Cube Cubeo完成AdomdConnectionadomdConnection=new AdomdConnection;adomdConnection.ConnectionString=Data Source=localhost;Catalog=MyCube;”;adomdConnection.Open;//这里读取具体的Cube结构adomdConnection.Close;adomdConnection.Dispose;在连上之后,通过可以读取整个了主要涉及到如下内容Cube adomdConnectionCube CubeCubeDef cube=adomdConnection.Cubes[uMyCubeName,5];这里面是所有的Dimension cube.Dimensions,Dimension所有的层次Hierarchy dimension.Hierarchies,所有成员Member hierarchy.Levels[O].GetMembers,通过以上几个内容就可以把整个的结构彻底展现出来,有了他们,就看你怎么展示Cube你的数据了固然了,首先我们不能忘了添加一个引用CubeMicrosoft.AnalysisServices.AdomdClient结束语到这里为止,我介绍了数据权限解决方案中涉及到的最重要的内容,基于这些内容,你BI可以实现自己的数据权限解决方案,并且把它应用到你的项目中去,从而给你的项目添上亮BI点固然了,实现整个解决方案还是需要花费不少时间的,毕竟对用户来说,他们需要一个简单易用的结果这些友好的界面工作都需要留给你来做。
个人认证
优秀文档
获得点赞 0