今天來(lái)聊聊權(quán)限系統(tǒng)的設(shè)計(jì)以及主流的五種權(quán)限模型。
權(quán)限管控可以通俗地理解為權(quán)力限制,即不同的人由于擁有不同權(quán)力,他所看到的、能使用的可能不一樣。對(duì)應(yīng)到一個(gè)應(yīng)用系統(tǒng),其實(shí)就是一個(gè)用戶可能擁有不同的數(shù)據(jù)權(quán)限(看到的)和操作權(quán)限(使用的)。
主流的權(quán)限模型主要分為以下五種:
- ACL模型:訪問(wèn)控制列表
- DAC模型:自主訪問(wèn)控制
- MAC模型:強(qiáng)制訪問(wèn)控制
- ABAC模型:基于屬性的訪問(wèn)控制
- RBAC模型:基于角色的權(quán)限訪問(wèn)控制
ACL模型:訪問(wèn)控制列表
Access Control List,ACL是最早的、最基本的一種訪問(wèn)控制機(jī)制,是基于客體進(jìn)行控制的模型,在其他模型中也有ACL的身影。為了解決相同權(quán)限的用戶挨個(gè)配置的問(wèn)題,后來(lái)也采用了用戶組的方式。
原理:每一個(gè)客體都有一個(gè)列表,列表中記錄的是哪些主體可以對(duì)這個(gè)客體做哪些行為,非常簡(jiǎn)單。
例如:當(dāng)用戶A要對(duì)一篇文章進(jìn)行編輯時(shí),ACL會(huì)先檢查一下文章編輯功能的控制列表中有沒(méi)有用戶A,有就可以編輯,無(wú)則不能編輯。再例如:不同等級(jí)的會(huì)員在產(chǎn)品中可使用的功能范圍不同。
缺點(diǎn):當(dāng)主體的數(shù)量較多時(shí),配置和維護(hù)工作就會(huì)成本大、易出錯(cuò)。
DAC模型:自主訪問(wèn)控制
Discretionary Access Control,DAC是ACL的一種拓展。
原理:在ACL模型的基礎(chǔ)上,允許主體可以將自己擁有的權(quán)限自主地授予其他主體,所以權(quán)限可以任意傳遞。
例如:常見(jiàn)于文件系統(tǒng),LINUX,UNIX、WindowsNT版本的操作系統(tǒng)都提供DAC的支持。
缺點(diǎn):對(duì)權(quán)限控制比較分散,例如無(wú)法簡(jiǎn)單地將一組文件設(shè)置統(tǒng)一的權(quán)限開(kāi)放給指定的一群用戶。主體的權(quán)限太大,無(wú)意間就可能泄露信息。
MAC模型:強(qiáng)制訪問(wèn)控制
Mandatory Access Control,MAC模型中主要的是雙向驗(yàn)證機(jī)制。常見(jiàn)于機(jī)密機(jī)構(gòu)或者其他等級(jí)觀念強(qiáng)烈的行業(yè),如軍用和市政安全領(lǐng)域的軟件。
原理:主體有一個(gè)權(quán)限標(biāo)識(shí),客體也有一個(gè)權(quán)限標(biāo)識(shí),而主體能否對(duì)該客體進(jìn)行操作取決于雙方的權(quán)限標(biāo)識(shí)的關(guān)系。
例如:將軍分為上將>中將>少將,軍事文件保密等級(jí)分為絕密>機(jī)密>秘密,規(guī)定不同軍銜僅能訪問(wèn)不同保密等級(jí)的文件,如少將只能訪問(wèn)秘密文件;當(dāng)某一賬號(hào)訪問(wèn)某一文件時(shí),系統(tǒng)會(huì)驗(yàn)證賬號(hào)的軍銜,也驗(yàn)證文件的保密等級(jí),當(dāng)軍銜和保密等級(jí)相對(duì)應(yīng)時(shí)才可以訪問(wèn)。
缺點(diǎn):控制太嚴(yán)格,實(shí)現(xiàn)工作量大,缺乏靈活性。
ABAC模型:基于屬性的訪問(wèn)控制
Attribute-Based Access Control,能很好地解決RBAC的缺點(diǎn),在新增資源時(shí)容易維護(hù)。
原理:通過(guò)動(dòng)態(tài)計(jì)算一個(gè)或一組屬性是否滿足某種機(jī)制來(lái)授權(quán),是一種很靈活的權(quán)限模型,可以按需實(shí)現(xiàn)不同顆粒度的權(quán)限控制。
屬性通常有四類:
- 主體屬性,如用戶年齡、性別等;
- 客體屬性,如一篇文章等;
- 環(huán)境屬性,即空間限制、時(shí)間限制、頻度限制;
- 操作屬性,即行為類型,如讀寫(xiě)、只讀等。
例如:早上9:00,11:00期間A、B兩個(gè)部門(mén)一起以考生的身份考試,下午14:00,17:00期間A、B兩個(gè)部門(mén)相互閱卷。
缺點(diǎn):規(guī)則復(fù)雜,不易看出主體與客體之間的關(guān)系,實(shí)現(xiàn)非常難,現(xiàn)在應(yīng)用得很少。
RBAC,基于角色的權(quán)限訪問(wèn)控制
Role-Based Access Control,核心在于用戶只和角色關(guān)聯(lián),而角色代表對(duì)了權(quán)限,是一系列權(quán)限的集合。
RBAC三要素:
- 用戶:系統(tǒng)中所有的賬戶
- 角色:一系列權(quán)限的集合(如:管理員,開(kāi)發(fā)者,審計(jì)管理員等)
- 權(quán)限:菜單,按鈕,數(shù)據(jù)的增刪改查等詳細(xì)權(quán)限。
在RBAC中,權(quán)限與角色相關(guān)聯(lián),用戶通過(guò)成為適當(dāng)角色的成員而得到這些角色的權(quán)限。
角色是為了完成各種工作而創(chuàng)造,用戶則依據(jù)它的責(zé)任和資格來(lái)被指派相應(yīng)的角色,用戶可以很容易地從一個(gè)角色被指派到另一個(gè)角色。
角色可依新的需求和系統(tǒng)的合并而賦予新的權(quán)限,而權(quán)限也可根據(jù)需要而從某角色中回收。角色與角色的關(guān)系同樣也存在繼承關(guān)系防止越權(quán)。
優(yōu)點(diǎn):便于角色劃分,更靈活的授權(quán)管理;最小顆粒度授權(quán);
RBAC的深度拓展
RBAC模型可以分為:RBAC0、RBAC1、RBAC2、RBAC3 四個(gè)階段,一般公司使用RBAC0的模型就可以。另外,RBAC0相當(dāng)于底層邏輯,后三者都是在RBAC0模型上的拔高。
我先簡(jiǎn)單介紹下這四個(gè)RBAC模型:
1. RBAC0模型
用戶和角色、角色和權(quán)限多對(duì)多關(guān)系。
簡(jiǎn)單來(lái)說(shuō)就是一個(gè)用戶擁有多個(gè)角色,一個(gè)角色可以被多個(gè)用戶擁有,這是用戶和角色的多對(duì)多關(guān)系;同樣的,角色和權(quán)限也是如此。
RBAC0模型如下圖:沒(méi)有畫(huà)太多線,但是已經(jīng)能夠看出多對(duì)多關(guān)系。
2. RBAC1模型
相對(duì)于RBAC0模型,增加了角色分級(jí)的邏輯,類似于樹(shù)形結(jié)構(gòu),下一節(jié)點(diǎn)繼承上一節(jié)點(diǎn)的所有權(quán)限,如role1根節(jié)點(diǎn)下有role1.1和role1.2兩個(gè)子節(jié)點(diǎn)
角色分級(jí)的邏輯可以有效的規(guī)范角色創(chuàng)建(主要得益于權(quán)限繼承邏輯),我之前做過(guò)BD工具(類CRM),BD之間就有分級(jí)(經(jīng)理、主管、專員),如果采用RBAC0模型做權(quán)限系統(tǒng),我可能需要為經(jīng)理、主管、專員分別創(chuàng)建一個(gè)角色(角色之間權(quán)限無(wú)繼承性),極有可能出現(xiàn)一個(gè)問(wèn)題,由于權(quán)限配置錯(cuò)誤,主管擁有經(jīng)理都沒(méi)有權(quán)限。
而RBAC1模型就很好解決了這個(gè)問(wèn)題,創(chuàng)建完經(jīng)理角色并配置好權(quán)限后,主管角色的權(quán)限繼承經(jīng)理角色的權(quán)限,并且支持針對(duì)性刪減主管權(quán)限。
3. RBAC2模型
基于RBAC0模型,對(duì)角色增加了更多約束條件。
如角色互斥,比較經(jīng)典的案例是財(cái)務(wù)系統(tǒng)中出納不得兼管稽核,那么在賦予財(cái)務(wù)系統(tǒng)操作人員角色時(shí),同一個(gè)操作員不能同時(shí)擁有出納和稽核兩個(gè)角色。
如角色數(shù)量限制,例如:一個(gè)角色專門(mén)為公司CEO創(chuàng)建的,最后發(fā)現(xiàn)公司有10個(gè)人擁有CEO角色,一個(gè)公司有10個(gè)CEO?這就是對(duì)角色數(shù)量的限制,它指的是有多少用戶能擁有這個(gè)角色。
RBAC2 模型主要是為了增加角色賦予的限制條件,這也符合權(quán)限系統(tǒng)的目標(biāo):權(quán)責(zé)明確,系統(tǒng)使用安全、保密。
4. RBAC3模型
同樣是基于RBAC0模型,但是綜合了RBAC1和RBAC2的所有特點(diǎn)
這里就不在多描述,讀者返回去看RBAC1和RBAC2模型的描述即可。
RBAC 權(quán)限管理的在實(shí)際系統(tǒng)中的應(yīng)用
RBAC 權(quán)限模型由三大部分構(gòu)成,即用戶管理、角色管理、權(quán)限管理。
用戶管理按照企業(yè)架構(gòu)或業(yè)務(wù)線架構(gòu)來(lái)劃分,這些結(jié)構(gòu)本身比較清晰,擴(kuò)展性和可讀性都非常好。
角色管理一定要在深入理解業(yè)務(wù)邏輯后再來(lái)設(shè)計(jì),一般使用各部門(mén)真實(shí)的角色作為基礎(chǔ),再根據(jù)業(yè)務(wù)邏輯進(jìn)行擴(kuò)展。
權(quán)限管理是前兩種管理的再加固,做太細(xì)容易太碎片,做太粗又不夠安全,這里我們需要根據(jù)經(jīng)驗(yàn)和實(shí)際情況來(lái)設(shè)計(jì)。
1.用戶管理
用戶管理中的用戶,是企業(yè)里每一位員工,他們本身就有自己的組織架構(gòu),我們可以直接使用企業(yè)部門(mén)架構(gòu)或者業(yè)務(wù)線架構(gòu)來(lái)作為線索,構(gòu)建用戶管理系統(tǒng)。
需要特殊注意:實(shí)際業(yè)務(wù)中的組織架構(gòu)可能與企業(yè)部門(mén)架構(gòu)、業(yè)務(wù)線架構(gòu)不同,需要考慮數(shù)據(jù)共享機(jī)制,一般的做法為授權(quán)某個(gè)人、某個(gè)角色組共享某個(gè)組織層級(jí)的某個(gè)對(duì)象組數(shù)據(jù)。
2.角色管理
在設(shè)計(jì)系統(tǒng)角色時(shí),我們應(yīng)該深入理解公司架構(gòu)、業(yè)務(wù)架構(gòu)后,再根據(jù)需求設(shè)計(jì)角色及角色內(nèi)的等級(jí)。
一般角色相對(duì)于用戶來(lái)說(shuō)是固定不變的,每個(gè)角色都有自己明確的權(quán)限和限制,這些權(quán)限在系統(tǒng)設(shè)計(jì)之處就確定了,之后也輕易不會(huì)再變動(dòng)。
1. 自動(dòng)獲得基礎(chǔ)角色
當(dāng)員工入職到某部門(mén)時(shí),該名員工的賬號(hào)應(yīng)該自動(dòng)被加入該部門(mén)對(duì)應(yīng)的基礎(chǔ)角色中,并擁有對(duì)應(yīng)的基礎(chǔ)權(quán)限。這種操作是為了保證系統(tǒng)安全的前提下,減少了管理員大量手動(dòng)操作。使新入職員工能快速使用系統(tǒng),提高工作效率。
2. 臨時(shí)角色與失效時(shí)間
公司業(yè)務(wù)有時(shí)需要外援來(lái)支持,他們并不屬于公司員工,也只是在某個(gè)時(shí)段在公司做支持。此時(shí)我們需要設(shè)置臨時(shí)角色,來(lái)應(yīng)對(duì)這種可能跨多部門(mén)協(xié)作的臨時(shí)員工。
如果公司安全級(jí)別較高,此類賬號(hào)默認(rèn)有固定失效時(shí)間,到達(dá)失效時(shí)間需再次審核才能重新開(kāi)啟。避免臨時(shí)賬號(hào)因?yàn)榱鞒滩煌晟?,遺忘在系統(tǒng)中,引起安全隱患。
3. 虛擬角色
部門(mén)角色中的等級(jí),可以授權(quán)同等級(jí)的員工擁有相同的權(quán)限,但某些員工因工作原因,需要調(diào)用角色等級(jí)之外的權(quán)限,相同等級(jí)不同員工需要使用的權(quán)限還不相同。
這種超出角色等級(jí)又合理的權(quán)限授予,我們可以設(shè)置虛擬角色。這一虛擬角色可集成這一工作所需的所有權(quán)限,然后將它賦予具體的員工即可。這樣即不用調(diào)整組織架構(gòu)和對(duì)應(yīng)的角色,也可以滿足工作中特殊情況的權(quán)限需求。
4. 黑白名單
白名單:某些用戶自身不擁有某部門(mén)的頂級(jí)角色,但處于業(yè)務(wù)需求,需要給他角色外的高級(jí)權(quán)限,那么我們可以設(shè)計(jì)限制范圍的白名單,將需要的用戶添加進(jìn)去即可。
在安全流程中,我們僅需要對(duì)白名單設(shè)計(jì)安全流程,即可審核在白名單中的特殊用戶,做到監(jiān)控?fù)碛刑厥鈾?quán)限的用戶,減少安全隱患。
黑名單:比較常見(jiàn)的黑名單場(chǎng)景是某些犯了錯(cuò)誤的員工,雖然在職,但已經(jīng)不能給他們?nèi)魏喂緳?quán)限了。這種既不能取消角色關(guān)聯(lián),也不能完全停用賬號(hào)的情況,可以設(shè)置黑名單,讓此類用戶可以登錄賬號(hào),查看基本信息,但大多數(shù)關(guān)鍵權(quán)限已經(jīng)被黑名單限制。
3. 權(quán)限管理
權(quán)限管理一般從三個(gè)方面來(lái)做限制。頁(yè)面/菜單權(quán)限,操作權(quán)限,數(shù)據(jù)權(quán)限。
1. 頁(yè)面/菜單權(quán)限
對(duì)于沒(méi)有權(quán)限操作的用戶,直接隱藏對(duì)應(yīng)的頁(yè)面入口或菜單選項(xiàng)。這種方法簡(jiǎn)單快捷直接,對(duì)于一些安全不太敏感的權(quán)限,使用這種方式非常高效。
2. 操作權(quán)限
操作權(quán)限通常是指對(duì)同一組數(shù)據(jù),不同的用戶是否可以增刪改查。對(duì)某些用戶來(lái)說(shuō)是只讀瀏覽數(shù)據(jù),對(duì)某些用戶來(lái)說(shuō)是可編輯的數(shù)據(jù)。
3. 數(shù)據(jù)權(quán)限
對(duì)于安全需求高的權(quán)限管理,僅從前端限制隱藏菜單,隱藏編輯按鈕是不夠的,還需要在數(shù)接口上做限制。如果用戶試圖通過(guò)非法手段編輯不屬于自己權(quán)限下的數(shù)據(jù),服務(wù)器端會(huì)識(shí)別、記錄并限制訪問(wèn)。
4. 數(shù)據(jù)權(quán)限如何管控
數(shù)據(jù)權(quán)限可以分為行權(quán)限和列權(quán)限。行權(quán)限控制:看多少條數(shù)據(jù)。列權(quán)限控制:看一條數(shù)據(jù)的多少個(gè)字段
簡(jiǎn)單系統(tǒng)中可以通過(guò)組織架構(gòu)來(lái)管控行權(quán)限,按照角色來(lái)配置列權(quán)限,但是遇到復(fù)雜情況,組織架構(gòu)是承載不了復(fù)雜行權(quán)限管控,角色也更不能承載列的特殊化展示。
目前行業(yè)的做法是提供行列級(jí)數(shù)據(jù)權(quán)規(guī)則配置,把規(guī)則當(dāng)成類似權(quán)限點(diǎn)配置賦予某個(gè)角色或者某個(gè)用戶。
用戶管理系統(tǒng)權(quán)限設(shè)計(jì)中的更多實(shí)踐細(xì)節(jié)
1.超級(jí)管理員
超級(jí)管理員是用來(lái)啟動(dòng)系統(tǒng),配置系統(tǒng)的賬號(hào)。這個(gè)賬號(hào)應(yīng)該在配置好系統(tǒng),創(chuàng)建管理員之后被隱藏起來(lái)。超級(jí)管理員賬號(hào)擁有系統(tǒng)中全部權(quán)限,可穿梭查看各部門(mén)數(shù)據(jù),如果使用不恰當(dāng),是系統(tǒng)管理的安全隱患。
2.互斥角色如何處理
當(dāng)用戶已經(jīng)有用的角色和即將添加的角色互相互斥時(shí),應(yīng)該在添加新角色時(shí),提示管理員因角色互斥的原因,無(wú)法進(jìn)行新角色添加。如需添加,要先撤銷(xiāo)掉前一個(gè)角色,再添加新角色。
3.用戶管理權(quán)限系統(tǒng)設(shè)計(jì)一定要簡(jiǎn)單清晰
在設(shè)計(jì)權(quán)限系統(tǒng)之處,一定要理清思路,一切從簡(jiǎn),能不增加的多余角色和權(quán)限邏輯,就一定不要增加。因?yàn)殡S著公司業(yè)務(wù)的擴(kuò)大,權(quán)限和角色也會(huì)隨之增多,如果初期設(shè)計(jì)思路不嚴(yán)謹(jǐn),那么權(quán)限系統(tǒng)會(huì)隨著業(yè)務(wù)的擴(kuò)大而無(wú)限混亂下去,此時(shí)再來(lái)整理權(quán)限,已經(jīng)太晚了。所以初期設(shè)計(jì)就一定要條理清晰,簡(jiǎn)單明了,能避免后續(xù)非常多不必要的麻煩。
4.無(wú)權(quán)提示頁(yè)
有時(shí)員工 A 會(huì)直接給員工 B 分享他當(dāng)下正在操作的頁(yè)面,但有可能員工 B 無(wú)權(quán)查看。此時(shí)我們應(yīng)該在這里考慮添加「無(wú)權(quán)提示頁(yè)」,避免粗暴的 404 頁(yè)面讓員工 B 以為是系統(tǒng)出錯(cuò)了。
原文鏈接:https://mp.weixin.qq.com/s/FnBgM4m593e8M_UkJ_RWSg
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。