李曉征
摘 要:基于角色的訪問控制是一種通常用于指派用戶適當角色的模型,它針對企業(yè)或組織的策略,授權(quán)用戶在管理信息系統(tǒng)(MIS)的使用權(quán)限。本文描述用戶(User)-角色(Role)-權(quán)限(Permission)在管理信息系統(tǒng)權(quán)限管理的要素,講解關(guān)于基于角色的訪問控制(RBAC)模型,并以C#.NET代碼為實例,提出實現(xiàn)模型的方法。
關(guān)鍵詞:RBAC 角色 權(quán)限 C#.NET
中圖分類號:G203 文獻標識碼:B 文章編號:1673-8454(2009)19-0042-02
一、RBAC基本概念和模型
基于角色的訪問控制(Role-Based Access Control,簡稱RBAC)已經(jīng)成為解決管理信息系統(tǒng)的統(tǒng)一資源訪問控制的有效方法,它替代了傳統(tǒng)的自主型訪問控制和強制訪問控制方法。在RBAC中,權(quán)限與角色,角色與用戶之間通過聯(lián)結(jié)的關(guān)系,從而產(chǎn)生用戶的權(quán)限。這極大地簡化了系統(tǒng)的管理權(quán)限。RBAC兩大特征是:減小授權(quán)管理的復雜性,降低管理開銷;靈活地支持企業(yè)或組織的安全策略,并對系統(tǒng)的變化有很大的伸縮性。
信息系統(tǒng)中的用戶、角色、權(quán)限及系統(tǒng)資源的基本概念如下:
(1)用戶(User):與角色相關(guān),用戶要擁有對某種資源的權(quán)限,必須通過角色去關(guān)聯(lián)。
(2)角色(Role):可以操作某些資源的權(quán)限集合。通過給用戶賦予不同的角色,對成員的多職能進行表達,提供約束用戶不同權(quán)限范圍的依據(jù)。角色作為用戶與權(quán)限的代理層,定義權(quán)限和用戶的關(guān)系,所有的授權(quán)應該給予角色而不是直接給用戶。
(3)權(quán)限(Permission):是指與資源相聯(lián)系的權(quán)限。權(quán)限是綁定在特定的資源實例上的,比如在內(nèi)容管理系統(tǒng)(CMS),有“文章的發(fā)布權(quán)限”,這就表明,該權(quán)限是一個發(fā)布權(quán)限,而且是針對文章這種資源的一種發(fā)布權(quán)限。權(quán)限包括系統(tǒng)定義權(quán)限和用戶自定義權(quán)限。用戶自定義權(quán)限之間可以指定排斥和包含關(guān)系(如:發(fā)布、修改、刪除、管理四個權(quán)限,管理權(quán)限包含前三種權(quán)限)。
(4)資源(Resource):就是信息系統(tǒng)的資源,比如新聞、文檔等各種可以被提供給用戶訪問的對象。系統(tǒng)資源是一個樹形的結(jié)構(gòu),任何一個節(jié)點都是一個資源,一個資源節(jié)點可以與若干指定權(quán)限類別相關(guān),可定義是否將其權(quán)限應用于子節(jié)點。
如圖1所示,通過一定的約束關(guān)系及用戶的角色定義、角色的權(quán)限賦值,實現(xiàn)用戶對數(shù)據(jù)和資源的訪問權(quán)限。一個用戶是一個人或一個自治的代理(agent),一個角色是一項在組織中的工作功能或工作頭銜。而權(quán)限是對系統(tǒng)中一個或多個對象(object)的特定訪問模式的許可或執(zhí)行某些動作的特權(quán)。如果x≥y,那么角色x就繼承了角色y的權(quán)限,x的成員也意味著是y的成員。每次會話(session)把一個用戶和可能的許多角色聯(lián)系起來。一個用戶可以有一個或多個角色,一個角色可以有許多用戶。類似地,一個角色可以有多個權(quán)限,同一個權(quán)限可以被指派給多個角色。每個會話把一個用戶和可能的許多角色聯(lián)系起來,一個用戶在激發(fā)他或她所屬角色的某些子集時,建立了一個會話,用戶可用的權(quán)限是當前會話激發(fā)的所有角色權(quán)限的并集。每個會話和單個用戶關(guān)聯(lián),這個關(guān)聯(lián)在會話的生命期間保持常數(shù)。一個用戶在同一時間可以打開多個會話,每個會話可以有不同的活動角色。會話的概念相當于傳統(tǒng)的訪問控制中主體(subject)的標記。
二、RBAC模型的數(shù)據(jù)庫表設計
通過對RBAC模型的分析,可以知道RBAC引入了角色的概念,使得用戶和權(quán)限分離,從而減少了權(quán)限管理的復雜度,可更加靈活地支持安全策略。同時,我們引入資源(Resource)概念,可以對權(quán)限進行分門別類,一個資源可以對應多個權(quán)限。
在數(shù)據(jù)庫表設計中,我們總共引入了六個表(如圖2 所示E-R圖)和一個視圖,分別是用戶表、角色表、權(quán)限表、資源表、用戶-角色表、角色-權(quán)限表及用戶-角色-權(quán)限視圖。
(1)用戶表(User):保存用戶基本信息,包括用戶編號(主鍵pkid),用戶名稱,用戶密碼,用戶所在部門等其他信息。
(2)角色表(Role):保存角色編號(主鍵pkid),角色名稱,角色說明等信息。
(3)權(quán)限表(Permission):保存權(quán)限編號(主鍵pkid),權(quán)限名稱,權(quán)限說明,權(quán)限所在資源等信息。
(4)資源表(Resource):保存資源名稱(主鍵pkid),資源名稱等信息。
(5)用戶-角色表(User_Role):保存角色編號,角色編號,這兩個字段作為表的主鍵。
(6)角色-權(quán)限表(Role_Permission):保存角色編號,權(quán)限編號,這兩個字段作為表的主鍵。
(7)用戶-角色-權(quán)限 (View_U_R_P)視圖:創(chuàng)建視圖是為了提高表之間的聯(lián)結(jié)查詢效率,視圖里的一條記錄反映了一個用戶所對應的一個權(quán)限,當用戶的角色發(fā)生改變時,他所對應的權(quán)限也發(fā)生改變。
創(chuàng)建視圖View_U_R_P的SQL代碼:
CREATE VIEW View_R_U_P
AS
SELECTrole.pkid, role.name, user_role.user_pkid, role_ permission.role_pkid, permission.name AS permission_name, role.name AS role_name, permission.resource_pkid, permission.pkid AS permission_pkid, role_permission.permission_range
FROMrole INNER JOIN role_permission ON role.pkid = role_permission.role_pkid INNER JOIN
user_role ON role.pkid=user_role.role_pkid INNER JOIN
permission ON role_permission.permission_pkid = permission.pkid
三、利用C#.NET實現(xiàn)信息管理系統(tǒng)的權(quán)限控制
通過對RBAC的模型分析和數(shù)據(jù)表定義,我們?nèi)菀椎玫綄τ脩舨僮鳈?quán)限進行判斷的方法。用戶在對信息系統(tǒng)的某個功能模塊操作時,首先獲取該功能模塊所對應的權(quán)限編號(permission_pkid)和用戶登錄系統(tǒng)時創(chuàng)建會話(Session)的user_pkid,利用這兩個值判斷用戶是否有權(quán)限操作。下面我們以判斷用戶是否有權(quán)限刪除新聞為實例,利用C#.NET實現(xiàn)一個簡單的權(quán)限控制。在用戶點擊“刪除新聞”按鈕時,我們觸發(fā)服務端控件的事件(Event):
protected void ButtonDelete_Click(object sender, EventArgs e)
{
//判斷是否有刪除新聞權(quán)限
String permission_pkid = "10";//假設刪除新聞所對應的permission_pkid為10
String user_pkid = Session[“user_pkid”].ToString;//獲取用戶登錄后的Session中的user_pkid值
bool have_permission = Sql.PubClass.CheckSQL("select * from View_U_R_P where user_pkid=" + user_pkid + " and permission_pkid=" + permission _pkid);
if (have_permission == false)
{
Response.Write(“”);//彈出提示沒有權(quán)限的對話框
}else
{
//刪除新聞操作,代碼略去。
}
}
在以上代碼中,CheckSQL是數(shù)據(jù)庫操作類SQL.PubClass中的一個成員函數(shù),通過數(shù)據(jù)訪問的封裝,很大程度上簡化了信息系統(tǒng)編程代碼。函數(shù)CheckSQL返回的是布爾值(boolean),通過傳入sql查詢語句,判斷是否有
獲取到值,如果有則返回值為true,否則為 false。
四、結(jié)束語
本文就RBAC的模型進行分析,提出簡單實現(xiàn)模型控制的方法。又因權(quán)限設計必須考慮多方面的要求,比如角色的繼承、權(quán)限的互斥等,所以在模型中引入了限制(Constraints),實現(xiàn)一套完整的權(quán)限設計方法。
參考文獻:
[1]Sandhu R S, Coyne E J, Feinstein H L, et al. Role-based access control models[J].IEEE Computer,1996,29(2):38-47.
[2]Dongwan Shin,Gail-Joon Ahn: Role-based privilege and trust management. Number 6,November 2005.
[3]賈愛華,陳定方.NET平臺下基于RBAC模型的用戶權(quán)限控制[J].湖北工業(yè)大學學報,2008(6).
(編輯:金冉)