何曉園
摘 要:該文介紹了一種基于角色的訪問控制機(jī)制,提供了資源訪問控制、用戶隔離以及等級劃分等通用功能,實(shí)現(xiàn)后可以作為一個模塊掛接到一個應(yīng)用系統(tǒng)當(dāng)中,該系統(tǒng)只需要調(diào)用其提供的API即可使用其功能,由于使用了面向?qū)ο蟮木幊谭绞剑渌泄δ芏荚谝粋€基類里面提供,開發(fā)人員可以通過繼承、派生的方式擴(kuò)充其功能。在實(shí)際應(yīng)用中驗(yàn)證了其具有通用性、較好的擴(kuò)展性以及較高的性能。
關(guān)鍵詞:角色 權(quán)限 訪問控制
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A 文章編號:1674-098X(2015)11(a)-0156-02
基于角色的訪問控制機(jī)制(RBAC:Role-Based Access Control)是目前較為常用的一種訪問權(quán)限控制機(jī)制,如ORACLE、SQL Server著名的系統(tǒng)都使用這種方式進(jìn)行訪問控制,權(quán)限與角色相關(guān)聯(lián),用戶通過扮演不同的角色從而獲得授予角色的權(quán)限,極大地簡化了權(quán)限的管理工作。這些機(jī)制通常都遵循最小授權(quán),責(zé)任分離和數(shù)據(jù)抽象這三個基本原則,并且具有很多相似的地方。該文介紹了一種RBAC機(jī)制,下文簡稱UPAC,實(shí)現(xiàn)了RBAC機(jī)制中大部分通用的功能,在實(shí)際應(yīng)用中可以把UPAC當(dāng)成一個架構(gòu)進(jìn)行擴(kuò)充,也可以直接使用其API進(jìn)行開發(fā)工作。使用UPAC的系統(tǒng)(下文簡稱調(diào)用系統(tǒng))只需要將UPAC作為一個模塊掛接到調(diào)用系統(tǒng)當(dāng)中,就可以使用其功能。
1 系統(tǒng)的構(gòu)成
UPAC主要由用戶、角色、對象、模塊和訪問權(quán)限這5個元素構(gòu)成,這些元素相互作用構(gòu)成一套完整的權(quán)限控制機(jī)制。
用戶是最小的授權(quán)單元,用戶具有賬號、密碼、域以及等級等基本屬性,在實(shí)際應(yīng)用中用戶的屬性可以由調(diào)用系統(tǒng)擴(kuò)充。系統(tǒng)的使用者,例如普通用戶和管理員等都是通過用戶的賬號獲得訪問系統(tǒng)的權(quán)限的。
2 訪問權(quán)限
在UPAC中,訪問權(quán)限只是被當(dāng)成一些整數(shù),其代表的實(shí)際意義由調(diào)用系統(tǒng)進(jìn)行解釋。訪問權(quán)限作用于模塊和對象這兩種訪問單元。UPAC負(fù)責(zé)獲取某個訪問單元的訪問權(quán)限值,然后將該值返回給調(diào)用系統(tǒng)。
UPAC的訪問權(quán)限是累加的關(guān)系,主要體現(xiàn)在兩個方面。
(1)角色與用戶:一個用戶所具有的權(quán)限為其本身被授予的權(quán)限加上其加入的所有角色的權(quán)限。
(2)模塊與對象:如果一個授權(quán)單元具有了一個模塊的某種訪問權(quán)限,那么該授權(quán)單元就具有了該模塊所有對象的相同的訪問權(quán)限,如果單獨(dú)再對這個授權(quán)單元進(jìn)行了模塊中的對象的授權(quán),那么該授權(quán)單元對該對象具有的訪問權(quán)限為其對模塊的訪問權(quán)限加上對該對象的訪問權(quán)限。
從文中可以看出,UPAC只是按照規(guī)則提供了為各種元素提供了相互之間的關(guān)聯(lián),并沒有對各個元素賦予任何的實(shí)際意義,這使得UPAC可以獨(dú)立于任何系統(tǒng),而調(diào)用系統(tǒng)由于不需要再處理這些元素之間的關(guān)系,簡化了其權(quán)限系統(tǒng)的設(shè)計(jì)。
3 用戶
在UPAC中用戶是訪問系統(tǒng)資源的唯一依據(jù),用戶登錄后,通過其本身授予的權(quán)限和其所加入的角色的所獲得的權(quán)限對系統(tǒng)資源進(jìn)行訪問。UPAC中用戶的基本屬性只有5個,如圖1所示。
賬號和密碼用于登錄,等級用于控制用戶等級的高低,域用于控制用戶相互之間的可見性。
需要注意的是,上面提到的系統(tǒng)資源的訪問權(quán)限與用戶等級之間沒有必然的聯(lián)系,等級高的用戶并不一定比等級低的用戶對某個資源具有更多的訪問權(quán)限,它們之間的關(guān)系由調(diào)用系統(tǒng)確定。
UPAC的用戶等級屬性是一個正整數(shù),數(shù)字越大表示等級越高,具體意義也由調(diào)用系統(tǒng)決定。例如為了簡單起見調(diào)用系統(tǒng)可以在實(shí)現(xiàn)中通過程序指定將所有的系統(tǒng)資源的所有訪問權(quán)限賦予等級為系統(tǒng)管理員的用戶,從而使得系統(tǒng)管理員不受RBAC規(guī)則的限制。
域?qū)傩灾付擞脩羲诘摹坝颉?,這個屬性用來控制用戶之間的可見性,域?qū)傩灾迪嗤挠脩籼幱谕粋€“域”中,他們相互之間是可見的,而處于不同的“域”之中的用戶,相互之間是不可見的。例如,在一個ERP系統(tǒng)中,財務(wù)部的部門的員工可以看到該部門中的所有員工,但是卻不能看到人事部的員工,就可以通過為這兩個部門的員工賦予不同的域?qū)傩詠磉M(jìn)行控制。
另外,等級和域?qū)傩钥梢韵嗷ソY(jié)合,以實(shí)現(xiàn)更多的功能,例如,要求部門經(jīng)理級別的用戶都可以看到整個企業(yè)所有的員工,盡管每個部門經(jīng)理的域?qū)傩远疾幌嗤谴藭r可以根據(jù)等級屬性來進(jìn)行控制。
ID是一個用戶在UPAC中的一個整數(shù)類型的唯一標(biāo)識符,由UPAC使用,對于調(diào)用系統(tǒng)不可見。使用ID的原因是由于整數(shù)檢索速度更快。
4 API
UPAC通過面向?qū)ο蟮姆椒▽?shí)現(xiàn),通過類的成員函數(shù)為調(diào)用系統(tǒng)提供了API,并且調(diào)用系統(tǒng)可以通過UPAC的基類派生出自己的子類,從而擴(kuò)充UPAC的功能。UPAC提供的API如表1所示。
其中HasModulePrivileges、GetModulePrivileges、HasObjectPrivileges和GetObjectPrivileges這四個函數(shù)會自動處理用戶所屬的角色的權(quán)限問題。
UPAC只提供了基本的API函數(shù),但是卻提供了RBAC的最常用的功能,使得調(diào)用系統(tǒng)不需要考慮RBAC中的最難處理的權(quán)限獲取的問題。
5 結(jié)語
UPAC定義了用戶、角色、模塊、對象和訪問權(quán)限等元素,實(shí)現(xiàn)了各元素之間的關(guān)系的處理、關(guān)系數(shù)據(jù)的保存和檢索功能,并且給調(diào)用系統(tǒng)提供了靈活的擴(kuò)展機(jī)制,調(diào)用系統(tǒng)只需要在UPAC的基礎(chǔ)上進(jìn)行少量的工作就可以實(shí)現(xiàn)一個個性化的RBAC機(jī)制。UPAC已經(jīng)在多個項(xiàng)目使用,驗(yàn)證了其具有較好的擴(kuò)展性、靈活性以及較高的性能。
參考文獻(xiàn)
[1] 李志英,黃強(qiáng),樓新遠(yuǎn),等.RBAC模型研究、改進(jìn)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2006,26(12):2945-2947.
[2] 唐守利.基于RBAC的粒度訪問控制模型研究[J].信息系統(tǒng)工程,2010(9):125,133.
[3] 梁澤梅,李蜀瑜.基于RBAC的兩級訪問控制模型[J].微型電腦應(yīng)用,2011,27(3):54-56.