权限管理中的RBAC与ABAC
最早的模型
最早最基礎的權限管理模型是ACL,也就是Access Control List(訪問控制列表)。
它是用來描述用戶和權限之間關系的數據列表。它的原理非常簡單:每一項資源,都配有一個列表,這個列表記錄的就是哪些用戶可以對這項資源執行CRUD等操作。當試圖訪問這項資源時,會首先檢查這個列表中是否有關于當前用戶的訪問權限,從而確定當前用戶可否執行相應的操作。
ACL幾乎不需要任何基礎設施就可以完成訪問控制,這是他的簡單性,也是他的優點。
但由于需要維護大量的訪問權限列表,ACL在性能上有明顯的缺陷。另外,對于擁有大量用戶與眾多資源的應用,管理訪問控制列表本身就變成非常繁重的工作。
最開始的ACL定義中,用戶直接和權限掛鉤,數據存儲的是用戶與權限的關聯關系。如果兩個用戶的權限是一樣的,那么就需要分別存儲這兩個用戶與權限的關聯關系,也是上面所提到的ACL的缺陷。為了解決這些問題,便有了對ACL設計的改進,相同權限的用戶放到同一個分組里,分組與權限掛鉤,不再是用戶直接與權限掛鉤。以及后來出現的RBAC(基于角色的訪問控制),角色與分組也是差不多的概念,角色直接與權限掛鉤,用戶再與角色進行關聯。
RBAC(Role-Based Access Control 基于角色的訪問控制)
ACL的訪問控制機制中,直接維護的是用戶與功能的關系,這一系列的關系就是一個權限列表。當很多的用戶具有相同功能權限的時候,就要進行繁瑣的關聯操作。RBAC就是在用戶與權限之間引入了角色的概念。用戶與角色之間做關聯,權限列表維護的是角色與功能的關系。
一個用戶擁有若干個角色,每個角色擁有若干個權限,這樣就構成了“用戶-角色-權限”的授權模型。這種授權模型的好處在于,不必每次創建用戶時都進行權限分配的操作,只要分配用戶相應的角色即可,而且角色的權限變更比用戶的權限變更要少得多,減少頻繁設置。
在RBAC模型中,“用戶-角色-權限”之間形成的關系是一個雙向的”一對多“的關系。
也就是說,一個用戶可以擁有多個角色,一個角色可以賦給不同的用戶;一個角色可以擁有多個權限,一個權限也可以被多個角色擁有。
角色的引入,可以讓具有相同權限匯集到一起,再將不同角色分配給不同的用戶,以此來實現用戶對于權限的分配。這樣只需要在首次給不同的角色配上相應的權限,后續添加的用戶就可直接賦予角色,便可添加上所需要的權限如此一來大大減少了操作的頻繁性。
在后續的發展中,我們發現 單單在用戶和權限中引入角色,對于大數據量的角色和權限的分配,還是具有相當的復雜度。如果一個部門上萬人,那么我們就需要給這個部門上萬人分別設置角色,而這上萬其實是具有相同的權限的,如果直接采用基礎的RBAC權限模型的話,那么面對這樣的情況,無疑也是具有一個龐大的重復的工作量,并且也不利于后期用戶變更的維護管理。
于是我們可以再在用戶與角色之間引入”部門“的概念。
所謂”部門“就是將具有相同角色的用戶進行分類,從而形成用戶組的概念。
如此一來,我們將具有相同角色的用戶歸到一起,形成一個用戶組,也就是一個”部門“,由此進行批量的調度和權限的管理,可以大大提高分類的清晰程度和我們工作的效率。
給具有相同權限的用戶建立用戶組,將用戶組關聯到對應的角色下,此用戶組就擁有了此角色下的所有權限,而用戶是屬于用戶組的,所以用戶組下的所有用戶也就同樣的擁有了此角色下的所有權限。一個用戶可以屬于多個用戶組,一個用戶組也可以包括多個用戶,所以用戶與用戶組是多對多的關系。
RBAC級別
RBAC0 用戶和角色是多對多,角色和權限是多對多。一個用戶擁有的權限,是他所有角色的集合。
RBAC1。基于RBAC0,并引入了角色分層的概念,即一個角色分為多個等級,每個等級對應的權限是不一樣的。把權限分給用戶時,需要分到對應的角色等級。角色等級低時擁有的權限少,角色等級高的權限是所有角色等級低的權限的集合。
RBAC2 基于RBAC1,對角色訪問進行限制。如
互斥角色限制。同一個用戶分配到兩個角色,且角色互斥時,那么系統應該提醒只能選擇其中一個角色。比如員工擁有商務這個角色,可以創建結算單并提交給財務審核,這時,就不能賦予這個員工財務角色,否則他就自己提交結算自己審核結算單了。
角色數量限制。一個用戶擁有的角色數量是有限的;一個角色被分配的用戶數量也是有限的。
先決條件限制。用戶想獲得某個上級角色,必須先獲得其下一級的角色。比如想獲得產品總監的權限,那就需要從產品助理這一角色開始,再到產品經理角色,最后到產品總監角色。
RBAC3 基于RBAC0,對RBAC1和RBAC2進行了整合,是最全面的權限管理。 用戶組
當平臺用戶的基數增大,角色類型越來越多時,而且一部分人具有相同的屬性,比如財務部的所有員工。
ABAC(Attribute-Based Access Control 基于屬性的權限驗證)
ABAC被稱為是權限系統設計的未來。
在結構化語言中使用屬性作為構建基石來定義并實施訪問控制,提供上下文相關的細粒度動態訪問控制服務。ABAC是一種為解決行業分布式應用可信關系訪問控制模型,也表示詞語的一種構成形式。
ABAC是一種為解決行業分布式應用可信關系訪問控制模型,它利用相關實體(如主體、客體、環境)的屬性作為授權的基礎來研究如何進行訪問控制。基于角色的訪問控制(RBAC)通過引入角色中間元素,使得權限先經過角色進行聚合,然后再將權限分配給主體,通過這種方式可以簡化授權,可將角色信息看成是一種屬性,這樣 RBAC 就成為了ABAC 的一種單屬性特例。
在ABAC中,主體是對客體(資源)實施訪問行為的實體,如用戶、服務、通信實體等;
主體有定義其身份和特性的屬性,包括主體的身份、角色、職位、能力、位置、行政關系以及CA
證書等,如用戶這一主體,它可以以所處行業中用戶屬性特征為基礎,將這些用戶的某些屬性進行標準化定義,包括某用戶所屬的部門、職務、主管業務等;
客體是被主體操作的實體,如文件、數據、服務、系統設備等,客體屬性包括身份、位置(URL)
、大小、值,這些屬性可從客體的“元數據”中獲取,同樣也可以由對其操的主體來繼承。這就是說,客體屬性與主體屬性具有一定的相關性;
環境屬性是與事務(或業務)處理關聯的屬性,它通常與身份無關,但適用于授權決策,如時間、日期、系統狀態、安全級別等。
ABAC授權模型理論上能夠實現非常靈活的權限控制,幾乎能滿足所有類型的需求。從使用場景來說比較適用于用戶數量多并且授權比較復雜的場景。
舉個例子:
P5(職級)的研發(職位)同學在公司內網(環境)可以查看和下載(操作)代碼
這個例子中的”職級“”職位“”環境“”操作“,就是實體的屬性、操作類型、相關的環境,根據這四點來判斷,此時該用戶是否有某些權限。
比如同樣是在內網,這個開發同學有權限操作代碼,而運營同學沒有這個權限;或者同樣是這個開發同學,他在內網有操作代碼的權限,而在公司外沒有這個權限。
通俗的講,就是對用戶實體的實體屬性(比如工號,職級,職位等)、環境屬性(IP、時間、地點等)、操作樹形(增加、刪除、修改、查看等),來計算出當前用戶是否有權限。
如何選擇
在這里,組織的規模是至關重要的因素。由于ABAC最初的設計和實施的困難,對于小型企業而言,可能太過復雜了。
對于中小型企業,RBAC是ABAC的簡單替代方案。每個用戶都有自己的角色,并具有相應的權限和限制。當用戶轉移到新角色時,其權限將更改為新職位的權限。這意味著,在明確定義角色的層次結構中,可以輕松管理少量的內部和外部用戶。
但是,當必須手動建立新角色時,對于大型組織而言,效率并不高。一旦定義了屬性和規則,當用戶和利益相關者眾多時,ABAC的策略就更容易應用,同時還降低了安全風險。
簡而言之,如果滿足以下條件,就選擇ABAC:
- 你在一個擁有眾多用戶的大型組織中;
- 你需要深入的特定訪問控制功能;
- 你有時間投資遠距離的模型;
- 你需要確保隱私和安全;
但是,如果滿足以下條件,請考慮RBAC:
- 你所在的是中小型企業;
- 你的訪問控制策略廣泛;
- 你的外部用戶很少,并且你的組織角色得到了明確定義;
參考文章:
https://baike.baidu.com/item/abac/3555041?fr=aladdin
https://blog.csdn.net/qq_31960623/article/details/120528589
https://blog.csdn.net/zl1zl2zl3/article/details/82968140?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-82968140-blog-120528589.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-82968140-blog-120528589.pc_relevant_default&utm_relevant_index=2
https://blog.csdn.net/hi_bigbai/article/details/120868485?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2defaultCTRLISTdefault-2-120868485-blog-82968140.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultCTRLISTdefault-2-120868485-blog-82968140.pc_relevant_aa
https://www.jianshu.com/p/32e548fbba35
https://blog.csdn.net/qzw752890913/article/details/124461952
https://blog.csdn.net/qq_46311811/article/details/122444864?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6-122444864-blog-124461952.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6-122444864-blog-124461952.pc_relevant_default&utm_relevant_index=9
https://juejin.cn/post/6844904056876433416#heading-12
總結
以上是生活随笔為你收集整理的权限管理中的RBAC与ABAC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是计算机病毒,看这里
- 下一篇: 深入理解java虚拟机脑图文档