洪布金,余穩(wěn)定
(四川大學(xué)計(jì)算機(jī)學(xué)院,成都 610065)
基于RBAC與ACL的權(quán)限控制系統(tǒng)的實(shí)現(xiàn)
洪布金,余穩(wěn)定
(四川大學(xué)計(jì)算機(jī)學(xué)院,成都 610065)
實(shí)現(xiàn)一個(gè)基于RBAC思想與Spring Security ACL模型相結(jié)合的權(quán)限控制系統(tǒng),詳細(xì)闡述該系統(tǒng)的實(shí)現(xiàn)原理與工作機(jī)制。RBAC與傳統(tǒng)的授權(quán)策略相比它更加安全、靈活易維護(hù)。該系統(tǒng)將RBAC的思想與ACL模型相結(jié)合,能達(dá)到細(xì)粒度的數(shù)據(jù)級(jí)權(quán)限訪問(wèn)控制,實(shí)踐表明,該系統(tǒng)有良好的擴(kuò)展性與易用性。
RBAC;Spring Security ACL;權(quán)限控制;數(shù)據(jù)級(jí)訪問(wèn)控制;細(xì)粒度
隨著互聯(lián)網(wǎng)與計(jì)算機(jī)的高速發(fā)展,Web系統(tǒng)應(yīng)用越來(lái)越廣泛,在帶來(lái)方便的同時(shí)也增加了各種各樣的攻擊與信息的竊取,尤其是對(duì)一些信息比較敏感的系統(tǒng),信息一旦遭到非法訪問(wèn),將造成很大的損失,對(duì)資源的訪問(wèn)控制越來(lái)越成為一個(gè)系統(tǒng)的核心功能?;诮巧脑L問(wèn)控制(RBAC)由于其簡(jiǎn)單性、易擴(kuò)展性使其成為業(yè)界廣泛接受和應(yīng)用的授權(quán)參考模型[1~3]。RBAC在用戶與資源之間增加角色層,由于角色的變更的頻率相對(duì)于用戶的變更頻率要低,通過(guò)給角色授權(quán)可以降低授權(quán)的復(fù)雜度,易于維護(hù)。隨著應(yīng)用的復(fù)雜度不同,對(duì)資源的訪問(wèn)控制需求也不相同。RBAC一般能做到URL級(jí)別與頁(yè)面元素的權(quán)限控制,也就是功能級(jí)的權(quán)限制,但是無(wú)法做到數(shù)據(jù)級(jí)的權(quán)限訪問(wèn)控制,本文通過(guò)將RBAC與訪問(wèn)控制列表ACL相結(jié)合,實(shí)現(xiàn)了一個(gè)達(dá)到數(shù)據(jù)級(jí)權(quán)限控制的系統(tǒng)[4~5],有很好的可擴(kuò)展性與易維護(hù)性。
美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)標(biāo)準(zhǔn)RBAC模型有4個(gè)部件模型組成[1],這4個(gè)模型組件分別是基本模型(RBAC0)、型(RBAC1)、(RBAC2)和同一模型(RBAC3),其中應(yīng)用最為廣泛的為RBAC0,本系統(tǒng)就是在RBAC0的基礎(chǔ)上進(jìn)行擴(kuò)展,RBAC0的模型如圖1所示。
圖1 RBAC0模型
RBAC0主要包括5個(gè)元素,即用戶(user)、角色(role)、目標(biāo)(object)、操作(operation)以及許可權(quán)限(permission)。系統(tǒng)通過(guò)給角色授權(quán)而不是給用戶授權(quán),再將角色與用戶關(guān)聯(lián)起來(lái),這樣用戶就獲得了角色被授予的權(quán)限。當(dāng)用戶登錄系統(tǒng)的時(shí)候,通過(guò)session會(huì)話激活用戶所屬的角色,來(lái)獲得對(duì)系統(tǒng)的訪問(wèn)控制。由于角色/權(quán)限之間的變化比角色/用戶關(guān)系之間的變化相對(duì)要慢得多,減少了授權(quán)管理的復(fù)雜性,降低管理開(kāi)銷(xiāo)。
訪問(wèn)控制列表(ACL)是針對(duì)數(shù)據(jù)級(jí)的權(quán)限訪問(wèn)控制而提出來(lái)的,由于應(yīng)用的復(fù)雜度不同,某些應(yīng)用需要對(duì)實(shí)體對(duì)象進(jìn)行訪問(wèn)控制,例如在一家公司,業(yè)務(wù)員都擁有相同的頁(yè)面,但是只有被授權(quán)的用戶才能看到相應(yīng)的報(bào)表。Spring Security提供了對(duì)訪問(wèn)控制列表的實(shí)現(xiàn)[6],采用Spring Security的實(shí)現(xiàn)可以方便地對(duì)系統(tǒng)中的領(lǐng)域?qū)ο笤O(shè)置不同的權(quán)限。ACL主要包括4個(gè)基本的對(duì)象,它們之間的關(guān)系如圖2所示,箭頭指向代表被參照的一方:
圖2 ACL實(shí)體對(duì)象之間的關(guān)系
(1)ACL_SID:標(biāo)識(shí)授權(quán)的主體,一般來(lái)說(shuō)是訪問(wèn)系統(tǒng)的用戶,是權(quán)限的授予者。
(2)ACL_OBJECT_IDENTITY:系統(tǒng)中的領(lǐng)域?qū)ο?,也就是被訪問(wèn)控制的對(duì)象。
(3)ACL_ENTRY:系統(tǒng)中被訪問(wèn)控制對(duì)象的訪問(wèn)規(guī)則,即一個(gè)用戶對(duì)一個(gè)對(duì)象的操作權(quán)限。
(4)ACL_CLASS:表示系統(tǒng)中訪問(wèn)控制對(duì)象的類(lèi)的全限定名。
上述4個(gè)實(shí)體對(duì)象對(duì)應(yīng)著數(shù)據(jù)庫(kù)中的4張表,當(dāng)用戶創(chuàng)建一個(gè)實(shí)體對(duì)象的時(shí)候,系統(tǒng)會(huì)在上述4張表中插入關(guān)于這個(gè)對(duì)象的訪問(wèn)控制信息。用戶訪問(wèn)一個(gè)實(shí)體對(duì)象的時(shí)候會(huì)根據(jù)這4張表中的信息做出相應(yīng)的判斷。
根據(jù)RBAC與ACL的模型,設(shè)計(jì)出系統(tǒng)的核心對(duì)象模型,如圖3所示。
為了突出權(quán)限控制的重點(diǎn)部分,此數(shù)據(jù)庫(kù)模型簡(jiǎn)化了真實(shí)數(shù)據(jù)庫(kù)中的一些字段,其中箭頭指向的一方代表被參照的一方。下面就模型中的一些重要的對(duì)象以及它們之間的關(guān)系進(jìn)行一些說(shuō)明:
部門(mén):部門(mén)是企業(yè)實(shí)現(xiàn)組織機(jī)構(gòu)的一個(gè)抽象。部門(mén)并非孤立存在,而是和權(quán)限緊密聯(lián)系。此處的部門(mén)并非實(shí)際業(yè)務(wù)系統(tǒng)中的部門(mén),而是為了權(quán)限管理模塊單獨(dú)抽象出來(lái)的一個(gè)概念,將用戶與角色都與之關(guān)聯(lián),根據(jù)權(quán)限的靜態(tài)分離原則[7],只有角色與用戶在同一個(gè)部門(mén)下才能將角色賦給用戶。
圖3 數(shù)據(jù)庫(kù)模型
用戶:登錄系統(tǒng)的使用者,這是一個(gè)邏輯抽象的概念。在本系統(tǒng)中,人員分為業(yè)務(wù)人員與管理人員,人員隸屬于部門(mén)。現(xiàn)實(shí)中的人可以擁有系統(tǒng)中的一個(gè)或者多個(gè)用戶。
角色:角色是現(xiàn)實(shí)中某一個(gè)職位或者崗位的職責(zé)與權(quán)利的抽象,是為了解耦授權(quán)的復(fù)雜度而抽象出來(lái)的邏輯概念,在本系統(tǒng)中角色分為業(yè)務(wù)角色與管理角色,與人員的類(lèi)型相對(duì)應(yīng),同一類(lèi)型的角色與人員才能相互關(guān)聯(lián),角色也隸屬于部門(mén)。
ACL_SID,即安全對(duì)象,是系統(tǒng)中的授權(quán)主體,將ACL_SID與用戶表進(jìn)行關(guān)聯(lián),可以控制用戶對(duì)領(lǐng)域?qū)ο蟮脑L問(wèn)。ACL_CLAS與ACL_OBJECT_IDENTITY唯一標(biāo)識(shí)系統(tǒng)中的實(shí)體對(duì)象。ACL_ENTRY是實(shí)體對(duì)象的訪問(wèn)規(guī)則。
資源:資源即系統(tǒng)中將被用戶操作與訪問(wèn)的對(duì)象,在本系統(tǒng)中資源主要包括菜單、菜單頁(yè)面對(duì)應(yīng)的UI元素以及實(shí)體對(duì)象。
權(quán)限即主體擁有的對(duì)客體資源進(jìn)行可進(jìn)行操作的集合。為了防止權(quán)限的擴(kuò)散,根據(jù)最小特權(quán)的原則,在本系統(tǒng)中權(quán)限可以分為兩類(lèi):業(yè)務(wù)權(quán)限與管理權(quán)限,其中業(yè)務(wù)權(quán)限即用戶直接通過(guò)角色間接擁有的菜單權(quán)限,用戶登錄后便可看到對(duì)應(yīng)的功能菜單并處理相關(guān)的模塊業(yè)務(wù);管理權(quán)限是系統(tǒng)管理人員通過(guò)管理角色擁有管理角色后,則管理人員可以給其他的業(yè)務(wù)人員授予業(yè)務(wù)權(quán)限。
該模型中的主要關(guān)系有:分配資源操作RA(Resource Assignment)、分配用戶權(quán)限PA(Privilege Assignment)、分配角色到部門(mén)RDA(Role Department Assignment)、分配用戶到部門(mén)UDA(User Department Assignment),如圖4所示。
圖4 對(duì)象關(guān)系
分配資源RA,主要涉及到URL資源以及頁(yè)面元素資源以及實(shí)體對(duì)象,分配URL資源到角色,分配頁(yè)面元素到相關(guān)的menu,創(chuàng)建實(shí)體對(duì)象。
分配權(quán)限PA,將角色關(guān)聯(lián)到用戶,實(shí)現(xiàn)用戶與角色映射。UDA,實(shí)現(xiàn)用戶與部門(mén)的映射,RDA實(shí)現(xiàn)角色與部門(mén)的映射,這樣可以做到權(quán)限的靜態(tài)分離。只有屬于同一個(gè)部門(mén)的角色與用戶才能相互映射。
3.1 功能級(jí)權(quán)限訪問(wèn)控制實(shí)現(xiàn)
權(quán)限的控制主要分為功能級(jí)訪問(wèn)控制以及數(shù)據(jù)級(jí)訪問(wèn)控制,其中功能級(jí)的訪問(wèn)控制主要通過(guò)前臺(tái)來(lái)實(shí)現(xiàn),其控制流程如圖5所示。
圖5 功能級(jí)權(quán)限控制流程圖
每個(gè)用戶都擁有一個(gè)或者幾個(gè)角色,在用戶登錄系統(tǒng)的時(shí)候,用戶通過(guò)用戶名與密碼的驗(yàn)證后,激活會(huì)話,系統(tǒng)對(duì)用戶的角色進(jìn)行判斷,根據(jù)用戶的角色信息去后臺(tái)加載用戶所擁有的URL信息,返回前臺(tái)生成功能樹(shù)的樹(shù)形接口入口點(diǎn)。當(dāng)用戶通過(guò)功能樹(shù)訪問(wèn)系統(tǒng)中頁(yè)面的時(shí)候,系統(tǒng)會(huì)根據(jù)用戶的角色生成對(duì)應(yīng)的UI元素控制表,用戶進(jìn)入界面后,根據(jù)UI元素控制表能夠控制該用戶所對(duì)應(yīng)的各個(gè)界面存在的UI元素,達(dá)到對(duì)用戶訪問(wèn)系統(tǒng)資源的控制。采用上述管理方式,可以比較好地解決功能級(jí)權(quán)限的訪問(wèn)控制,在滿足安全性要求前提下,簡(jiǎn)化了人員角色指派和管理工作。但是在系統(tǒng)演化階段可能需要對(duì)實(shí)體對(duì)象進(jìn)行相應(yīng)的訪問(wèn)控制,該模型無(wú)法滿足要求,下面將分析數(shù)據(jù)級(jí)權(quán)限的控制實(shí)現(xiàn)。
3.2 數(shù)據(jù)級(jí)權(quán)限訪問(wèn)控制實(shí)現(xiàn)
對(duì)于數(shù)據(jù)級(jí)的訪問(wèn)控制是通過(guò)ACL來(lái)實(shí)現(xiàn)的,ACL定義了用戶對(duì)實(shí)體對(duì)象的訪問(wèn)規(guī)則,當(dāng)用戶訪問(wèn)實(shí)體對(duì)象的時(shí)候是通過(guò)方法來(lái)調(diào)用的,所以要對(duì)實(shí)體對(duì)象進(jìn)行訪問(wèn)控制,必須要在訪問(wèn)的調(diào)用前根據(jù)ACL里的規(guī)則進(jìn)行邏輯判斷,判斷用戶時(shí)候擁有對(duì)實(shí)體對(duì)象的權(quán)限,但是這種設(shè)計(jì)對(duì)于簡(jiǎn)單的系統(tǒng)還是可以接受的,對(duì)于復(fù)雜的系統(tǒng),用戶的訪問(wèn)控制策略頻繁地變化,會(huì)導(dǎo)致用戶權(quán)限的判斷邏輯不停地改變,而且容易導(dǎo)致方法內(nèi)的邏輯混亂。
(1)AOP簡(jiǎn)介
對(duì)于這種橫切關(guān)注點(diǎn)問(wèn)題,可以使用AOP(Aspect Oriented Programming)技術(shù)很好地解決這個(gè)問(wèn)題[9~10]。在面向?qū)ο蟮某绦蜷_(kāi)發(fā)與設(shè)計(jì)中,人們發(fā)現(xiàn)在模塊化單元中,某些邏輯總是共有的,而且這些業(yè)務(wù)邏輯與系統(tǒng)的核心業(yè)務(wù)邏輯的關(guān)聯(lián)性很弱,它們留在模塊中是因?yàn)橥獠啃枨髲?qiáng)加給核心模塊的,例如:日志、權(quán)限、事物等。那么,把這些共有的邏輯從模塊中剝離出來(lái),再在適當(dāng)?shù)臅r(shí)候注入回去,將會(huì)明顯地改善模塊的可讀性與重用性。
(2)AOP實(shí)現(xiàn)的權(quán)限管理
通過(guò)ACL定義了實(shí)體對(duì)象的訪問(wèn)控制規(guī)則,將對(duì)這些規(guī)則的判斷邏輯從方法的業(yè)務(wù)邏輯代碼里分離出來(lái),定義成一個(gè)一個(gè)切面,而當(dāng)對(duì)這些切面進(jìn)行修改的時(shí)候,也不會(huì)改變方法內(nèi)的業(yè)務(wù)邏輯。下面給出一個(gè)簡(jiǎn)單的切面流程圖,如圖6所示。
圖6 切面流程圖
AspectJ是目前應(yīng)用最廣泛的AOP語(yǔ)言[10],它既是AOP的語(yǔ)言規(guī)范也是AOP的實(shí)現(xiàn)。把系統(tǒng)中所有對(duì)實(shí)體對(duì)象的訪問(wèn)方法都集中到一個(gè)包下,然后利用AspectJ定義對(duì)這個(gè)包下的方法訪問(wèn)的切面的Pointcut,就可以達(dá)到對(duì)實(shí)體對(duì)象的訪問(wèn)控制,例如:我們把對(duì)工資對(duì)象訪問(wèn)的方法都放在com.mycompany.service包中,這樣可以為這些訪問(wèn)工資的方法,定義Pointcut了:
最后引入AspectJ代碼;利用around()的Advice,而Advice就是通過(guò)讀取ACL里的規(guī)則來(lái)判斷用戶的訪問(wèn)權(quán)限。
這樣修改工資的方法,判斷用戶的權(quán)限的代碼全部分離出來(lái),所有的關(guān)于權(quán)限判斷的代碼通過(guò)Aspect來(lái)定義,將修改工資的方法完全與權(quán)限的判斷解耦了,當(dāng)系統(tǒng)中的訪問(wèn)控制策略發(fā)生變化時(shí),只需要修改Aspect中的代碼,而具體的業(yè)務(wù)邏輯代碼無(wú)需修改。
本文論述了一種基于RBAC與ACL相結(jié)合的模型,通過(guò)AOP來(lái)實(shí)現(xiàn)數(shù)據(jù)級(jí)訪問(wèn)控制的系統(tǒng)。實(shí)踐表明,采用基于RBAC模型的權(quán)限管理具有以下優(yōu)勢(shì):由于角色/權(quán)限之間的變化比角色/用戶之間的變化要緩慢得多,減少了授權(quán)管理的復(fù)雜性,降低了管理開(kāi)銷(xiāo);而且通過(guò)ACL與AOP的結(jié)合,實(shí)現(xiàn)了數(shù)據(jù)級(jí)的訪問(wèn)控制,能夠靈活地支持應(yīng)用系統(tǒng)的安全策略,并對(duì)系統(tǒng)的變化有很大的伸縮性,在操作上,權(quán)限的分配直觀,易于理解使用。
[1] Sandhu R.S.Role-Based Access Control Models[J].IEEE Computer,1996,29(2):38~47
[2] 徐震,李斕,馮登國(guó).基于角色的受限委托模型[J].軟件學(xué)報(bào),2005,16(5):970~978
[3] 鐘華,馮玉琳,姜洪安.擴(kuò)充角色層次關(guān)系模型及其應(yīng)用[J].軟件學(xué)報(bào),2000,11(6):779~784
[4] 唐建,徐罡,許舒人.一種數(shù)據(jù)級(jí)安全訪問(wèn)控制方案[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013,22(9):81~85
[5] 馮志亮,譚景信.分級(jí)的行列級(jí)權(quán)限系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(10):3274~3277
[6] Domain Object Security(ACLs).Security(ACLs).http://docs.spring.io/springsecurity/site/docs/3.2.4.RELEASE/reference/htmlsingle
[7] 肖璐.基于RBAC的責(zé)任分離機(jī)制的研究與實(shí)現(xiàn)[D].北京交通大學(xué),2008
[8] 胡和平.基于J2EE的權(quán)限管理框架實(shí)現(xiàn)[J].計(jì)算機(jī)工程與科學(xué),2007,29(6):109~112
[9] 劉天陽(yáng).AOP與權(quán)限控制研究[D].大連理工大學(xué),2005
[10] The Aspect J Developer's Notebook.http://www.eclipse.org/aspectj/doc/released/adknotebook/index.html
Implementation of Access Control System Based on RBAC and ACL
HONG Bu-jin,YU Wen-ding
(Department of Computer Science,Sichuan University,Chengdu 610065)
Implements an access control system based on the combination of RBAC and Spring Security ACL,describes the principle and mechanism of the system in details.Compares with traditional authorization policy,RBAC ismore secure,flexible and easier tomaintain.Combines the system the ideological of RBAC with AC Lmodel phase,achieves the data level permissions fine-grained access control.Practice shows that,ithas good scalability and ease of use.
RBAC;Spring Security ACL;Access Control;Data-Level Access Control;Fine-Gained
1007-1423(2015)07-0045-05
10.3969/j.issn.1007-1423.2015.07.013
洪布金(1989-),男,安徽蕪湖人,碩士研究生,研究方向?yàn)榫W(wǎng)絡(luò)與信息安全
余穩(wěn)定(1989-),男,安徽六安人,碩士研究生,研究方向?yàn)榫W(wǎng)絡(luò)與信息安全
2014-12-30
2015-02-01