RBAC權(quán)限模型_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
權(quán)限系統(tǒng)與RBAC模型概述
RBAC(Role-Based Access Control )基于角色的訪(fǎng)問(wèn)控制。
在20世紀(jì)90年代期間,大量的專(zhuān)家學(xué)者和專(zhuān)門(mén)研究單位對(duì)RBAC的概念進(jìn)行了深入研究,先后提出了許多類(lèi)型的RBAC模型,其中以美國(guó)George Mason大學(xué)信息安全技術(shù)實(shí)驗(yàn)室(LIST)提出的RBAC96模型最具有系統(tǒng)性,得到普遍的公認(rèn)。
RBAC認(rèn)為權(quán)限的過(guò)程可以抽象概括為:判斷【W(wǎng)ho是否可以對(duì)What進(jìn)行How的訪(fǎng)問(wèn)操作(Operator)】這個(gè)邏輯表達(dá)式的值是否為T(mén)rue的求解過(guò)程。
即將權(quán)限問(wèn)題轉(zhuǎn)換為Who、What、How的問(wèn)題。who、what、how構(gòu)成了訪(fǎng)問(wèn)權(quán)限三元組。
RBAC支持公認(rèn)的安全原則:最小特權(quán)原則、責(zé)任分離原則和數(shù)據(jù)抽象原則。
- 最小特權(quán)原則得到支持,是因?yàn)樵赗BAC模型中可以通過(guò)限制分配給角色權(quán)限的多少和大小來(lái)實(shí)現(xiàn),分配給與某用戶(hù)對(duì)應(yīng)的角色的權(quán)限只要不超過(guò)該用戶(hù)完成其任務(wù)的需要就可以了。
- 責(zé)任分離原則的實(shí)現(xiàn),是因?yàn)樵赗BAC模型中可以通過(guò)在完成敏感任務(wù)過(guò)程中分配兩個(gè)責(zé)任上互相約束的兩個(gè)角色來(lái)實(shí)現(xiàn),例如在清查賬目時(shí),只需要設(shè)置財(cái)務(wù)管理員和會(huì)計(jì)兩個(gè)角色參加就可以了。
- 數(shù)據(jù)抽象是借助于抽象許可權(quán)這樣的概念實(shí)現(xiàn)的,如在賬目管理活動(dòng)中,可以使用信用、借方等抽象許可權(quán),而不是使用操作系統(tǒng)提供的讀、寫(xiě)、執(zhí)行等具體的許可權(quán)。但RBAC并不強(qiáng)迫實(shí)現(xiàn)這些原則,安全管理員可以允許配置RBAC模型使它不支持這些原則。因此,RBAC支持?jǐn)?shù)據(jù)抽象的程度與RBAC模型的實(shí)現(xiàn)細(xì)節(jié)有關(guān)。
RBAC96是一個(gè)模型族,其中包括RBAC0~RBAC3四個(gè)概念性模型。
1、基本模型RBAC0定義了完全支持RBAC概念的任何系統(tǒng)的最低需求。
2、RBAC1和RBAC2兩者都包含RBAC0,但各自都增加了獨(dú)立的特點(diǎn),它們被稱(chēng)為高級(jí)模型。
RBAC1中增加了角色分級(jí)的概念,一個(gè)角色可以從另一個(gè)角色繼承許可權(quán)。
RBAC2中增加了一些限制,強(qiáng)調(diào)在RBAC的不同組件中在配置方面的一些限制。
3、RBAC3稱(chēng)為統(tǒng)一模型,它包含了RBAC1和RBAC2,利用傳遞性,也把RBAC0包括在內(nèi)。這些模型構(gòu)成了RBAC96模型族。
RBAC模型簡(jiǎn)述
RBAC0的模型中包括用戶(hù)(U)、角色(R)和許可權(quán)(P)等3類(lèi)實(shí)體集合。
RABC0權(quán)限管理的核心部分,其他的版本都是建立在0的基礎(chǔ)上的,看一下類(lèi)圖:
RBAC0定義了能構(gòu)成一個(gè)RBAC控制系統(tǒng)的最小的元素集合。
在RBAC之中,包含用戶(hù)users(USERS)、角色roles(ROLES)、目標(biāo)objects(OBS)、操作operations(OPS)、許可權(quán)permissions(PRMS)五個(gè)基本數(shù)據(jù)元素,此模型指明用戶(hù)、角色、訪(fǎng)問(wèn)權(quán)限和會(huì)話(huà)之間的關(guān)系。
每個(gè)角色至少具備一個(gè)權(quán)限,每個(gè)用戶(hù)至少扮演一個(gè)角色;可以對(duì)兩個(gè)完全不同的角色分配完全相同的訪(fǎng)問(wèn)權(quán)限;會(huì)話(huà)由用戶(hù)控制,一個(gè)用戶(hù)可以創(chuàng)建會(huì)話(huà)并激活多個(gè)用戶(hù)角色,從而獲取相應(yīng)的訪(fǎng)問(wèn)權(quán)限,用戶(hù)可以在會(huì)話(huà)中更改激活角色,并且用戶(hù)可以主動(dòng)結(jié)束一個(gè)會(huì)話(huà)。
用戶(hù)和角色是多對(duì)多的關(guān)系,表示一個(gè)用戶(hù)在不同的場(chǎng)景下可以擁有不同的角色。
例如項(xiàng)目經(jīng)理也可以是項(xiàng)目架構(gòu)師等;當(dāng)然了一個(gè)角色可以給多個(gè)用戶(hù),例如一個(gè)項(xiàng)目中有多個(gè)組長(zhǎng),多個(gè)組員等。
這里需要提出的是,將用戶(hù)和許可進(jìn)行分離,是彼此相互獨(dú)立,使權(quán)限的授權(quán)認(rèn)證更加靈活。
角色和許可(權(quán)限)是多對(duì)多的關(guān)系,表示角色可以擁有多分權(quán)利,同一個(gè)權(quán)利可以授給多個(gè)角色都是非常容易理解的,想想現(xiàn)實(shí)生活中,當(dāng)官的級(jí)別不同的權(quán)限的情景,其實(shí)這個(gè)模型就是對(duì)權(quán)限這方面的一個(gè)抽象,聯(lián)系生活理解就非常容易了。
RBAC1,基于RBAC0模型,引入角色間的繼承關(guān)系,即角色上有了上下級(jí)的區(qū)別,角色間的繼承關(guān)系可分為一般繼承關(guān)系和受限繼承關(guān)系。一般繼承關(guān)系僅要求角色繼承關(guān)系是一個(gè)絕對(duì)偏序關(guān)系,允許角色間的多繼承。而受限繼承關(guān)系則進(jìn)一步要求角色繼承關(guān)系是一個(gè)樹(shù)結(jié)構(gòu),實(shí)現(xiàn)角色間的單繼承。
這種模型合適于角色之間的層次明確,包含明確。
RBAC2,基于RBAC0模型的基礎(chǔ)上,進(jìn)行了角色的訪(fǎng)問(wèn)控制。
RBAC2模型中添加了責(zé)任分離關(guān)系。RBAC2的約束規(guī)定了權(quán)限被賦予角色時(shí),或角色被賦予用戶(hù)時(shí),以及當(dāng)用戶(hù)在某一時(shí)刻激活一個(gè)角色時(shí)所應(yīng)遵循的強(qiáng)制性規(guī)則。責(zé)任分離包括靜態(tài)責(zé)任分離和動(dòng)態(tài)責(zé)任分離。約束與用戶(hù)-角色-權(quán)限關(guān)系一起決定了RBAC2模型中用戶(hù)的訪(fǎng)問(wèn)許可,此約束有多種。
- 互斥角色 :同一用戶(hù)只能分配到一組互斥角色集合中至多一個(gè)角色,支持責(zé)任分離的原則?;コ饨巧侵父髯詸?quán)限互相制約的兩個(gè)角色。對(duì)于這類(lèi)角色一個(gè)用戶(hù)在某一次活動(dòng)中只能被分配其中的一個(gè)角色,不能同時(shí)獲得兩個(gè)角色的使用權(quán)。常舉的例子:在審計(jì)活動(dòng)中,一個(gè)角色不能同時(shí)被指派給會(huì)計(jì)角色和審計(jì)員角色。
- 基數(shù)約束 :一個(gè)角色被分配的用戶(hù)數(shù)量受限;一個(gè)用戶(hù)可擁有的角色數(shù)目受限;同樣一個(gè)角色對(duì)應(yīng)的訪(fǎng)問(wèn)權(quán)限數(shù)目也應(yīng)受限,以控制高級(jí)權(quán)限在系統(tǒng)中的分配。例如公司的領(lǐng)導(dǎo)人有限的;
- 先決條件角色 :可以分配角色給用戶(hù)僅當(dāng)該用戶(hù)已經(jīng)是另一角色的成員;對(duì)應(yīng)的可以分配訪(fǎng)問(wèn)權(quán)限給角色,僅當(dāng)該角色已經(jīng)擁有另一種訪(fǎng)問(wèn)權(quán)限。指要想獲得較高的權(quán)限,要首先擁有低一級(jí)的權(quán)限。就像我們生活中,國(guó)家主席是從副主席中選舉的一樣。
- 運(yùn)行時(shí)互斥 :例如,允許一個(gè)用戶(hù)具有兩個(gè)角色的成員資格,但在運(yùn)行中不可同時(shí)激活這兩個(gè)角色。
RBAC3,也就是最全面級(jí)的權(quán)限管理,它是基于RBAC0的基礎(chǔ)上,將RBAC1和RBAC2進(jìn)行整合了,最前面,也最復(fù)雜的:
綜上為權(quán)限管理模型的相關(guān)介紹,其實(shí)在任何系統(tǒng)中都會(huì)涉及到權(quán)限管理的模塊,無(wú)論復(fù)雜簡(jiǎn)單,我們都可以通過(guò)以RBAC模型為基礎(chǔ),進(jìn)行相關(guān)靈活運(yùn)用來(lái)解決我們的問(wèn)題。
RBAC的優(yōu)缺點(diǎn)
RBAC模型沒(méi)有提供操作順序控制機(jī)制。這一缺陷使得RBAC模型很難應(yīng)用關(guān)于那些要求有嚴(yán)格操作次序的實(shí)體系統(tǒng)。
例如,在購(gòu)物控制系統(tǒng)中要求系統(tǒng)對(duì)購(gòu)買(mǎi)步驟的控制,在客戶(hù)未付款之前不應(yīng)讓他把商品拿走。RBAC模型要求把這種控制機(jī)制放到模型
2. 實(shí)用的RBAC模型的數(shù)據(jù)庫(kù)建模
1、擴(kuò)展RBAC用戶(hù)角色權(quán)限設(shè)計(jì)方案
RBAC(Role-Based Access Control,基于角色的訪(fǎng)問(wèn)控制),就是用戶(hù)通過(guò)角色與權(quán)限進(jìn)行關(guān)聯(lián)。簡(jiǎn)單地說(shuō),一個(gè)用戶(hù)擁有若干角色,每一個(gè)角色擁有若干權(quán)限。這樣,就構(gòu)造成“用戶(hù)-角色-權(quán)限”的授權(quán)模型。在這種模型中,用戶(hù)與角色之間,角色與權(quán)限之間,一般者是多對(duì)多的關(guān)系。(如下圖)
角色是什么?可以理解為一定數(shù)量的權(quán)限的集合,權(quán)限的載體。例如:一個(gè)論壇系統(tǒng),“超級(jí)管理員”、“版主”都是角色。版主可管理版內(nèi)的帖子、可管理版內(nèi)的用戶(hù)等,這些是權(quán)限。要給某個(gè)用戶(hù)授予這些權(quán)限,不需要直接將權(quán)限授予用戶(hù),可將“版主”這個(gè)角色賦予該用戶(hù)。
當(dāng)用戶(hù)的數(shù)量非常大時(shí),要給系統(tǒng)每個(gè)用戶(hù)逐一授權(quán)(授角色),是件非常煩瑣的事情。這時(shí),就需要給用戶(hù)分組,每個(gè)用戶(hù)組內(nèi)有多個(gè)用戶(hù)。除了可給用戶(hù)授權(quán)外,還可以給用戶(hù)組授權(quán)。這樣一來(lái),用戶(hù)擁有的所有權(quán)限,就是用戶(hù)個(gè)人擁有的權(quán)限與該用戶(hù)所在用戶(hù)組擁有的權(quán)限之和。(下圖為用戶(hù)組、用戶(hù)與角色三者的關(guān)聯(lián)關(guān)系)
在應(yīng)用系統(tǒng)中,權(quán)限表現(xiàn)成什么?對(duì)功能模塊的操作,對(duì)上傳文件的刪改,菜單的訪(fǎng)問(wèn),甚至頁(yè)面上某個(gè)按鈕、某個(gè)圖片的可見(jiàn)性控制,都可屬于權(quán)限的范疇。有些權(quán)限設(shè)計(jì),會(huì)把功能操作作為一類(lèi),而把文件、菜單、頁(yè)面元素等作為另一類(lèi),這樣構(gòu)成“用戶(hù)-角色-權(quán)限-資源”的授權(quán)模型。而在做數(shù)據(jù)表建模時(shí),可把功能操作和資源統(tǒng)一管理,也就是都直接與權(quán)限表進(jìn)行關(guān)聯(lián),這樣可能更具便捷性和易擴(kuò)展性。(見(jiàn)下圖)
請(qǐng)留意權(quán)限表中有一列“權(quán)限類(lèi)型”,我們根據(jù)它的取值來(lái)區(qū)分是哪一類(lèi)權(quán)限,如“MENU”表示菜單的訪(fǎng)問(wèn)權(quán)限、“OPERATION”表示功能模塊的操作權(quán)限、“FILE”表示文件的修改權(quán)限、“ELEMENT”表示頁(yè)面元素的可見(jiàn)性控制等。 這樣設(shè)計(jì)的好處有二。其一,不需要區(qū)分哪些是權(quán)限操作,哪些是資源,(實(shí)際上,有時(shí)候也不好區(qū)分,如菜單,把它理解為資源呢還是功能模塊權(quán)限呢?)。其二,方便擴(kuò)展,當(dāng)系統(tǒng)要對(duì)新的東西進(jìn)行權(quán)限控制時(shí),我只需要建立一個(gè)新的關(guān)聯(lián)表“權(quán)限XX關(guān)聯(lián)表”,并確定這類(lèi)權(quán)限的權(quán)限類(lèi)型字符串。
這里要注意的是,權(quán)限表與權(quán)限菜單關(guān)聯(lián)表、權(quán)限菜單關(guān)聯(lián)表與菜單表都是一對(duì)一的關(guān)系。(文件、頁(yè)面權(quán)限點(diǎn)、功能操作等同理)。也就是每添加一個(gè)菜單,就得同時(shí)往這三個(gè)表中各插入一條記錄。這樣,可以不需要權(quán)限菜單關(guān)聯(lián)表,讓權(quán)限表與菜單表直接關(guān)聯(lián),此時(shí),須在權(quán)限表中新增一列用來(lái)保存菜單的ID,權(quán)限表通過(guò)“權(quán)限類(lèi)型”和這個(gè)ID來(lái)區(qū)分是種類(lèi)型下的哪條記錄。
到這里,RBAC權(quán)限模型的擴(kuò)展模型的完整設(shè)計(jì)圖如下:
隨著系統(tǒng)的日益龐大,為了方便管理,可引入角色組對(duì)角色進(jìn)行分類(lèi)管理,跟用戶(hù)組不同,角色組不參與授權(quán)。例如:某電網(wǎng)系統(tǒng)的權(quán)限管理模塊中,角色就是掛在區(qū)局下,而區(qū)局在這里可當(dāng)作角色組,它不參于權(quán)限分配。另外,為方便上面各主表自身的管理與查找,可采用樹(shù)型結(jié)構(gòu),如菜單樹(shù)、功能樹(shù)等,當(dāng)然這些可不需要參于權(quán)限分配。
2、百度百科所示的模型
相關(guān)文章
SQL注入技巧之顯注與盲注中過(guò)濾逗號(hào)繞過(guò)詳析
SQL注入的繞過(guò)技巧有很多,下面這篇文章主要給大家介紹了關(guān)于SQL注入技巧之顯注與盲注中過(guò)濾逗號(hào)繞過(guò)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08數(shù)據(jù)庫(kù)測(cè)試 實(shí)用技巧及測(cè)試方法
軟件應(yīng)用程序已經(jīng)離不開(kāi)數(shù)據(jù)庫(kù)。無(wú)論是在Web、桌面應(yīng)用、客戶(hù)端服務(wù)器、企業(yè)和個(gè)人業(yè)務(wù),都需要數(shù)據(jù)庫(kù)在后端操作。2011-07-07達(dá)夢(mèng)數(shù)據(jù)庫(kù)如何設(shè)置自增主鍵的方法及注意事項(xiàng)
這篇文章主要介紹了達(dá)夢(mèng)數(shù)據(jù)庫(kù)如何設(shè)置自增主鍵的方法及注意事項(xiàng)的相關(guān)資料,在達(dá)夢(mèng)數(shù)據(jù)庫(kù)中實(shí)現(xiàn)自增字段通常需要使用序列(sequence)和觸發(fā)器(trigger),需要的朋友可以參考下2024-09-09ADO,OLEDB,ODBC,DAO,RDO的區(qū)別說(shuō)明
ADO,OLEDB,ODBC,DAO,RDO的區(qū)別說(shuō)明,因?yàn)槲覀冇贸绦蜷_(kāi)發(fā)的時(shí)候經(jīng)常會(huì)用到OLEDB,ODBC鏈接數(shù)據(jù)庫(kù)等2012-09-09200行代碼輕松實(shí)現(xiàn)一個(gè)簡(jiǎn)單的區(qū)塊鏈
這篇文章主要為大家詳細(xì)介紹了200行代碼輕松實(shí)現(xiàn)一個(gè)簡(jiǎn)單的區(qū)塊鏈,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01dbeaver批量導(dǎo)出數(shù)據(jù)到另一個(gè)數(shù)據(jù)庫(kù)的詳細(xì)圖文教程
DBeaver是一款數(shù)據(jù)庫(kù)管理軟件,小巧易用,最主要其官方版就可以滿(mǎn)足平常得任務(wù)需求,這篇文章主要給大家介紹了關(guān)于dbeaver批量導(dǎo)出數(shù)據(jù)到另一個(gè)數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03sql server中datetime字段去除時(shí)間代碼收藏
sql下把datetime字段的時(shí)間去除的方法整理收集2008-04-04neo4j創(chuàng)建數(shù)據(jù)庫(kù)以及導(dǎo)入csv文件內(nèi)容圖文詳解
這篇文章主要給大家介紹了關(guān)于neo4j創(chuàng)建數(shù)據(jù)庫(kù)以及導(dǎo)入csv文件內(nèi)容的相關(guān)資料,Neo4j是一個(gè)基于圖形結(jié)構(gòu)的NoSQL數(shù)據(jù)庫(kù),它提供了一種高效的方式來(lái)管理和查詢(xún)大型復(fù)雜數(shù)據(jù),需要的朋友可以參考下2023-11-11