一蜒滩、權(quán)限系統(tǒng)的作用
權(quán)限管控可以通俗的理解為權(quán)力限制寄雀,即不同的人由于擁有不同權(quán)力得滤,他所看到的、能使用的可能不一樣盒犹。對(duì)應(yīng)到一個(gè)應(yīng)用系統(tǒng)懂更,其實(shí)就是一個(gè)用戶可能擁有不同的數(shù)據(jù)權(quán)限(看到的)和操作權(quán)限(使用的)。
二急膀、當(dāng)前流行的權(quán)限系統(tǒng)介紹
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í)間限制蛛枚、頻度限制;
四是操作屬性脸哀,即行為類型蹦浦,如讀寫、只讀等撞蜂。
例如:早上9:0011:00期間A盲镶、B兩個(gè)部門一起以考生的身份考試,下午14:0017:00期間A蝌诡、B兩個(gè)部門相互閱卷溉贿。
缺點(diǎn):規(guī)則復(fù)雜,不易看出主體與客體之間的關(guān)系浦旱,實(shí)現(xiàn)非常難宇色,現(xiàn)在應(yīng)用的很少。
RBAC闽寡,基于角色的權(quán)限訪問(wèn)控制(Role-Based Access Control):
RBAC的核心在于用戶只和角色關(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);
image.png
三闽烙、RBAC的深度拓展
RBAC模型可以分為:RBAC 0翅睛、RBAC 1、RBAC 2黑竞、RBAC 3 四個(gè)階段捕发,一般公司使用RBAC0的模型就可以。另外很魂,RBAC 0相當(dāng)于底層邏輯爬骤,后三者都是在RBAC 0模型上的拔高。
我先簡(jiǎn)單介紹下這四個(gè)RBAC模型:
RBAC 0模型:用戶和角色莫换、角色和權(quán)限多對(duì)多關(guān)系霞玄。
簡(jiǎn)單來(lái)說(shuō)就是一個(gè)用戶擁有多個(gè)角色,一個(gè)角色可以被多個(gè)用戶擁有拉岁,這是用戶和角色的多對(duì)多關(guān)系坷剧;同樣的,角色和權(quán)限也是如此喊暖。
RBAC 0模型如下圖:沒(méi)有畫太多線惫企,但是已經(jīng)能夠看出多對(duì)多關(guān)系。
RBAC 1模型:相對(duì)于RBAC 0模型陵叽,增加了角色分級(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)理研儒、主管、專員)独令,如果采用RBAC 0模型做權(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)限敬拓。
而RBAC 1模型就很好解決了這個(gè)問(wèn)題邻薯,創(chuàng)建完經(jīng)理角色并配置好權(quán)限后,主管角色的權(quán)限繼承經(jīng)理角色的權(quán)限恩尾,并且支持針對(duì)性刪減主管權(quán)限弛说。
RBAC 1模型如下圖:多對(duì)多關(guān)系仍舊沒(méi)有改變,只增加角色分級(jí)邏輯翰意。
[圖片上傳中...(image.png-95cc0-1640060170347-0)]
RBAC 2模型:基于RBAC 0模型木人,對(duì)角色增加了更多約束條件。
如角色互斥冀偶,比較經(jīng)典的案例是財(cái)務(wù)系統(tǒng)中出納不得兼管稽核醒第,那么在賦予財(cái)務(wù)系統(tǒng)操作人員角色時(shí),同一個(gè)操作員不能同時(shí)擁有出納和稽核兩個(gè)角色进鸠。
如角色數(shù)量限制稠曼,例如:一個(gè)角色專門為公司CEO創(chuàng)建的,最后發(fā)現(xiàn)公司有10個(gè)人擁有CEO角色客年,一個(gè)公司有10個(gè)CEO霞幅?
這就是對(duì)角色數(shù)量的限制,它指的是有多少用戶能擁有這個(gè)角色量瓜。
RBAC 2 模型主要是為了增加角色賦予的限制條件司恳,這也符合權(quán)限系統(tǒng)的目標(biāo):權(quán)責(zé)明確,系統(tǒng)使用安全绍傲、保密扔傅。
RBAC 3模型:同樣是基于RBAC0模型,但是綜合了RBAC 1和RBAC 2的所有特點(diǎn)烫饼。這里就不在多描述猎塞,讀者返回去看RBAC 1和RBAC 2模型的描述即可。
四杠纵、 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ì)唐瀑,一般使用各部門真實(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è)部門架構(gòu)或者業(yè)務(wù)線架構(gòu)來(lái)作為線索够坐,構(gòu)建用戶管理系統(tǒng)寸宵。
需要特殊注意:
實(shí)際業(yè)務(wù)中的組織架構(gòu)可能與企業(yè)部門架構(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)員工入職到某部門時(shí)呈驶,該名員工的賬號(hào)應(yīng)該自動(dòng)被加入該部門對(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ì)這種可能跨多部門協(xié)作的臨時(shí)員工。
如果公司安全級(jí)別較高牺堰,此類賬號(hào)默認(rèn)有固定失效時(shí)間拄轻,到達(dá)失效時(shí)間需再次審核才能重新開(kāi)啟。避免臨時(shí)賬號(hào)因?yàn)榱鞒滩煌晟莆昂z忘在系統(tǒng)中恨搓,引起安全隱患。
(3)虛擬角色
部門角色中的等級(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)黑白名單
白名單:某些用戶自身不擁有某部門的頂級(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)被黑名單限制弱匪。
權(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)智嚷。
數(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è)用戶朗伶。
網(wǎng)易有數(shù)做法:
https://youdata.163.com/index/manual/o/6System_management/data_role.html
五弦撩、用戶管理系統(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)限点晴,可穿梭查看各部門數(shù)據(jù)感凤,如果使用不恰當(dāng),是系統(tǒng)管理的安全隱患觉鼻。
2.互斥角色如何處理
當(dāng)用戶已經(jīng)有用的角色和即將添加的角色互相互斥時(shí)俊扭,應(yīng)該在添加新角色時(shí),提示管理員因角色互斥的原因坠陈,無(wú)法進(jìn)行新角色添加萨惑。如需添加,要先撤銷掉前一個(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ò)了衔峰。