趙衛(wèi)東,畢曉清,盧新明
(山東科技大學(xué)信息科學(xué)與工程學(xué)院,山東青島266590)
早期傳統(tǒng)的訪問控制技術(shù)如自主訪問控制、強(qiáng)制訪問控制等技術(shù)雖在一定時(shí)期內(nèi)確保了基于Web的管理信息系統(tǒng) (management information system)權(quán)限管理 (包括系統(tǒng)級(jí)安全管理如操作系統(tǒng)和數(shù)據(jù)庫安全和應(yīng)用級(jí)安全管理如應(yīng)用程序和Web系統(tǒng)安全[1])的安全,但其所能操作的用戶、資源數(shù)量有限;基于角色的訪問控制作為目前常用的訪問控制技術(shù)雖具有較靈活的授權(quán)機(jī)制,但其無法解決組織結(jié)構(gòu)復(fù)雜、權(quán)限變動(dòng)頻繁的管理信息系統(tǒng)??傊煌脑L問控制模型各有優(yōu)缺點(diǎn)并且都無法完全確保靈活、高效的權(quán)限管理。本文通過分析多種模型,改進(jìn)基于角色的訪問控制模型,在該模型基礎(chǔ)上增加屬性約束和用戶組,提出基于角色的細(xì)粒度訪問控制模型。通過對(duì)細(xì)粒度模型進(jìn)行分析和設(shè)計(jì),將其進(jìn)行具體應(yīng)用并通過基于SSH2框架的Web系統(tǒng)實(shí)現(xiàn)。新模型確保了系統(tǒng)高效的權(quán)限訪問控制和靈活的權(quán)限管理。
傳統(tǒng)的訪問控制模型有基于對(duì)象的訪問控制OBAC、基于任務(wù)的訪問控制TBAC和基于角色的訪問控制RBAC模型。其中OBAC以用戶為基本對(duì)象進(jìn)行權(quán)限授予,授權(quán)過程雖然簡(jiǎn)單卻存在對(duì)相同權(quán)限用戶的重復(fù)授權(quán)及重復(fù)數(shù)據(jù)冗余等問題。自主訪問控制DAC作為OBAC的一種,通過訪問控制表控制主體對(duì)客體的直接訪問,但由于訪問存在傳遞性,系統(tǒng)無法控制主體對(duì)客體的間接訪問,由此引發(fā)授權(quán)混亂。另一種基于對(duì)象的強(qiáng)制訪問控制MAC通過為主體和客體設(shè)定安全級(jí)來保障信息的單向流動(dòng),雖能確保訪問的高度安全但靈活性較差且工作量大;TBAC從任務(wù)角度建立模型,角色通過任務(wù)和權(quán)限關(guān)聯(lián),實(shí)現(xiàn)動(dòng)態(tài)實(shí)時(shí)的安全控制,卻存在任務(wù)分配復(fù)雜等問題;RBAC作為目前應(yīng)用最廣泛的模型,通過創(chuàng)建角色,分別為角色分配不同操作權(quán)限,然后為用戶指定一個(gè)或多個(gè)角色,使用戶通過角色間接地獲得操作權(quán)限。該模型通過引入角色減少了權(quán)限授予工作量,并對(duì)組織變化具有靈活的伸縮性,但卻存在著如下問題:
(1)權(quán)限粒度約束不夠細(xì)化。粗粒度的權(quán)限 (尤其是功能權(quán)限)控制導(dǎo)致用戶權(quán)限樹過寬卻不深,樹的層次不分明。
(2)權(quán)限授予過程復(fù)雜。例如對(duì)于某高校軟件系中N名教授不同課程的教師,他們具有相同的S種功能權(quán)限,管理M個(gè)不同的數(shù)據(jù)對(duì)象 (如課程/學(xué)生信息),RBAC將分別為N教師分配角色并授予相應(yīng)S種功能權(quán)限和對(duì)應(yīng)M個(gè)數(shù)據(jù)對(duì)象,由此進(jìn)行M×S×N次授權(quán)。這對(duì)于人員眾多、部門設(shè)置復(fù)雜且同級(jí)部門中的用戶具有相同功能權(quán)限的高校,會(huì)造成大量的重復(fù)授權(quán)并導(dǎo)致角色和權(quán)限的冗余,增加授權(quán)的復(fù)雜性。
(3)功能權(quán)限和數(shù)據(jù)權(quán)限未實(shí)現(xiàn)完全分離。RBAC中對(duì)數(shù)據(jù)對(duì)象的操作包含在權(quán)限管理中,數(shù)據(jù)對(duì)象的訪問和管理較亂,無法準(zhǔn)確獲取角色不同功能權(quán)限對(duì)應(yīng)的不同數(shù)據(jù)對(duì)象。如對(duì)于具有授課教師A角色的某用戶,具有查看和修改學(xué)生信息的功能權(quán)限,但無法確保他能查看某學(xué)院1班和2班學(xué)生的信息,卻只能修改1班學(xué)生的信息。
(4)具體應(yīng)用復(fù)雜,效率低下。對(duì)于登錄驗(yàn)證、訪問數(shù)據(jù)庫等操作存在重復(fù)性,且客戶端不斷向服務(wù)器提交重復(fù)的T-SQL語句,由此增加服務(wù)器負(fù)擔(dān),降低服務(wù)器處理效率。
針對(duì)RBAC存在的問題,唐金鵬等人[2]提出面向用戶屬性的RBAC模型,增加屬性集合和約束,通過用戶屬性實(shí)現(xiàn)動(dòng)態(tài)的分配角色。然而此方法無法確保通過多個(gè)屬性組合得到的角色間不存在冗余,不會(huì)引起角色分配混亂等問題;趙靜[3]等人提出的基于數(shù)據(jù)對(duì)象的RBAC模型,實(shí)現(xiàn)了數(shù)據(jù)對(duì)象和功能權(quán)限的分離。但此模型以數(shù)據(jù)對(duì)象為主,通過UD、RD和PA三次才完成權(quán)限分配,授權(quán)過程復(fù)雜且當(dāng)數(shù)據(jù)對(duì)象數(shù)量過多時(shí)依次為數(shù)據(jù)對(duì)象分配角色的工作量巨大,極易出錯(cuò)。對(duì)于數(shù)據(jù)對(duì)象變動(dòng)較大的單位部門,每增加或刪除一個(gè)數(shù)據(jù)對(duì)象可能牽扯多個(gè)角色,由此可能引發(fā)RD混亂,并刪除或增加很多角色,造成角色冗余。
本文從訪問控制的粒度出發(fā),提出基于角色的細(xì)粒度模型解決RBAC存在的上述問題:
(1)通過細(xì)粒度權(quán)限管理 (即將權(quán)限分解為原子鏈接或按鈕等可訪問集合并按此粒度管理),按盡量小的粒度將功能權(quán)限分解為增加/修改/刪除/打印等原子操作,并將權(quán)限以字符串形式存儲(chǔ)到數(shù)據(jù)庫,最后以用戶權(quán)限樹葉子節(jié)點(diǎn)的形式展現(xiàn)。
(2)引入用戶組,將具有相同角色 (功能權(quán)限相同,操作數(shù)據(jù)對(duì)象不同)的用戶集合成組,通過為用戶組直接分配角色,避免權(quán)限/角色的重復(fù)授予和冗余并保留角色間的繼承關(guān)系,允許直接為用戶指定角色。
(3)分離功能權(quán)限和客體對(duì)象,從功能權(quán)限和其對(duì)應(yīng)數(shù)據(jù)對(duì)象兩方面入手,授權(quán)時(shí)先分配功能權(quán)限,然后分配其所能操作的數(shù)據(jù)對(duì)象。通過編寫包含屬性約束的存儲(chǔ)過程,到數(shù)據(jù)庫中獲取用戶不同的功能權(quán)限所對(duì)應(yīng)的不同數(shù)據(jù)對(duì)象,并轉(zhuǎn)換獲取到的結(jié)果加載到前臺(tái)顯示;當(dāng)用戶數(shù)據(jù)對(duì)象改變時(shí),通過權(quán)限管理樹更新權(quán)限數(shù)據(jù)表中的數(shù)據(jù)對(duì)象范圍即可。
(4)封裝常用控件成復(fù)合控件以完成基本登陸驗(yàn)證功能;編寫存儲(chǔ)過程集合封裝用戶對(duì)任務(wù)的重復(fù)操作避免每次寫重復(fù)訪問語句,由此提高批量語句的執(zhí)行速度并能避免越權(quán)訪問。
細(xì)粒度模型確保了權(quán)限訪問控制的細(xì)粒度實(shí)現(xiàn),提高了動(dòng)態(tài)訪問控制的安全性。作為基于角色的通用模型RBAC96[4]的擴(kuò)展,其模型圖如圖1所示。
圖1 基于角色的細(xì)粒度訪問控制模型
模型中各元素的定義和描述如下:
(1)用戶U、用戶組G、角色R、權(quán)限P、會(huì)話S分別表示用戶集、用戶組集、角色集、權(quán)限集和會(huì)話集;OP操作表示功能權(quán)限集add/delete等,OB對(duì)象表示客體對(duì)象集(客體對(duì)象作為系統(tǒng)保護(hù)的資源如數(shù)據(jù)庫中數(shù)據(jù)、內(nèi)存中的片段等。本文中的客體對(duì)象為數(shù)據(jù)對(duì)象)。
(2)UA((G×R)∪ (U×R)表示為用戶分配角色。一個(gè)用戶組可被分配多個(gè)角色,一個(gè)角色可被分配給多個(gè)用戶組,對(duì)具有獨(dú)立訪問權(quán)限的部分用戶直接為其分配角色;GH(G×G,表示用戶組間的層次關(guān)系;RH(R×R則表示角色間的層次關(guān)系。授權(quán)關(guān)系圖如圖2所示。
(3)PA P×R,表示角色的權(quán)限分配。一個(gè)角色可擁有多個(gè)權(quán)限,一個(gè)權(quán)限可屬于多個(gè)角色;其中P=OP×OB,OP是管理員為角色分配的操作權(quán)限,OB是管理員為角色中的功能權(quán)限單獨(dú)分配的對(duì)應(yīng)數(shù)據(jù)對(duì)象 (通過增加check-box屬性的用戶權(quán)限樹實(shí)現(xiàn))。
圖2 授權(quán)關(guān)系
(4)user(Si):S→ (U∪G),表示會(huì)話與用戶的映射。用戶User(Si)創(chuàng)建的會(huì)話S中包含用戶激活的角色集合 (一個(gè)用戶可同時(shí)擁有多個(gè)會(huì)話)。
(5)roles(Si):S→2R,表示會(huì)話與角色集的映射。roles(Si)({r|(MYMr’≥r)[(user(Si),r)∈UA]}是會(huì)話Si對(duì)應(yīng)的角色集合;會(huì)話Si對(duì)應(yīng)權(quán)限為:Ur∈roles(Si){p|(MYMr’≥r)[(p,r)∈PA]},其中用戶具有權(quán)限為會(huì)話集中所有權(quán)限并集。
(6)約束:同RBAC2中的約束,包括互斥角色約束(即不能在一次會(huì)話中為用戶組/用戶分配互斥的角色)、基數(shù)限制 (即限定授予給用戶組/用戶的角色數(shù)量)、先決條件約束 (即僅當(dāng)具有某種操作許可時(shí)才可分配角色)及時(shí)間、頻度約束等。
(7)屬性約束:表示約束條件。以用戶屬性、功能權(quán)限等作為約束條件,將其封裝到包含眾多T-SQL語句的存儲(chǔ)過程中,通過調(diào)用該存儲(chǔ)過程 (具體介紹如3.3)獲取不同功能權(quán)限操作的不同數(shù)據(jù)對(duì)象。
基于角色的細(xì)粒度訪問控制模型具有較強(qiáng)的通用性,能確保高效靈活的訪問控制。其模型類圖[5]如圖3所示。
圖3 細(xì)粒度模型的類圖
類圖中的User對(duì)應(yīng)數(shù)據(jù)庫中的用戶表,Group對(duì)應(yīng)用戶組表,Role對(duì)應(yīng)角色表,Op對(duì)應(yīng)功能權(quán)限表,Ob對(duì)應(yīng)數(shù)據(jù)對(duì)象表,Stu對(duì)應(yīng)學(xué)生表;UR表示用戶角色的授予表,GR表示用戶組角色的授予表,RA表示角色權(quán)限的授權(quán)表,AttrCons表存儲(chǔ)用戶所有功能權(quán)限及其所能操作的數(shù)據(jù)對(duì)象,通過Userid和OPid來確定OBid。最后分解獲取到的OBid并在數(shù)據(jù)庫中的表中查找符合OBid屬性的數(shù)據(jù)信息返回到前臺(tái)[6]。
該模型在具體的應(yīng)用中包括登錄驗(yàn)證、權(quán)限訪問控制和權(quán)限管理三部分。用戶登陸進(jìn)行身份驗(yàn)證,然后系統(tǒng)為合法用戶加載初級(jí)用戶權(quán)限樹,用戶點(diǎn)擊初級(jí)加載樹中的葉子節(jié)點(diǎn)來訪問對(duì)應(yīng)的功能權(quán)限,最后調(diào)用存儲(chǔ)過程獲取功能權(quán)限對(duì)應(yīng)的數(shù)據(jù)對(duì)象并返回給前臺(tái)界面顯示。具體如下:
登錄驗(yàn)證能確保用戶的合法登錄。封裝常用驗(yàn)證控件[7]成復(fù)合控件checkUserForm,該控件擴(kuò)展FormPanel,能確保用戶輸入驗(yàn)證及合法身份驗(yàn)證??丶臉?gòu)造如下:
Ext.namespace("Ext.ux.form");//為新控件 check-UserFormt創(chuàng)建命名空間:
Ext.ux.form.userCheckForm = Ext.extend(Ext.form.userCheckForm,{//擴(kuò)展Form控件
… //復(fù)合控件中所包含的控件及其屬性與方法
url:‘check.Action’;//提交用戶輸入的信息到check.Action驗(yàn)證
});
Ext.reg(‘userCheckForm’,Ext.ux.Checkform);//完成該組件類型的注冊(cè)
通過在Ext.onReady(function(){...});中增加{xtype:‘userCheckForm’}完成復(fù)合控件的調(diào)用。復(fù)合將獲取到的用戶信息提交的具體的url進(jìn)行用戶身份驗(yàn)證,具體實(shí)現(xiàn)過程如圖5所示。
3.2.1 功能權(quán)限的訪問控制
權(quán)限的訪問控制能確保用戶訪問指定的權(quán)限資源,避免越權(quán)訪問。通過用戶權(quán)限樹 (Extjs中的異步樹組件)實(shí)現(xiàn)為不同用戶加載顯示不同的樹節(jié)點(diǎn),從而確保安全的訪問控制。該權(quán)限樹的實(shí)現(xiàn)包括初始權(quán)限樹的加載和權(quán)限樹的級(jí)聯(lián)加載:
(1)初始權(quán)限樹的加載:為保證用戶不花長(zhǎng)時(shí)間等待用戶權(quán)限樹的數(shù)據(jù)加載和首次渲染,設(shè)計(jì)權(quán)限樹先向用戶加載包含一級(jí)節(jié)點(diǎn) (根的子節(jié)點(diǎn))的初始權(quán)限樹。用戶點(diǎn)擊一級(jí)樹節(jié)點(diǎn),通過層層的級(jí)聯(lián)加載直至訪問葉子節(jié)點(diǎn)。此方式與一次性加載整棵權(quán)限樹相比不但省時(shí)而且確保頁面不會(huì)頻繁刷新,提高了用戶訪問體驗(yàn)。用戶通過登錄驗(yàn)證后,系統(tǒng)以獲取到的用戶Userid作為參數(shù),獲取該用戶對(duì)應(yīng)的角色并查找角色所對(duì)應(yīng)的功能權(quán)限,最后獲取根節(jié)點(diǎn)的一級(jí)子節(jié)點(diǎn)返回前臺(tái)顯示,完成初始權(quán)限樹的加載。
(2)權(quán)限樹級(jí)聯(lián)加載:用戶點(diǎn)擊初始權(quán)限樹中的節(jié)點(diǎn),層級(jí)的加載其對(duì)應(yīng)子節(jié)點(diǎn)直至葉子節(jié)點(diǎn),點(diǎn)擊葉子節(jié)點(diǎn)對(duì)功能權(quán)限的訪問。在層級(jí)加載過程中,需要獲取到所有功能權(quán)限對(duì)應(yīng)的葉子節(jié)點(diǎn)到根節(jié)點(diǎn)的權(quán)限路徑,在加載節(jié)點(diǎn)的過程中,通過判斷用戶點(diǎn)擊所節(jié)點(diǎn)的加載路徑是否在權(quán)限路徑中來確定是否加載相應(yīng)子節(jié)點(diǎn)。其中獲取權(quán)限路徑的遞歸算法findNodePath(List<resource>);實(shí)現(xiàn)的思想為:查找用戶權(quán)限集listResource中每個(gè)葉子權(quán)限節(jié)點(diǎn)到根節(jié)點(diǎn)的路徑 (所經(jīng)過的所有resource節(jié)點(diǎn)的id),并將路徑保存到數(shù)組a中,由此得到權(quán)限加載路徑數(shù)組。算法內(nèi)容如下:
For(Resource r:re){//依次對(duì)每個(gè)權(quán)限/Resource進(jìn)行處理
for(int j=0;j<a.length-1;j++){//指定數(shù)組初始長(zhǎng)度:a[200]
a [j]=r.getResourceId();//獲取 Resource 的節(jié)點(diǎn)id
a[j+1]=r.getParentId();//獲取該節(jié)點(diǎn)的父節(jié)點(diǎn)的id
r = resourceDao.getReourceById (r.getParentId());//查找該父節(jié)點(diǎn)的父節(jié)點(diǎn)并判斷其是否存在
if(r==null){//不存則說明為根節(jié)點(diǎn),跳出這個(gè)循環(huán)
j++; //若存在,則繼續(xù)循環(huán)直至找到根節(jié)點(diǎn)
break;}}}
當(dāng)用戶點(diǎn)擊權(quán)限樹中的節(jié)點(diǎn)時(shí),系統(tǒng)調(diào)用resourceD-ao.findByParentIdAndIds(id,a);方法查詢?cè)摴?jié)點(diǎn)是否具在合法的訪問路徑中,若有則返回該節(jié)點(diǎn)的路徑加載信息繼續(xù)加載;若無則提示用戶不具有繼續(xù)操作的權(quán)利。其中id為 通 過 樹 的 depTreeLoader.on ('beforeload',function(depTreeLoader,node));方法獲取用戶點(diǎn)擊的樹節(jié)點(diǎn)的id。路徑檢查方法如下:
public List<Resource> findByParentIdAndIds(int parentId,int ids[]){//查找點(diǎn)擊節(jié)點(diǎn)的子節(jié)點(diǎn)
String paramsInt="(";//將用戶權(quán)限數(shù)組a轉(zhuǎn)換成字符串形式,方便比對(duì)
for(int i=0;i<ids.length-1;i++){
paramsInt=paramsInt+ids [i]+","; }
paramsInt= paramsInt+ids[ids.length-1]+")";
String queryString= "from Resource r where r.parentId=" +parentId+"and r.resourceId in" +paramsInt;//查詢以parentId為父節(jié)點(diǎn)的該用戶所具有的子節(jié)點(diǎn)的字符串,防止越界訪問
List<Resource> listResource= getHibernate-Template().find(queryString);
return listResource;}
(3)用戶權(quán)限樹的顯示:由于Extjs通過Json數(shù)據(jù)與后臺(tái)異步交互,故用戶權(quán)限樹只接受格式為: [{text:″TreeName″,id:″″,parentId:″0″,leaf:true}]}](id 為樹節(jié)點(diǎn),text為樹結(jié)點(diǎn)內(nèi)容,leaf指節(jié)點(diǎn)是否為葉子,parentId是父節(jié)點(diǎn))的Json數(shù)組才能確保樹形結(jié)構(gòu)的顯示。由于Resource的屬性格式與JSON形式不符,由此增加Tree表,將Resource表中的屬性列與樹所需的Json數(shù)組對(duì)象一致,將listResource依次轉(zhuǎn)換成Tree表的標(biāo)準(zhǔn)Json格式,然后將結(jié)果存放到struts.xml中配置的Json類型的參數(shù)menuList中自動(dòng)加載給前臺(tái)異步樹顯示。
由此完成了權(quán)限樹的級(jí)聯(lián)加載。按照此方法,用戶可按照自己的需要顯示相應(yīng)功能權(quán)限,無需每次登陸都完全展示整棵權(quán)限樹,確保高效的異步訪問控制。
3.2.2 數(shù)據(jù)對(duì)象的訪問控制
用戶權(quán)限樹確保了用戶功能權(quán)限的安全訪問控制。按照訪問控制的細(xì)粒度,不同的功能權(quán)限對(duì)應(yīng)不同的數(shù)據(jù)對(duì)象。由此整合T-SQL語句編寫存儲(chǔ)過程并將其存儲(chǔ)到數(shù)據(jù)庫中,然后調(diào)用存儲(chǔ)過程獲取角色不同的功能權(quán)限所對(duì)應(yīng)的數(shù)據(jù)對(duì)象。
存儲(chǔ)過程封裝了用戶對(duì)任務(wù)的重復(fù)操作,通過選擇性調(diào)用此預(yù)先編譯的存儲(chǔ)過程,不必每次寫重復(fù)語句,提高批量語句的執(zhí)行速度。在編寫過程中,需要確定存儲(chǔ)過程的輸入和輸出參數(shù)并完善主體內(nèi)容。其中輸入?yún)?shù)包括用戶名Username(通過它獲取功能權(quán)限操作對(duì)應(yīng)的數(shù)據(jù)對(duì)象),權(quán)限樹的節(jié)點(diǎn)編號(hào)treenode(通過它獲取用戶選擇的功能權(quán)限),數(shù)組DataObjects(權(quán)限數(shù)據(jù)表獲取的數(shù)據(jù)對(duì)象)。例如通過存儲(chǔ)過程findUserObjects查找具有輔導(dǎo)員角色的用戶所能編輯的學(xué)生信息:
Use RuanjianShijianPingtai//存放用戶表、角色表等數(shù)據(jù)信息的數(shù)據(jù)庫
Create Procedure findUserObjects@Username char(8),@treenode char(8),@Data Objects List Output
AS
BEGIN
Select obj from AttrCons u where u.username=@Username and u.fun=@treenode
在調(diào)用時(shí),執(zhí)行語句 EXEC pro findUserObjects@’zhangsan’,@’update’,@Datalist OUTPUT即可。當(dāng)返回形式如 {D200901,F(xiàn)201203}的數(shù)據(jù)對(duì)象信息時(shí),表示具有輔導(dǎo)員角色的該用戶能夠編輯的學(xué)生對(duì)象為D200901(信息學(xué)院2009級(jí)1班)的學(xué)生和F201203(外語學(xué)院2012級(jí)的3班)的學(xué)生信息。
然而,存儲(chǔ)過程中所查詢出來的功能權(quán)限對(duì)應(yīng)的數(shù)據(jù)都是對(duì)象的形式,要輸出該數(shù)據(jù)對(duì)象信息,需要以其屬性為條件到數(shù)據(jù)庫中查詢符合該條件的數(shù)據(jù)表中的數(shù)據(jù)信息,并將其返回到前臺(tái)Grid數(shù)據(jù)面板顯示。對(duì)如D200901的數(shù)據(jù)對(duì)象,按以下屬性進(jìn)行分解:D代表學(xué)院如信息學(xué)院、2009代表年級(jí)、01代表班級(jí)。根據(jù)學(xué)院/年級(jí)等屬性,到stu表中讀取符合條件的數(shù)據(jù)并加載顯示。通過調(diào)用存儲(chǔ)過程獲取數(shù)據(jù)與通過查表方法所得到的結(jié)果是一致的,但是此方法大大提高了執(zhí)行效率。
在用戶權(quán)限樹中設(shè)定Checkbox屬性為true,構(gòu)造出用戶權(quán)限管理樹。通過選中或取消用戶權(quán)限管理樹中節(jié)點(diǎn)前的復(fù)選框,能方便的實(shí)現(xiàn)角色權(quán)限的授予、權(quán)限數(shù)據(jù)對(duì)象的指定以及用戶組的分配等。其中角色的權(quán)限授予如圖4所示。
圖4 用戶權(quán)限管理樹
選中一級(jí)節(jié)點(diǎn)前的復(fù)選框則其所有子節(jié)點(diǎn)被選中。選擇完成后點(diǎn)擊保存修改按鈕,修改信息會(huì)自動(dòng)保存并映射到數(shù)據(jù)庫中的AttrCons/RA/GR/PA/UR/RA表中,下次加載用戶權(quán)限樹的時(shí)候會(huì)讀取更新的表中的信息以實(shí)現(xiàn)權(quán)限樹的更新加載,確保角色/權(quán)限的靈活授權(quán)和管理。
選取基于B/S的軟件工程實(shí)踐平臺(tái)實(shí)現(xiàn)細(xì)粒度模型。該Web系統(tǒng)采用 Java語言,選取 myeclipse集成環(huán)境、mysql數(shù)據(jù)庫等進(jìn)行開發(fā)。通過搭建SSH2框架并整合Extjs技術(shù)[8],將系統(tǒng)按照MVC設(shè)計(jì)思想分為顯示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層等,各層間調(diào)用完全面向接口,實(shí)現(xiàn)了插件式編程,降低耦合度。系統(tǒng)權(quán)限訪問控制實(shí)現(xiàn)過程的順序圖[9-10]如圖5 所示。
圖5 權(quán)限訪問控制實(shí)現(xiàn)順序
系統(tǒng)最終實(shí)現(xiàn)結(jié)果如圖6所示。
圖6 系統(tǒng)的實(shí)現(xiàn)
本文通過分析、比較各種常用的訪問控制技術(shù),選取基于角色的訪問控制模型,在模型中增加屬性約束和用戶組所構(gòu)建的基于角色的細(xì)粒度訪問控制模型有效解決了目前管理信息系統(tǒng)的權(quán)限授予和管理過程中存在的授權(quán)復(fù)雜性、角色冗余性問題,減少了權(quán)限授予的數(shù)量,提高了權(quán)限授予的效率并確保了準(zhǔn)確、靈活的權(quán)限訪問控制。然而,此細(xì)粒度模型在解決模型沖突、角色繼承關(guān)系的私有權(quán)限等問題上仍存在缺陷,需通過深入的分析、研究加以改進(jìn)和完善。
[1]WU Jiangdong,LI Weihua,ANXifeng.Method of finely granular access control based on RBAC [J].Computer Engineering,2008,34(20):52-54(in Chinese).[吳江棟,李偉華,安喜鋒.基于RBAC的細(xì)粒度訪問控制方法[J].計(jì)算機(jī)工程,2008,34(20):52-54.]
[2]ZHAO Jing,YANG Rui,JIANG Luansheng.RBAC permission access control model based on data objects[J].Computer Engineering and Design,2010,31(15):3353-3355(in Chinese).[趙靜,楊蕊,姜灤生.基于數(shù)據(jù)對(duì)象的RBAC權(quán)限訪問控制模型[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(15):3353-3355.]
[3]TANG Jinpeng,LI Linglin,YANGLuming.User attributes oriented RBAC model[J].Computer Engineering and Design,2010,31(10):2184-2186(in Chinese).[唐金鵬,李玲琳,楊路明.面向用戶屬性的RBAC模型[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(10):2184-2186.]
[4]SHEN Lei,ZHANG Yuan,JIANG Ping.Design and implementation of rights management based on RBAC in Web[J].Computer Era,2010(10):49-51(in Chinese).[沈磊,張媛,蔣平.基于RBAC的權(quán)限管理在Web中的設(shè)計(jì)與實(shí)現(xiàn) [J].計(jì)算機(jī)時(shí)代,2010(10):49-51.]
[5]LIU Hongbo,LUO Rui,WANG Yongbin.Competence system based on RBAC design and implementation[J].Computer Technology and Development,2009,19(9):154-156(in Chinese).[劉宏波,羅銳,王永斌.一種采用RBAC模型的權(quán)限體系設(shè)計(jì) [J].計(jì)算機(jī)技術(shù)與發(fā)展,2009,19(9):154-156.]
[6]DU Hongyan,PAN Yi,HUANG Caixia,OU Xinliang.Application of OC-RBAC model in MIS[J].Huazhong Univ of Sci& Tech(Natural Science Edition),2009,37(9):53-55(in Chinese).[杜紅艷,潘怡,黃彩霞,等.OC-RBAC模型在管理信息系統(tǒng)中的應(yīng)用 [J].華中科技大學(xué)學(xué)報(bào) (自然科學(xué)版),2009,37(9):53-55.]
[7]FAN Minghu,F(xiàn)AN Hong,WU Xiaojin.Competence system based on RBAC design and implementation [J].Computer Engineering,2010,364(1):143-145(in Chinese).[范明虎,樊紅,伍孝金.Universal Privilege Management System Based on RBACin ASP.net[J].計(jì)算機(jī)工程,2010,364(1):143-145.]
[8]LI Tianming,HE Yueshun.Research on privilege management based on ExtJStechnology and SSH framework [J].Computer Applications and Software,2011,28(5):165-167(in Chinese).[李天鳴,何月順.基于Extjs技術(shù)與SSH框架的權(quán)限管理研究[J].計(jì)算機(jī)應(yīng)用與軟件,2011,28(5):165-167.]
[9]SONG Yun,LI Feng.Design and implementation of access control under B/Ssystem based on RBAC [J].Software Guide,2009,8(7):28-30(in Chinese).[宋云,李峰.基于RBAC的B/S系統(tǒng)訪問控制設(shè)計(jì)與實(shí)現(xiàn) [J].軟件導(dǎo)刊,2009,8(7):28-30.]
[10]LIAO Junguo,HONG Fan,XIAO Haijun,et al.Authorization management research based on extjs and SSH framework [J].Computer Engineering and Applications,2007,43(34):138-140(in Chinese).[廖俊國(guó),洪帆,肖海軍,等.細(xì)粒度的基于角色的訪問控制模型[J].計(jì)算機(jī)工程與應(yīng)用,2007,43(34):138-140.]