




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
BI數(shù)據(jù)分析是目前企業(yè)的熱門應(yīng)用,而對(duì)企業(yè)來說,權(quán)限控制是非常重要的,尤其是作為決策用的企業(yè)報(bào)表。目前基于微軟SQLServer體系的BI架構(gòu)為IntegrationServices+AnalysisService+ReportingServices,IntegrationServices和Analysis都屬于應(yīng)用后臺(tái)的服務(wù),不會(huì)在用戶前端展現(xiàn),其權(quán)限控制體系不在我們這篇文章的討論范圍內(nèi)(但是實(shí)現(xiàn)數(shù)據(jù)級(jí)權(quán)限控制,需要AnalysisServices的參與)。而對(duì)于前端展示用的企業(yè)報(bào)表,權(quán)限控制體系分為2種:報(bào)表級(jí)權(quán)限和數(shù)據(jù)級(jí)權(quán)限。報(bào)表級(jí)權(quán)限較為簡單,主要用于控制誰能夠看這個(gè)報(bào)表;數(shù)據(jù)級(jí)權(quán)限則比較復(fù)雜了,任何人看同一張報(bào)表,報(bào)表上的數(shù)據(jù)只能是他有權(quán)限查看的數(shù)據(jù)。簡單說,就是總經(jīng)理看到的數(shù)據(jù)和經(jīng)理看到的數(shù)據(jù)是不一樣的,雖然他們?cè)诳赐粡垐?bào)表。比較報(bào)表級(jí)權(quán)限和數(shù)據(jù)級(jí)權(quán)限,會(huì)發(fā)現(xiàn)如果實(shí)現(xiàn)了數(shù)據(jù)級(jí)權(quán)限的控制,那么企業(yè)報(bào)表是否需要進(jìn)行權(quán)限控制已經(jīng)不再重要(當(dāng)然,為了界面友好性,還是應(yīng)該控制下的)。這篇文章主要就是講述基于SQLServer架構(gòu)的BI數(shù)據(jù)級(jí)權(quán)限的解決方案,這也是我給一個(gè)德國大型跨國企業(yè)客戶實(shí)施其BI項(xiàng)目中,對(duì)方非常重視的一個(gè)功能。這里先簡單介紹下這個(gè)客戶和項(xiàng)目,出于保密要求,我把該客戶叫做CustomerS(簡稱CS,呵呵,不是那個(gè)游戲哦)。CS項(xiàng)目前端采用Sharepoint,后臺(tái)采用SQLServer,主要分析客戶S的銷售數(shù)據(jù)。CS的組織結(jié)構(gòu)分為部門、區(qū)域;部門和區(qū)域是相互交叉的;某個(gè)部門的總部人員能夠看到全國所有區(qū)域的數(shù)據(jù);而區(qū)域員工則只能看到該區(qū)域的數(shù)據(jù)了。用戶能夠查看的數(shù)據(jù)權(quán)限,需要在網(wǎng)頁上可以進(jìn)行配置。這就是客戶對(duì)數(shù)據(jù)級(jí)權(quán)限的要求。針對(duì)這些需求,數(shù)據(jù)級(jí)權(quán)限解決方案采用如下架構(gòu):報(bào)表查看流程說明:用戶查看報(bào)表報(bào)表從Cube中獲取數(shù)據(jù)Cube從數(shù)據(jù)庫中(記錄用戶的數(shù)據(jù)權(quán)限配置)獲得訪問用戶的權(quán)限配置,根據(jù)配置返回相應(yīng)的數(shù)據(jù)報(bào)表顯示結(jié)果數(shù)據(jù)數(shù)據(jù)權(quán)限配置流程說明:用戶訪問數(shù)據(jù)權(quán)限配置頁面(由于基于Sharepoint,因此是內(nèi)嵌數(shù)據(jù)權(quán)限Webpart的Sharepoint頁面)頁面獲取Cube結(jié)構(gòu)(由于Cube的結(jié)構(gòu)內(nèi)容很龐大,為了避免網(wǎng)頁響應(yīng)慢,一般通過ajax樹狀來展示其結(jié)構(gòu))用戶修改數(shù)據(jù)權(quán)限設(shè)置,并且保存到數(shù)據(jù)庫中說明:這里面進(jìn)行數(shù)據(jù)權(quán)限控制的對(duì)象為域帳號(hào)(可以為域用戶或者組)。縱覽數(shù)據(jù)權(quán)限實(shí)現(xiàn)的這個(gè)流程,我們提取出中間幾個(gè)重要的實(shí)現(xiàn)具體講解解決方案,他們是:Cube中如何進(jìn)行權(quán)限控制設(shè)置數(shù)據(jù)權(quán)限時(shí),如何讀取Cube結(jié)構(gòu)Cube中如何進(jìn)行權(quán)限控制SQLServerAnalysisServices本身提供了一種設(shè)置Cube數(shù)據(jù)數(shù)據(jù)權(quán)限的機(jī)制。打開AnalysisServices,我們可以看到“程序集”和“角色”2個(gè)條目,他們就是和數(shù)據(jù)權(quán)限設(shè)置緊密相關(guān)的內(nèi)容了。如下圖所示:-書.(MicrosoftAnalysisServer9.00.306S.00--Q罅庫-jDimension5ecurity4|EJ+一J廓瘢嗯+_J薪繇噸4_J+_J麒血21鬲色,用于設(shè)閏具體嶙!l融限-_|角色您SecurityRole<1DataSecurity-I割享星WPObtiJ^LurityD_L+DataSecurity程序集:這是一個(gè)DLL類庫,通過VisualStudio中新建一個(gè)ClassLibrary(類庫)來實(shí)現(xiàn)。主要作用是返回用戶能夠訪問的Cube數(shù)據(jù)。角色:這是訪問用戶的角色。在這里面可以設(shè)置角色的用戶,更重要的是設(shè)置Cube調(diào)用哪個(gè)程序集來獲取用戶能夠訪問的數(shù)據(jù)。我們先來看DataSecurity.dll程序集。這個(gè)程序集的代碼其實(shí)很簡單,不會(huì)超過30行。其主要流程如下:1.讀取訪問用戶的數(shù)據(jù)權(quán)限設(shè)置2.根據(jù)數(shù)據(jù)權(quán)限設(shè)置,返回一個(gè)能夠訪問的Dimension數(shù)據(jù)集MDX字符串我們看看如下的主要代碼(這個(gè)類庫也就只需要這樣一個(gè)CS文件):namespaceBI(publicclassDataSecurity(publicstaticstringGetDimensionSet(stringdomain_account,stringdimension)//方法的名字無所謂,參數(shù)比較重要//domain_account:訪問用戶的帳號(hào),后面我們會(huì)知道是從角色的設(shè)置中傳入//dimension:是獲取哪個(gè)維度的數(shù)據(jù)。在角色里,需要對(duì)每一個(gè)維度進(jìn)行設(shè)置(//return"{[Location].[City].&[Seattle]}〃,返回的結(jié)果示例SqlConnectionconnection=newSqlConnection(connection_string);connection.Open();SqlCommandcommand=newSqlCommand("SP_Security_GetDimensionSetByLoginAccount”,connection);command.CommandType=System.Data.CommandType.StoredProcedure;SqlParameterpl=newSqlParameter("@domain_account",domain_account);SqlParameterp2=newSqlParameter("@dimension",dimension);command.Parameters.Add(pl);command.Parameters.Add(p2);SqlDataReaderreader=command.ExecuteReader();stringresult_set=string.Empty;intcount=0;while(reader.Read())(count++;if(result_set!=string.Empty)result_set+=",";result_set+=(string)reader["DimensionSet"];}command.Dispose();connection.Close();connection.Dispose();return"("+result_set+"}";publicDataSecurity()(}}}這個(gè)類庫的作用很簡單,拋開BI不談,其實(shí)他就調(diào)用了一個(gè)存儲(chǔ)過程,把返回結(jié)果做了一個(gè)字符串拼接,然后返回這個(gè)字符串。一般的返回結(jié)果會(huì)是大致如下:{[Location].[City].&[Seattle]},這表示用戶在Location維度下只能夠看到Seattle的數(shù)據(jù),其他的城市數(shù)據(jù)都看不到。當(dāng)然如果是多個(gè)城市,那就是用逗號(hào)分隔的列表,比如:{[Location].[City].&[Seattle],[Location].[City].&[Washington]}。如上所示,字符串拼接很簡單,但是這些用戶能夠訪問的具體數(shù)據(jù)記錄在哪呢?這就是用戶在網(wǎng)頁上設(shè)置好數(shù)據(jù)權(quán)限,記錄在數(shù)據(jù)庫中的字符串了。在這里你要更清楚地話,就需要進(jìn)一步了解MDX,這不在這篇文章的討論范圍之內(nèi)。我們首先完成了第一步,結(jié)下來就是在角色設(shè)置里調(diào)用這個(gè)DataSecurity.dll類庫了。這個(gè)比較簡單,但是繁瑣,對(duì)于Cube中的每一個(gè)維度都需要手動(dòng)設(shè)置。這個(gè)步驟根據(jù)如下的示意圖走就是了,沒有什么代碼工作。
■sn否席猊3卒星點(diǎn)愣丟歌罪原*賣濡取話廉八羔爵偵度£■£設(shè)用舟;7&SS眇鼠瞄舊?徒氐殳脈骨豪士隹I牌愕值I:汶御&炳收/扣口m淑皿■sn否席猊3卒星點(diǎn)愣丟歌罪原*賣濡取話廉八羔爵偵度£■£設(shè)用舟;7&SS眇鼠瞄舊?徒氐殳脈骨豪士隹I牌愕值I:汶御&炳收/扣口m淑皿ry頑典玖NAME是們?cè)~止酈誦L;雄*迎]打開SecruityRole角色的屬性,進(jìn)入“維度數(shù)據(jù)”中就可以設(shè)置數(shù)據(jù)權(quán)限了。每一個(gè)需要控制數(shù)據(jù)權(quán)限的維度和屬性都需要設(shè)置下,基本上設(shè)置為一條語句:StrtoSet(BI.DataSecurity.GetDimensionSet(USERNAME,"City"))對(duì)這個(gè)語句解釋下:StrtoSet是將字符串轉(zhuǎn)換為MDX里的數(shù)據(jù)集。USERNAME是訪問者的域帳號(hào),City則為我們自定義的參數(shù),表示要獲取City屬性維度的授權(quán)數(shù)據(jù)。到了這里,我們已經(jīng)完成了很重要的一步,數(shù)據(jù)權(quán)限的主體已經(jīng)實(shí)現(xiàn)了。但是對(duì)于用戶來說,他需要有一個(gè)前端界面來設(shè)置這些數(shù)據(jù)權(quán)限。下面的內(nèi)容就是為了解決這個(gè)問題,不過這里,我只挑出最重要的部分,讀取Cube結(jié)構(gòu)來講,其他的部分你完全可以自己設(shè)計(jì)。在CS這個(gè)項(xiàng)目中,我們是做了如下工作:所有的設(shè)置界面都是SharepointWebpart(請(qǐng)參見相關(guān)內(nèi)容)Webpart中的ajax(這個(gè)要單獨(dú)拿出來說,是因?yàn)檫@個(gè)部分比較麻煩),需要用到ajax的原因就是Cube的結(jié)構(gòu)是很大的,如果一次性讀出來,肯定是等到花兒也謝了,相信沒有人會(huì)用他。后臺(tái)可以控制哪些維度需要設(shè)置數(shù)據(jù)權(quán)限(有些維度不需要設(shè)置數(shù)據(jù)權(quán)限,那么就不讓他在ajax樹中展示出來了)有自定義的角色,這個(gè)角色不同于剛才講的Cube中的角色。這是用戶自己定義的數(shù)據(jù)權(quán)限角色,剛才的角色只需要那一個(gè)就足夠了。有了角色自然有搜索、設(shè)置用戶、設(shè)置角色的數(shù)據(jù)權(quán)限、編輯、刪除這個(gè)都可以根據(jù)你的需要進(jìn)行設(shè)計(jì),不一定要完全相同,就比如我用了ajax樹來展示Cube結(jié)構(gòu),但是你可以采用別的方式。下面我們就進(jìn)入下一個(gè)重要話題,就是讀取Cube的結(jié)構(gòu)(其實(shí)在讀取這個(gè)結(jié)構(gòu)本身,前面的數(shù)據(jù)權(quán)限就已經(jīng)開始起作用了,沒有權(quán)限訪問的數(shù)據(jù)不會(huì)出現(xiàn)在ajax樹中)。設(shè)置數(shù)據(jù)權(quán)限時(shí),如何讀取Cube結(jié)構(gòu)讀取Cube的結(jié)構(gòu),微軟已經(jīng)提供了一套非常豐富的類庫給我們。這里就簡單介紹下,如果你在具體實(shí)現(xiàn)過程中遇到了問題,相信上Google是一個(gè)最好的辦法。下面我們介紹讀取Cube結(jié)構(gòu)的具體內(nèi)容,首先就是連上你的Cube。這主要通過如下語句完成。AdomdConnectionadomdConnection=newAdomdConnection();adomdConnection.ConnectionString=“DataSource=localhost;Catalog=MyCube;”;adomdConnection.Open();//這里讀取具體的Cube結(jié)構(gòu)adomdConnection.Close();adomdConnection.Dispose();在連上Cube之后,通過adomdConnection可以讀取整個(gè)Cube了。主要涉及到如下內(nèi)容:Cube:CubeDefcube=adomdConnection.Cubes["MyCubeName”];Dimension:cube.Dimensions,這里面是所有的Dimension。Hierarchy:dimension.Hierarchies,所有的層次Member:hierarchy.Levels[0].GetMembers(),所有成員通過以上幾個(gè)內(nèi)容就可以把整個(gè)Cube
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 影視播放器硬件構(gòu)成考核試卷
- 電子運(yùn)動(dòng)比賽現(xiàn)場設(shè)備考核試卷
- 窄軌機(jī)車車輛基礎(chǔ)知識(shí)考核試卷
- 清理呼吸道分泌物的護(hù)理技術(shù)
- 河北省邢臺(tái)市2023~2024學(xué)年高一數(shù)學(xué)下學(xué)期第三次月考試題含答案
- 江西環(huán)境工程職業(yè)學(xué)院《外科學(xué)實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 廈門安防科技職業(yè)學(xué)院《醫(yī)學(xué)實(shí)驗(yàn)技術(shù)導(dǎo)論》2023-2024學(xué)年第二學(xué)期期末試卷
- 西藏藏醫(yī)藥大學(xué)《中小學(xué)舞蹈創(chuàng)編》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東藝術(shù)學(xué)院《普通物理專題研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇省連云港市贛榆區(qū)2024-2025學(xué)年小升初總復(fù)習(xí)數(shù)學(xué)精練含解析
- 建筑工程工程平移協(xié)議書范本
- 2024年度融資合同:科技公司與投資公司之間的融資協(xié)議
- 國家安全教育大學(xué)生第十章-爭做總體國家安全觀堅(jiān)定踐行者
- 改性磷石膏施工方案
- 2024年教師資格考試初級(jí)中學(xué)面試音樂試題與參考答案
- 上海市幼兒園幼小銜接活動(dòng)指導(dǎo)意見(修訂稿)
- 采購績效管理制度
- 卡西歐手表EFA-120中文使用說明書
- 加油站變更管理制度
- -小學(xué)英語人稱代詞與物主代詞講解課件(共58張課件).課件
- 醫(yī)學(xué)課件疼痛的護(hù)理
評(píng)論
0/150
提交評(píng)論