基于RBAC模型的權限管理系統的設計和實現
裴輝東 梁云風
(1. 山東省煙臺海頤軟件股份有限公司;2山東省煙臺東方電子信息產業股份有限公司)
摘要:提出了基于RBAC模型的權限管理系統的設計和實現方案。介紹了采用的J2EE架構的多層體系結構設計,闡述了基于角色的訪問控制RBAC模型的設計思想,并討論了權限管理系統的核心面向對象設計模型,以及權限訪問、權限控制和權限存儲機制等關鍵技術。
關鍵詞:權限管理系統;角色;訪問控制;RBAC模型;J2EE;LDAP
0 引言
管理信息系統是一個復雜的人機交互系統,其中每個具體環節都可能受到安全威脅。構建強健的權限管理系統,保證管理信息系統的安全性是十分重要的。權限管理系統是管理信息系統中可代碼重用性最高的模塊之一。任何多用戶的系統都不可避免的涉及到相同的權限需求,都需要解決實體鑒別、數據保密性、數據完整性、防抵賴和訪問控制等安全服務(據ISO7498-2)。例如,訪問控制服務要求系統根據操作者已經設定的操作權限,控制操作者可以訪問哪些資源,以及確定對資源如何進行操作。
目前,權限管理系統也是重復開發率最高的模塊之一。在企業中,不同的應用系統都擁有一套獨立的權限管理系統。每套權限管理系統只滿足自身系統的權限管理需要,無論在數據存儲、權限訪問和權限控制機制等方面都可能不一樣,這種不一致性存在如下弊端:
a.系統管理員需要維護多套權限管理系統,重復勞動。
b.用戶管理、組織機構等數據重復維護,數據一致性、完整性得不到保證。
c.由于權限管理系統的設計不同,概念解釋不同,采用的技術有差異,權限管理系統之間的集成存在問題,實現單點登錄難度十分大,也給企業構建企業門戶帶來困難。
采用統一的安全管理設計思想,規范化設計和先進的技術架構體系,構建一個通用的、完善的、安全的、易于管理的、有良好的可移植性和擴展性的權限管理系統,使得權限管理系統真正成為權限控制的核心,在維護系統安全方面發揮重要的作用,是十分必要的。
本文介紹一種基于角色的訪問控制RBAC(Role-Based policies Access Control)模型的權限管理系統的設計和實現,系統采用基于J2EE架構技術實現。并以討論了應用系統如何進行權限的訪問和控制。
1 采用J2EE架構設計
采用J2EE企業平臺架構構建權限管理系統。J2EE架構集成了先進的軟件體系架構思想,具有采用多層分布式應用模型、基于組件并能重用組件、統一完全模型和靈活的事務處理控制等特點。
系統邏輯上分為四層:客戶層、Web層、業務層和資源層。
a. 客戶層主要負責人機交互。可以使系統管理員通過Web瀏覽器訪問,也可以提供不同業務系統的API、Web Service調用。
b. Web層封裝了用來提供通過Web訪問本系統的客戶端的表示層邏輯的服務。
c. 業務層提供業務服務,包括業務數據和業務邏輯,集中了系統業務處理。主要的業務管理模塊包括組織機構管理、用戶管理、資源管理、權限管理和訪問控制幾個部分。
d. 資源層主要負責數據的存儲、組織和管理等。資源層提供了兩種實現方式:大型關系型數據庫(如ORACLE)和LDAP(Light Directory Access Protocol,輕量級目錄訪問協議)目錄服務器(如微軟的活動目錄)。
2 RBAC模型
訪問控制是針對越權使用資源的防御措施。基本目標是為了限制訪問主體(用戶、進程、服務等)對訪問客體(文件、系統等)的訪問權限,從而使計算機系統在合法范圍內使用;決定用戶能做什么,也決定代表一定用戶利益的程序能做什么[1]。
企業環境中的訪問控制策略一般有三種:自主型訪問控制方法、強制型訪問控制方法和基于角色的訪問控制方法(RBAC)。其中,自主式太弱,強制式太強,二者工作量大,不便于管理[1]。基于角色的訪問控制方法是目前公認的解決大型企業的統一資源訪問控制的有效方法。其顯著的兩大特征是:1.減小授權管理的復雜性,降低管理開銷;2.靈活地支持企業的安全策略,并對企業的變化有很大的伸縮性。
NIST(The National Institute of Standards and Technology,美國國家標準與技術研究院)標準RBAC模型由4個部件模型組成,這4個部件模型分別是基本模型RBAC0(Core RBAC)、角色分級模型RBAC1(Hierarchal RBAC)、角色限制模型RBAC2(Constraint RBAC)和統一模型RBAC3(Combines RBAC)[1]。RBAC0模型如圖1所示。
a. RBAC0定義了能構成一個RBAC控制系統的最小的元素集合。在RBAC之中,包含用戶users(USERS)、角色roles(ROLES)、目標objects(OBS)、操作operations(OPS)、許可權permissions(PRMS)五個基本數據元素,權限被賦予角色,而不是用戶,當一個角色被指定給一個用戶時,此用戶就擁有了該角色所包含的權限。會話sessions是用戶與激活的角色集合之間的映射。RBAC0與傳統訪問控制的差別在于增加一層間接性帶來了靈活性,RBAC1、RBAC2、RBAC3都是先后在RBAC0上的擴展。
b. RBAC1引入角色間的繼承關系,角色間的繼承關系可分為一般繼承關系和受限繼承關系。一般繼承關系僅要求角色繼承關系是一個絕對偏序關系,允許角色間的多繼承。而受限繼承關系則進一步要求角色繼承關系是一個樹結構。
c. RBAC2模型中添加了責任分離關系。RBAC2的約束規定了權限被賦予角色時,或角色被賦予用戶時,以及當用戶在某一時刻激活一個角色時所應遵循的強制性規則。責任分離包括靜態責任分離和動態責任分離。約束與用戶-角色-權限關系一起決定了RBAC2模型中用戶的訪問許可。
d. RBAC3包含了RBAC1和RBAC2,既提供了角色間的繼承關系,又提供了責任分離關系。
3核心對象模型設計
根據RBAC模型的權限設計思想,建立權限管理系統的核心對象模型。如圖2所示。
對象模型中包含的基本元素主要有:用戶(Users)、用戶組(Group)、角色(Role)、目標(Objects)、訪問模式(Access Mode)、操作(Operator)。主要的關系有:分配角色權限PA(Permission Assignment)、分配用戶角色UA(Users Assignmen描述如下:
a .控制對象:是系統所要保護的資源(Resource),可以被訪問的對象。資源的定義需要注意以下兩個問題:
1.資源具有層次關系和包含關系。例如,網頁是資源,網頁上的按鈕、文本框等對象也是資源,是網頁節點的子節點,如可以訪問按鈕,則必須能夠訪問頁面。
2.這里提及的資源概念是指資源的類別(Resource Class),不是某個特定資源的實例(Resource Instance)。資源的類別和資源的實例的區分,以及資源的粒度的細分,有利于確定權限管理系統和應用系統之間的管理邊界,權限管理系統需要對于資源的類別進行權限管理,而應用系統需要對特定資源的實例進行權限管理。兩者的區分主要是基于以下兩點考慮:
一方面,資源實例的權限常具有資源的相關性。即根據資源實例和訪問資源的主體之間的關聯關系,才可能進行資源的實例權限判斷。
例如,在管理信息系統中,需要按照營業區域劃分不同部門的客戶,A區和B區都具有修改客戶資料這一受控的資源,這里“客戶檔案資料”是屬于資源的類別的范疇。如果規定A區只能修改A區管理的客戶資料,就必須要區分出資料的歸屬,這里的資源是屬于資源實例的范疇。客戶檔案(資源)本身應該有其使用者的信息(客戶資料可能就含有營業區域這一屬性),才能區分特定資源的實例操作,可以修改屬于自己管轄的信息內容。
另一方面,資源的實例權限常具有相當大的業務邏輯相關性。對不同的業務邏輯,常常意味著完全不同的權限判定原則和策略。
b.權限:對受保護的資源操作的訪問許可(Access Permission),是綁定在特定的資源實例上的。對應地,訪問策略(Access Strategy)和資源類別相關,不同的資源類別可能采用不同的訪問模式(Access Mode)。例如,頁面具有能打開、不能打開的訪問模式,按鈕具有可用、不可用的訪問模式,文本編輯框具有可編輯、不可編輯的訪問模式。同一資源的訪問策略可能存在排斥和包含關系。例如,某個數據集的可修改訪問模式就包含了可查詢訪問模式。
c.用戶:是權限的擁有者或主體。用戶和權限實現分離,通過授權管理進行綁定。
d.用戶組:一組用戶的集合。在業務邏輯的判斷中,可以實現基于個人身份或組的身份進行判斷。系統弱化了用戶組的概念,主要實現用戶(個人的身份)的方式。
e.角色:權限分配的單位與載體。角色通過繼承關系支持分級的權限實現。例如,科長角色同時具有科長角色、科內不同業務人員角色。
f.操作:完成資源的類別和訪問策略之間的綁定。
g.分配角色權限PA:實現操作和角色之間的關聯關系映射。
h.分配用戶角色UA:實現用戶和角色之間的關聯關系映射。
該對象模型最終將訪問控制模型轉化為訪問矩陣形式。訪問矩陣中的行對應于用戶,列對應于操作,每個矩陣元素規定了相應的角色,對應于相應的目標被準予的訪問許可、實施行為。按訪問矩陣中的行看,是訪問能力表CL(Access Capabilities)的內容;按訪問矩陣中的列看,是訪問控制表ACL(Access Control Lists)的內容。
4 權限訪問機制
權限管理系統端:提供集中管理權限的服務,負責提供用戶的鑒別、用戶信息、組織結構信息,以及權限關系表的計算。如圖3所示。
圖3 權限的訪問示意圖
Fig.3 Privilege invoke
系統根據用戶,角色、操作、訪問策略和控制對象之間的關聯關系,同時考慮權限的正負向授予,計算出用戶的最小權限。在業務邏輯層采用Session Bean實現此服務,也可以發布成Web Service。采用代理Proxy模式,集中控制來自應用系統的所要訪問的權限計算服務,并返回權限關系表,即二元組{ObjectId,OperatorId}。
應用系統端:可以通過訪問能力表CL和訪問控制表ACL兩種可選的訪問方式訪問權限管理系統。以基于J2EE框架的應用系統為例,說明訪問過程:
a.首先采用基于表單的驗證,利用Servlet方式集中處理登錄請求[2]。考慮到需要鑒別的實體是用戶,采用基于ACL訪問方式。用戶登錄時調用權限管理系統的用戶鑒別服務,如果驗證成功,調用權限計算服務,并返回權限關系表,以HashMap的方式存放到登錄用戶的全局Session中;如果沒有全局的Session或者過期,則被導向到登錄頁面,重新獲取權限。
b.直接URL資源采用基于CL訪問方式進行的訪問控制。如果用戶直接輸入URL地址訪問頁面,有兩種方法控制訪問:1.通過權限標簽讀取CL進行控制;2.采取Filter模式,進行權限控制,如果沒有權限,則重定向到登錄頁面。
5 權限控制機制
權限所要控制的資源類別是根據應用系統的需要而定義的,具有的語義和控制規則也是應用系統提供的,對于權限管理系統來說是透明的,權限將不同應用系統的資源和操作統一對待。應用系統調用權限管理系統所獲得的權限關系表,也是需要應用系統來解釋的。按此設計,權限管理系統的通用性較強,權限的控制機制則由應用系統負責處理。
由于應用系統的權限控制與特定的技術環境有關,以基于J2EE架構的應用系統為例來說明,系統主要的展示組件是JSP頁面,采用標記庫和權限控制組件共同來實現。
a. 權限標識:利用標簽來標識不同級別資源,頁面權限標簽將標識頁面對象。
b. 權限注冊:遍歷JSP頁面上的權限控制標簽,讀取JSP的控制權限。通過權限注冊組件將JSP頁面上的權限控制對象以及規則注冊到權限管理信息系統中。
c. 權限控制:應用系統用戶登錄系統時,從權限管理系統獲得權限關系表之后,一方面,權限標簽控制頁面展示;另一方面,利用權限控制組件在業務邏輯中進行相應的權限控制,尤其是和業務邏輯緊密聯系的控制對象實例的權限控制。
6 權限存儲機制
權限管理系統采用了兩種可選的存儲機制:LDAP(Lightweight Directory Access Protocol)目錄服務數據庫和關系型數據庫。存儲用戶信息、組織結構、角色、操作、訪問模式等信息。
其中,目錄服務系統基于LDAP標準,具有廣泛的數據整合和共享能力。元目錄(Meta-Directory)功能允許快速、簡潔的與企業現存基礎結構進行集成,解決基于傳統RDBMS等用戶數據庫與LDAP用戶數據庫的同步問題。
7 結語
本文論述了一種基于RBAC模型的權限管理系統的實現技術方案。該權限管理系統已成功應用于系統的設計和開發實踐,與應用系統具有很好的集成。實踐表明,采用基于RBAC模型的權限具有以下優勢:權限分配直觀、容易理解,便于使用;擴展性好,支持崗位、權限多變的需求;分級權限適合分層的組織結構形式;重用性強。