摘 要:針對RBAC96模型中私有權限實現方法的不足,分析了現有改進方案的研究現狀和不足,引入繼承屬性的概念,通過繼承屬性值實現權限公有與私有的劃分,提出了角色繼承時只創建繼承關系的繼承方案。引入權限重載概念,給出了多角色繼承及權限重載時的沖突解決規則,采用廣度優先搜索算法實現了角色權限的動態獲取;結合實例說明了角色繼承、權限重載、解除繼承關系的實現方法。
關鍵詞:角色繼承; 私有權限; 繼承屬性; 權限重載; 廣度優先搜索算法
中圖分類號:TP311文獻標志碼:A
文章編號:1001-3695(2009)06-2362-03
doi:10.3969/j.issn.1001-3695.2009.06.109
Research and improvement of role inheritance in RBAC model
ZHANG Shi-long, SHEN Yu-li
(College of Information,Guangdong Ocean University, Zhanjiang Guangdong 524088, China)
Abstract:
In order to overcome the shortages of the implement method of RBAC96 model’s private permission, put forward a new inheritance scheme after the research, analyzed shortages of current improvement scheme, which only created inheritance relation.Introduced the concepts of inheritance attribution and permission override, and could identify the private permission in this scheme through inheritance attibution value. Presented the conflict rules about multiple roles inheritance and permission override. With the help of the breadth-first search algorithm, could get role permission dynamically. Finally, illustrated the methods of role inheritance, permission override and remove inheritance relation with some examples.
Key words:role inheritance; private permission; inheritance attribution; permission override; breadth-first search algorithm
基于角色的訪問控制(role-based access control,RBAC)是目前應用得較為廣泛的一種訪問控制技術,采用RBAC,便于實現最小特權和減少授權管理的工作量,是解決大型企業統一資源訪問控制的有效方法。為方便權限管理,Sandhu等人提出的RBAC96模型中引入了角色層次,但該層次關系中的權限處理有缺陷,即低級角色的全部權限都被高級角色繼承,而不能擁有自己的私有權限,這一點不能全面反映實際應用中復雜的角色層次關系。對此,RBAC96模型通過引入私有角色來解決這個問題,但私有角色的引入導致角色數量倍增,增加了管理員對角色管理的復雜性。
針對RBAC96模型中私有權限的繼承問題,張少敏[1]、樊銀亭[2]、王建明[3]、李鍵[4]、顧春華[5]等人從不同的角度對RBAC96模型進行了權限類別及繼承方式的擴展,探討了解決公有權限、私有權限及權限繼承問題的研究方案。以上方案雖然從理論角度對RBAC96模型中私有權限的繼承問題有所改進,但都存在著不同程度的不足。本文的創新性在于通過權限對角色分配時的繼承屬性值來標志私有權限,在權限繼承過程中采用只創建繼承關系的非冗余繼承方式,給出了繼承過程中的多角色繼承及權限重載的沖突解決規則,改進了RBAC96模型中私有權限的繼承問題,規避了現有研究方案的不足。
1 現有改進方案分析
1.1 研究現狀
文獻[1]提出傳播深度N的概念,用來表示角色的權限類別及可被繼承次數,每進行一次繼承,N的值減1。N>0表示公有權限,N=0表示私有權限。文獻[2]把角色的權限分為授予和拒絕兩種,通過在高級角色中分配拒絕權限來實現低級角色中對應的私有權限。文獻[3]把權限分為公有、私有和特征三類,私有權限不允許繼承,公有權限允許繼承,特征權限能否被繼承及繼承后的權限類別由繼承方式決定。繼承方式有一般繼承、私有化繼承、公有化繼承和無特征繼承四種。文獻[4]把權限分為公有、私有和受保護三類,繼承方式分為公有繼承、私有繼承和受保護繼承三種;給出了繼承機制和規則,提出了權限繼承深度的概念,其值在每次繼承時加1,等于零表示分配權限,大于零表示繼承權限。文獻[5]把權限分為公有和私有兩種,繼承方式只有公有繼承一種。公有權限可以被繼承,私有權限不能被繼承,允許公有權限單向轉換為私有權限;提出權限傳播度的概念,用來實現權限被有限個上級繼承的目的。
1.2 研究的不足
以上研究方案雖然都解決了RBAC96模型中私有權限的繼承問題,但是都存在不同程度的不足之處:
a)增加了模型復雜度及權限管理員的工作負擔,不利于模型實現。例如文獻[3]把權限分為三類,繼承方式分為四種;文獻[4]把權限分為三類,繼承方式分為三種。
b)公有及私有權限的實現方式不合理。文獻[1]通過傳播深度的值進行區分,其值大于零表示公有權限,且每繼承一次其值減1,因此會出現有限次繼承后某公有權限轉變為私有權限的問題;文獻[2]通過在高級角色中分配拒絕權限來實現低級角色中對應的私有權限,即某角色的權限是公有還是私有由所要繼承的高級角色決定,同一角色的權限在不同繼承關系中表現為不同的權限類別;文獻[5]把權限集分為互不相交的公有權限集和私有權限集,公有權限雖然可以單向不可逆轉換為私有權限,但是權限公有、私有的角色無關性限制了模型的權限分配及繼承的靈活性。
c)角色繼承的實現方式導致了數據不一致。文獻[1]把公有權限及其傳播深度屬性全部繼承到高級角色中;文獻[2]把公有權限繼承到高級角色中的同時,還要分配對應低級角色中全部私有權限的拒絕權限;文獻[3,4]根據角色繼承方式把可繼承權限全部繼承到高級角色中;文獻[5]把公有權限及其權限傳播度屬性全部繼承到高級角色中。這種低級角色的可繼承權限冗余繼承到高級角色中的方式,雖然在獲取角色的權限時非常方便,但在解除角色繼承關系及修改低級角色權限時,高級角色不會按照繼承關系同步修改所繼承權限,從而產生了數據的不一致。為了實現這種數據一致性,模型需要額外做大量的輔助工作,增加了模型復雜度和實現難度。
2 改進模型
2.1 定義
基于篇幅關系,與RBAC96模型相同的概念不再贅述,下面給出改進模型中角色繼承的相關概念。
定義1 權限集(permission)。對被保護系統的數據或資源進行訪問的許可集合,用P表示權限集合,用p表示P中的某個權限,有p∈P。
定義2 角色集(role)。在特定組織中的工作職員或工作資格的集合、權限分配的單位與載體。用R表示角色集,用r表示R中的某個角色,有r∈R。
定義3 權限指派(permission assignment,PA)。它是權限集P到角色集R的一種多對多的二元關系集合,即PAP×R。(p,r)∈PA表示權限p分配給角色r,或者說擁有r的用戶具有權限p。角色r擁有的權限集表示為r{p1, p2, …, pn}。
定義4 繼承屬性(inheritance attribution,IA)。它是權限的一個屬性,在權限分配給角色時指定,用來決定分配給角色的權限能否被其他角色繼承。其值分為公有、私有兩種,同一權限在不同角色中的IA可以不同。權限分配給角色即表示角色擁有該權限,與IA的值無關。
定義5 公有權限(public permission)。分配給角色的繼承屬性為公有的權限稱之為角色的公有權限,PPBP(r)為角色r所具有的公有權限的集合。用p(pbp)表示r的權限p為公有權限,有p(pbp)∈ PPBP(r)。
定義6 私有權限(private permission)。分配給角色的繼承屬性為私有的權限稱之為角色的私有權限。PPRP(r)為角色r所具有的私有權限的集合,PPBP(r)∪PPRP(r)=P(r)。用p(prp)表示r的權限p為私有權限,有p(prp)∈ PPRP(r)。
定義7 角色繼承(role inheritance,RI),是指角色在滿足一定條件下可以繼承另外一個角色的部分或全部權限,它表示角色R與R之間的二元關系,RIR×R。(r1,r2)∈RI表示角色r2擁有r1的部分或全部權限,用符號r1->r2表示。其中:r1稱為低級角色或父角色;r2稱為高級角色或子角色。角色的公有權限可以被繼承,且繼承后屬性不變,即如果r1->r2,且p∈PPBP(r1),有p∈PPBP(r2)。角色的私有權限不能被繼承,即如果r1->r2,且p∈PPRP(r1),有pPPRP(r2)。
定義8 多重繼承(multiple inheritance,MI)。一個角色可以同一個或多個角色建立繼承關系,稱之為角色的多重繼承。
定義9 權限重載(permission override,PO)。角色繼承時,為角色分配的權限可以覆蓋掉從低級角色繼承的同一權限的繼承屬性,稱為角色繼承時的權限重載。通過重載可以改變從低級角色所繼承權限的繼承屬性。
規則1 多重繼承時,同一權限在多個低級角色中繼承屬性可能不同,多重繼承時的沖突解決規則如表1所示。多重繼承時,某權限只要在任一低級角色中為公有權限,則該權限可以被高級角色繼承,繼承后為公有權限;如果某權限在全部低級角色中沒有公有權限(私有權限或未分配),則該權限不能被高級角色繼承。
規則2 權限重載時,從低級角色繼承的權限與高級角色中分配的同一權限的繼承屬性可能不同,重載時的沖突解決規則如表2所示。如果高級角色分配了某權限,則該權限重載后的繼承屬性為所分配權限的繼承屬性,如果未分配該權限,則由從低級角色所繼承權限的繼承屬性決定。
下面再說明兩個觀點:
a)角色的繼承方式只有一種,在建立角色繼承關系時無須指定。私有權限不能被繼承,公有權限可以被繼承。
b)角色繼承時只建立繼承關系,低級角色的公有權限并不冗余繼承到高級角色中。
2.2 角色權限求解算法
新模型中,在建立角色繼承關系時并未把低級角色的可繼承權限冗余繼承到高級角色中,因此在獲取角色權限時需要根據已有的繼承關系,遵循多重繼承及權限重載的沖突解決規則動態求解角色的權限。下面給出角色權限的求解算法。
procedure getRolePrivilege(r,p,pia)
輸入:角色r,權限p,p在r中的繼承屬性pia
a)設定返回權限屬性rtn_pia=“無權限”;
b)判斷r是否分配了權限p,如果已分配則把p的繼承屬性值賦給rtn_pia,轉到步聚h),否則進入下一步;
c)把r壓入隊列queue;
d)隊列queue為空則轉入步聚h),否則進入下一步;
e)從隊列中彈出一個值ri,搜索ri繼承的所有低級角色中是否已分配權限p的公有權限,如果有則設rtn_pia=“公有權限”,轉至步驟h),否則進入下一步;
f)把ri的所有未分配權限p的低級角色壓入隊列queue;
g)轉至步驟d);
h)清空隊列queue,返回rtn_pia。
算法的思想是首先判斷角色r是否已分配權限p,如果已分配,則返回其繼承屬性;如果沒有分配權限p,則需要搜索r繼承的所有低級角色,判讀是否可以繼承到權限p。在判斷r是否可以繼承到權限p的過程,借助隊列存儲預搜索的所有低級角色,利用廣度優先搜索的方法進行搜索。首先從隊列中彈出一個角色ri,如果其繼承的所有低級角色中分配了權限p的公有權限,則算法中止;否則把角色ri繼承的所有未分配權限p的低級角色壓入隊列。重復上述彈出壓入過程,直至隊列為空或搜索到某低級角色分配了權限p的公有權限。
在極端情況下,算法將每一相關的低級角色全部壓入隊列,即該算法是廣度優先搜索的一個實例,此時算法的效率在用鄰接矩陣表示角色繼承關系時,時間復雜度屬于O(V2),V為角色數;在用鄰接鏈表表示角色之間的繼承關系時,時間效率屬于O(V+E),V為角色數,E為角色之間繼承關系的個數[6]。
2.3 實例分析
下面通過實例對現有研究方案與本文所提出的方案進行分析對比。為了描述方便,把現有研究方案稱為冗余繼承方式,本文的研究方案稱為非冗余繼承方式。
1)建立繼承關系 已有角色role1{p5(prp)}, role2{p1(pbp),p3(prp)}, role3{p1(pbp), p2(pbp), p4(prp)},要建立role2->role1, role3->role1的繼承關系。在冗余繼承方式下,首先建立繼承關系RI{(role2, role1), (role3, role1)},然后把role2、role3的可繼承權限及其屬性繼承到role1中,即繼承后role1的權限為role1{p1(pbp), p2(pbp), p5(prp)},如圖1所示。此時,如果不新增權限屬性加以標志,將無法區分繼承權限與分配權限。而在非冗余繼承方式下,只需建立繼承關系RI即可。
2)變更低級角色權限 在冗余繼承方式下,如果權限的分配與變更晚于繼承關系的建立,則低級角色的任何權限的改變不會同步到高級角色中。在非冗余繼承方式下,高級角色的權限是按照繼承關系動態求解的,所以低級角色的任何權限變化都會實時反映到高級角色中。例如對role2新增公有權限p6(pbp),在冗余繼承方式下,雖然有role2->role1,但role1中不會出現role2新增加的權限p6(pbp);而在非冗余繼承方式下,role1在求解權限時能通過role2->role1繼承關系獲得該權限。
3)解除繼承關系 要解除role3->role1的繼承關系,在冗余繼承方式下,現有的研究方案中并未給出解除繼承關系的具體方法。如果只從繼承關系RI中刪除(role3, role1),則會出現role1中仍有從role3中繼承的權限的數據不一致;如果從role1中刪除role3中可繼承權限{p1(pbp), p2(pbp)},則將產生role1從role2中所繼承的{p1(pbp)}也被刪除的副作用。因此在冗余繼承方式下,為了保證繼承關系解除后角色權限的一致和正確,必須對role1以及從role1直接或間接進行權限繼承的所有角色,按照繼承關系逐級重新產生權限,其復雜度可想而知。而在非冗余繼承方式下,只需從繼承關系RI中刪除(role3, role1)即可。
4)權限重載 現有研究方案對于更改繼承權限的公有、私有等類別,要么通過指定繼承方式使低級角色的一類權限的類別發生改變;要么通過公有權限單向轉換為私有的方式實現,實現方式和手段不靈活,難以滿足實際需求。通過權限重載方法實現,方式簡單靈活,
如要改變role1繼承的權限p1(pbp)為私有權限,只需為role1分配p1(prp)即可。
3 模型對比
如表3所示,給出現有解決方案與本文給出的解決方案的對比分析,可以更直觀地了解本文所給方案的優勢。本文所給出的角色繼承實現方案簡單且易于實現,給出的沖突解決規則完善。采用非冗余繼承方式,在解除繼承關系及更改所繼承低級角色的權限時,操作簡單且不會出現數據不一致,同時可以靈活重載已繼承權限。
表3 模型對比
比較項文獻[1]文獻[2]文獻[3]文獻[4]文獻[5]本文
權限分類兩類兩類三類三類兩類兩類
繼承方式一種一種四種三種一種一種
私有權限表示給出給出———給出
繼承權限區分——區分—區分
冗余繼承是是是是是否
沖突規則無有無無無有
權限重載無無無無無有
解除繼承方法無無無無無有
直接解除繼承否否否否否可以
4 結束語
結合面向對象的繼承思想及實現方法,引入繼承屬性及權限重載概念,給出了一種只建立繼承關系,在需要時動態求解角色權限的非冗余角色繼承方案,較好地解決了RBAC96模型私有角色的不足及現有方案冗余繼承所帶來的不足。
參考文獻:
[1]張少敏,王保義,周利華.一種具有時間約束的基于角色的授權管理模型[J].武漢大學學報:理學版,2006,52(5):578-581.
[2]樊銀亭,王春清,周德祥.一種ERBAC模型的設計與實現[J].合肥工業大學學報:自然科學版,2007,30(7):869-872.
[3]王建明,劉國賢,邱吉福,等.基于RBAC改進模型的電力系統數據安全設計[J].電氣應用,2006,25(9):75-78.
[4]李鍵,陳杰.RBAC模型權限管理中三種新的角色繼承機制和授權策略[J].四川大學學報:自然科學版,2007,44(3):521-524.
[5]顧春華,肖寶亮.RBAC模型層次關系中的角色權限[J].華東理工大學學報:自然科學版,2007,33(1):96-99.
[6]ANANY L.算法設計與分析基礎[M].潘彥,譯.北京:清華大學出版社,2004:133-135.