摘 要 應用Windows系統 .Net Framework 開發平臺,采用自定義屬性、類型及反射等技術,通過對不同應用系統的資源ID生成、訪問方式,以及資源樹訪問接口的定義,給出一套簡潔、實用的基于角色的用戶權限管理系統的通用平臺設計方案。
關鍵詞 權限管理;角色;反射;自定義屬性
計算機技術安全管理的范圍很廣,可以包括網絡安全性、數據安全性、操作系統安全性以及應用程序安全性等。對一個多用戶商用應用系統而言,系統的安全訪問控制是必須的,系統不僅要滿足功能性需求,還要滿足安全性需求。系統的安全訪問控制一般是通過用戶認證和用戶權限管理來實現。權限管理可簡單表述為:判斷“Who對What(Which)進行How的操作”的邏輯表達式是否為真。各類應用系統的整個體系結構上要設計一個安全可靠、配置靈活、易擴展的安全控制模塊,它主要有兩部分內容:用戶認證和用戶權限管理。目前大致有三種安全模型:訪問矩陣、基于角色的訪問控制(RBAC-Role based access control)模型和多級模型。其中基于角色的訪問控制模型得到了日益廣泛的應用。
1 基于角色的用戶權限管理系統(RBAC)基本理論[1][2]
RBAC是目前公認的解決大型企業的統一資源訪問控制的有效方法。其顯著的兩大特征是:一是減小授權管理的復雜性,降低管理開銷;二是靈活地支持企業的安全策略,并對企業的變化有很大的伸縮性。
資源是應用系統中被管理、控制的對象,資源是權限管理的最小單位,資源的抽象要結合實際的需要確定粒度大小。
權限是對具體資源的訪問許可。權限和資源密不可分,在這里,權限可以用一個二元組來表示(R,A),其中,R表示資源,A表示訪問方式。
角色是指一個組織或任務中的工作或位置,它代表了一種資格、權利和責任。
用戶就是一個可以獨立訪問應用系統中的資源的主體。用戶在一般情況下是指應用系的使用者。
RBAC中只對角色分配資源的訪問權限,從另一個角度說,角色是權限的某種組合。用戶可以具有一個或多個角色,但不能直接對用戶分配權限。角色的權限相對穩定,而用戶容易變化,RBAC通過角色實現用戶與權限的分離,增加了權限分配和管理的方便性和靈活性。
以上是RBAC的基本概念,下面結合Windows .Net Framework平臺,給出一套簡潔、實用的RBAC權限管理系統的設計方案。
2 .Net Framework新特性的應用[2]
2.1 類型(Type)信息
Type位于.Type實際上是一個抽象基類,它有與每一種數據類型相對應的派生類。通過運行時獲取Type派生類的實例,可能獲取相應數據類型的所有信息。
2.2 自定義屬性(Attribute)
傳統編程語言如 C++,都提供了關鍵字(如 public 、private等)。這些關鍵字提供有關類成員的附加信息,還通過描述類成員對其他類的可訪問性來進一步定義類成員的行為。由于編譯器被顯式設計為識別預定義關鍵字,編程者無法創建自己的關鍵字。
但在.Net Framework中,公共語言運行庫CLR(Common Language Library )允許編程者添加類似關鍵字的描述性聲明(稱為屬性)來批注編程元素,如類型、字段、方法和屬性等。
編程者可以聲明從 System.Attribute 派生的自定義屬性類,用來存儲特定的描述信息。
3 通用RBAC權限管理系統的設計
各個通常的應用軟件系統中,除了需進行安全訪問控制的資源各不相同外,其它如用戶及角色的管理,角色的權限分配等基本相同,如果能對不同應用系統的資源抽象出相同的描述和訪問接口,自然就能實現一套通用的權限管理系統。
3.1 設計目標與主要功能
系統的基本設計目標是,通過統一定義的應用系統資源樹接口定義,實現應用系統無關的通用RBAC管理系統,如圖1所示,應用系統通過統一定義的資源及其訪問方式接口與權限管理系統平臺進行交互。
本系統主要有以下功能:
- 用戶管理:用戶的編輯、角色分配及用戶認證等;
- 角色管理:角色的編輯、權限分配等;
- 資源及權限管理:應用系統資源及訪問方式以及權限的定義等;
- 安全訪問控制:判別登錄用戶是否具備對特定資源的訪問權限。
圖1 權限管理平臺體系結構
3.2 應用系統的資源
資源是對應用系統中要進行安全訪問控制的對象的抽象。依據應用對象類別的不同,資源也相應分為不同的資源類。
3.2.1 資源的唯一標示
本系統設計采用64位的資源ID(ResourceID)來唯一標示系統的一個資源對象。應用系統需自定義一套完整的資源ID編碼規則,對要安全訪問控制的每一個對象,根據編碼規則可得出一個資源ID。資源ID推薦采用分層設計,如可分為三個層次:應用模塊ID-對象類別ID-對象ID。
由于可由應用系統對象得到相應的資源ID,本系統的數據庫中不再需要單獨建立資源與應用系統對象的映射表,這是本系統設計的一個創新之處。
3.2.2 資源的訪問方式
用戶對系統的不同資源通常有特定的訪問方式,如對文件的訪問方式有“讀”、“寫”、“執行”等。這里將對資源訪問方式設計為可以按位組合的枚舉量([FlagsAttribute]標示),基本數據類型為32位整數,即對一種資源總共可表示32種不同的訪問方式。每個枚舉值還帶有自定義的屬性(Attributes)。以下是文件的訪問方式枚舉量定義的示例代碼(C#):
[FlagsAttribute] public Enum File_AccessMode { [DisNameAttribute(“讀”)] Read = 0x01, [DisNameAttribute(“寫”)] Write = 0x02, [DisNameAttribute(“執行”)] Execute, } |
由于訪問方式可以按位組合,組合訪問方式的表示被大大簡化。如對文件的“讀”與“寫”的組合訪問方式可以簡記為:
File_AccessMode m= File_AccessMode.Read | File_AccessMode.Write; |
自定義屬性“DisNameAttribute”給出枚舉值的顯示名稱,示例定義參見下面的代碼(C#):
[AttributeUsage(AttributeTargets.All, AllowMultiple = false)] public class DisNameAttribute : Attribute { public DisNameAttribute(string name) { this.name = name; private string name; public string Name { get { return name; } } } |
不同應用系統需在代碼中自定義各自系統內所有資源類別的訪問方式枚舉類型,本系統的數據庫同樣不需定義和存儲各類資源訪問方式表,這是本系統簡化設計的核心。
3.2.3 資源及其訪問方式接口
為了統一對各個不同應用系統資源的訪問,本系統采用分層組織的樹形結構來描述應用系統的資源,UML類視圖如圖2所示。
圖2 應用系統資源及訪問方式接口定義
其中類ResourceTree為資源樹,代表應用系統所有資源的集合,它包含ResourceNode的鏈表Nodes; 類ResourceNode是資源樹的節點,代表一個具體的資源,ResourceNode同樣可包含多個ResourceNode,ResourceNode的屬性ID返回相應資源的ResourceID。
由于資源訪問方式枚舉量的定義各不相同,如何以統一的接口方式獲取不同資源的訪問方式是本平臺設計的一個難點。這里采用屬性AccessType統一返回資源訪問方式枚舉量的類型(Type)對象。通過下列代碼可以得到訪問方式枚舉量的所有信息(C#):
Type t =resourceNode.AccessModeType; FieldInfo[] fs=t.GetFields(BindingFlags.DeclaredOnly| Binding Flags.Static|BindingFlags.Public); int[] enumVals =new int[fs.Length]; string[] enumNames= new string[fs.Length]; int i =0; foreach(FieldInfo f in fs) { enumVals[i]=f.GetValue(null); DisNameAttribute[] ds=f.GetCustomAttribute(typeof(DisNameAttribute),false); If(ds.Length != 0) enumNames[I]=ds[0].Name; } |
上述代碼中,enumVals數組中存儲了所有訪問方式的枚舉值,enumNames數據組中存儲了各個訪問方式的顯示用名稱。
3.3 訪問權限
權限是指用戶對具體資源的訪問許可,權限和資源密不可分。這里權限用一個二元組來表示:
Permission(Resource,AccessMode)
其中Resource表示一個具體資源,AccessMode是用戶對此資源的所授權的訪問方式。需注意的是,由于AccessMode設計成可按位組合,所以此二元組表示了用戶對一個資源的所有訪問權限。
3.4 角色
角色可由系統管理員或授權用戶靈活定制。角色具有唯一且不重用的ID。
3.4.1 角色的組織
角色之間采用組合關系,一個角色可以包含其它多個角色,一個角色的權限是它本身及其所包含的其它角色所擁有的權限的集合。
3.4.2 角色表
Role_Table
角色的所有相關信息均記錄到數據庫中的角色表Role_Table。
3.5 角色的權限分配
權限分配是指為角色配置某種權限?梢杂萌M(Role,Resource,AccessMode)表示,即Role角色對Resource資源可以進行AccessMode的操作。
3.5.1 角色權限關聯表
RolePermission_Table
角色的所有授權信息均存儲到角色權限關聯表RolePerssion_Table。
3.6 用戶
用戶可由系統管理員或授權用戶靈活增刪。用戶具有唯一且不重用的ID。
3.6.1 用戶的組織
各個用戶相互獨立,不存在繼承或組合關系。
3.6.2 用戶表
User_Table
用戶的所有相關信息均記錄到數據庫中的用戶表User_Table。
3.7 用戶的角色委派
角色委派是指為用戶分配若干種角色?梢杂枚M(User,Role)表示,含義是User用戶屬于角色Role。一個用戶可以屬于多個角色。
3.7.1 用戶角色關聯表
UserRole_Table
用戶與角色的所有關聯信息均記錄到數據庫的用戶角色關聯表UserRole_Table。
4 系統運行模型
4.1 用戶認證
使用應用系統的用戶首先要進行用戶登錄,登錄成功后,結合UserRole_Table及RolePerssion_Table查詢當前用戶對所有資源的訪問權限,根據返回結果在動態生成此用戶對資源的所有權限表:
UserPermission_Table
其中AccessMode的值是用戶所屬的多個角色對某一資源的所有訪問方式的組合。
4.2 安全訪問控制
當用戶要對一個需安全訪問控制的對象操作時,首先根據應用系統自定義的資源ID編碼規則及訪問對象的相關信息生成ResourceID,和應用系統定義的對此對象進行操作所需的訪問權限accessMode,再查找UserPermission_Table表,判別當前用戶是否具有相應的操作權限。
5 結論
本文結合.Net Framework開發平臺提供的新特性,給出了一套基于RBAC通用的普通應用系統權限管理的設計方案,本設計結構簡潔、實用,并有較高的靈活性,滿足普通應用系統對安全訪問控制的需要。
參考文獻:
[1] Sandhu R. ,Coyne E. J . ,Feinstein H. L. et al . Role - Based access control models[J ] . IEEE Computer ,1996 ,29 (2) :38 - 47.
[2] 湯鵬翔,一種實用的基于角色訪問控制系統設計與實現。計算機應用,2002.22(12):41-43
[3] Julian Fempleman, David Vitter. Visual Studio .Net Framework Black Book[M]. 北京:水利出版社, 2003.
文章來源于領測軟件測試網 http://www.kjueaiud.com/