權(quán)限管理 Authority Management
目前主要是通過用戶、角色旧找、資源三方面來進(jìn)行權(quán)限的分配溺健。
具體來說,就是賦予用戶某個(gè)角色钮蛛,角色能訪問及操作不同范圍的資源鞭缭。
通過建立角色系統(tǒng),將用戶和資源進(jìn)行分離魏颓,來保證權(quán)限分配的實(shí)施岭辣。
一般指根據(jù)系統(tǒng)設(shè)置的安全規(guī)則或者安全策略,
用戶可以訪問而且只能訪問自己被授權(quán)的資源甸饱。
場景舉例
企業(yè)IT管理員一般都能為系統(tǒng)定義角色沦童,給用戶分配角色。
這就是最常見的基于角色訪問控制叹话。
場景舉例:
- 給張三賦予“人力資源經(jīng)理”角色偷遗,“人力資源經(jīng)理”具有“查詢員工”、“添加員工”驼壶、“修改員工”和“刪除員工”權(quán)限氏豌。此時(shí)張三能夠進(jìn)入系統(tǒng),則可以進(jìn)行這些操作热凹;
- 去掉李四的“人力資源經(jīng)理”角色箩溃,此時(shí)李四就不能夠進(jìn)入系統(tǒng)進(jìn)行這些操作了。
以上舉例碌嘀,局限于功能訪問權(quán)限涣旨。還有一些更加豐富、更加細(xì)膩的權(quán)限管理股冗。
比如:
- 因?yàn)閺埲潜本┓止镜摹叭肆Y源經(jīng)理”霹陡,所以他能夠也只能夠管理北京分公司員工和北京分公司下屬的子公司(海淀子公司、朝陽子公司、西城子公司烹棉、東城子公司等)的員工攒霹;
- 因?yàn)橥跷迨呛5碜庸镜摹叭肆Y源經(jīng)理”,所以他能夠也只能夠管理海淀子公司的員工浆洗;
- 普通審查員審查財(cái)務(wù)數(shù)據(jù)的權(quán)限是:在零售行業(yè)審核最高限額是¥50萬催束,在鋼鐵行業(yè)最高限額是¥1000萬;高級審查員不受該限額限制伏社;
- ATM取款每次取款額不能超過¥5000元抠刺,每天取款總額不能超過¥20000元。
這些權(quán)限管理和數(shù)據(jù)(可以統(tǒng)稱為資源)直接相關(guān)摘昌,
又稱為數(shù)據(jù)級權(quán)限管理速妖、細(xì)粒度權(quán)限管理或者內(nèi)容權(quán)限管理。
分類
從控制力度來看聪黎,可以將權(quán)限管理分為兩大類:
- 功能級權(quán)限管理罕容;
- 數(shù)據(jù)級權(quán)限管理。
從控制方向來看稿饰,也可以將權(quán)限管理分為兩大類:
- 從系統(tǒng)獲取數(shù)據(jù)锦秒,比如查詢訂單、查詢客戶資料喉镰;
- 向系統(tǒng)提交數(shù)據(jù)旅择,比如刪除訂單、修改客戶資料梧喷。
概念
用戶身份認(rèn)證,是要解決這樣的問題:用戶告訴系統(tǒng)“我是誰”脖咐,系統(tǒng)就問用戶憑什么證明你就是“誰”呢铺敌?
所以,用戶身份認(rèn)證屁擅,根本就不屬于權(quán)限管理范疇偿凭。
對于采用用戶名、密碼驗(yàn)證的系統(tǒng)派歌,那么就是出示密碼
——當(dāng)用戶名和密碼匹配弯囊,則證明當(dāng)前用戶是誰;
對于采用指紋等系統(tǒng)胶果,則出示指紋匾嘱;
對于硬件Key等刷卡系統(tǒng),則需要刷卡早抠。
密碼加密霎烙,是隸屬用戶身份認(rèn)證領(lǐng)域,不屬于權(quán)限管理范疇。
系統(tǒng)管理悬垃,一般是系統(tǒng)的一個(gè)模塊游昼。
而且該模塊一般還含有權(quán)限管理子模塊。
因此尝蠕,很多人誤認(rèn)為權(quán)限管理系統(tǒng)只是系統(tǒng)的一個(gè)小小的子模塊烘豌。
系統(tǒng)管理里面的權(quán)限管理模塊,只是一個(gè)操作界面看彼,讓企業(yè)IT管理員能夠設(shè)置角色等安全策略廊佩。
系統(tǒng)背后還有很多權(quán)限驗(yàn)證邏輯,這些都并不屬于該模塊闲昭。
總體來說罐寨,該模塊相當(dāng)于給權(quán)限管理模塊提供了一些數(shù)據(jù),比如:張三是人力資源經(jīng)理等序矩。
更多混淆概念鸯绿,請參考:《對權(quán)限管理認(rèn)識(shí)的一些誤區(qū)》。
技術(shù)實(shí)現(xiàn)
按照權(quán)限管理的力度簸淀,逐步介紹權(quán)限管理實(shí)現(xiàn)技術(shù)瓶蝴。
① 功能權(quán)限管理技術(shù)實(shí)現(xiàn)
功能權(quán)限管理技術(shù),一般就使用基于角色訪問控制技術(shù)RBAC(Role Based Access Control)租幕。該技術(shù)被廣泛運(yùn)用于各個(gè)系統(tǒng)舷手,非常容易掌握。該技術(shù)模型如下圖示:
權(quán)限驗(yàn)證
功能級的權(quán)限驗(yàn)證邏輯非常簡單:查看該當(dāng)前登錄用戶的角色是否包含該功能的權(quán)限劲绪。
如果有男窟,則表示有權(quán)訪問,否則表示無權(quán)訪問贾富。
對于WEB系統(tǒng)歉眷,一般定義一個(gè)Filter就可以完成權(quán)限驗(yàn)證,無需在各個(gè)程序入口進(jìn)行權(quán)限判斷颤枪。
程序偽代碼如下:
// 獲取訪問功能
*String url=request.getRequestPath();*
// 進(jìn)行權(quán)限驗(yàn)證
*User user=request.getSession().get("user");*
*boolean permit=PrivilegeManager.permit( user, url );*
*if( permit ) {*
*chain.doFilter( request, response );*
*} else {*
// 可以轉(zhuǎn)到提示界面
}
② 數(shù)據(jù)級權(quán)限管理技術(shù)實(shí)現(xiàn)
目前汗捡,數(shù)據(jù)級權(quán)限管理領(lǐng)域,一直沒有統(tǒng)一的技術(shù)畏纲。
大體上扇住,軟件開發(fā)人員采用如下技術(shù):
1. 硬編碼,也就是將這種邏輯以if/else等形式與業(yè)務(wù)代碼耦合在一起盗胀,這種情況居多艘蹋;
2. 使用規(guī)則引擎,也有一些企業(yè)將這種邏輯以規(guī)則形式提出來票灰,并使用規(guī)則引擎解析規(guī)則簿训;
3. 使用第三方專業(yè)軟件咱娶,有開源中間件Ralasafe;
開源框架Spring Security强品;
商業(yè)產(chǎn)品Oracle Entitlements Server膘侮,
IBM Tivoli Access Manager,
UPMS通用用戶權(quán)限系統(tǒng)等的榛。
- 硬編碼形式弊端是非常顯然的琼了。
耦合性強(qiáng),難以測試夫晌;系統(tǒng)組件復(fù)用率低雕薪;
系統(tǒng)后期改動(dòng)代價(jià)非常大,牽一發(fā)而動(dòng)全身晓淀。 - 使用規(guī)則引擎可以解決很多問題所袁,學(xué)習(xí)難度尚可。
但規(guī)則引擎并不是專業(yè)用于權(quán)限管理的凶掰,
所以對于復(fù)雜一些的權(quán)限管理燥爷,就顯得力不從心。 - Ralasafe和Oracle懦窘、IBM的商業(yè)產(chǎn)品一樣前翎,都是中間件形式,
對應(yīng)用系統(tǒng)和應(yīng)用數(shù)據(jù)庫結(jié)構(gòu)沒有要求畅涂。
都有管理界面進(jìn)行直接操控管理港华,而且都能在線進(jìn)行測試。- 相比較午衰,Ralasafe還可以控制查詢權(quán)限(即從系統(tǒng)查詢訂單立宜、查詢客戶等),
Oracle臊岸、IBM的商業(yè)產(chǎn)品沒有這方面功能橙数; - 從產(chǎn)品學(xué)習(xí)難度來看,Ralasafe只要有一些IT經(jīng)驗(yàn)扇单,就能快速上手商模;
Oracle奠旺、IBM產(chǎn)品即使是專業(yè)人員蜘澜,也難以掌握。 - Spring Security是框架响疚,需要對你的應(yīng)用系統(tǒng)進(jìn)行改動(dòng)鄙信,你的系統(tǒng)必須在該框架進(jìn)行設(shè)計(jì)編寫。
它只是幫助開發(fā)人員將權(quán)限提取出來了忿晕,但數(shù)據(jù)級權(quán)限還需要開發(fā)人員開發(fā)Voter装诡。
而且配置工作巨大,難以測試。 - 雖然上述提到的產(chǎn)品鸦采,都是Java產(chǎn)品宾巍。
但Ralasfe和Oracle、IBM的商業(yè)產(chǎn)品渔伯,以中間件形式顶霞,
可以部署在獨(dú)立服務(wù)器上,使用web service等方式與非Java系統(tǒng)交互锣吼。
- 相比較午衰,Ralasafe還可以控制查詢權(quán)限(即從系統(tǒng)查詢訂單立宜、查詢客戶等),
實(shí)施
① 功能級權(quán)限控制
這是很多系統(tǒng)都能做到的选浑。
讓系統(tǒng)使用者(一企業(yè)IT管理員)定義角色,給用戶分配角色玄叠。
成功實(shí)施該步驟古徒,用戶能在功能級進(jìn)行權(quán)限管理。
整個(gè)過程無需軟件開發(fā)商參與读恃。
② 部分預(yù)定義好的數(shù)據(jù)級權(quán)限
有些復(fù)雜一點(diǎn)的系統(tǒng)隧膘,提供了一些規(guī)則和管理界面,
可以讓系統(tǒng)使用者(一般是企業(yè)IT管理員)輸入規(guī)則參數(shù)狐粱。
比如普通審查員審查財(cái)務(wù)數(shù)據(jù)的金額區(qū)間舀寓,勾選某用戶能夠查詢哪些組織機(jī)構(gòu)的訂單數(shù)據(jù)。
這是給企業(yè)提供了部分控制數(shù)據(jù)級權(quán)限的能力肌蜻。
但該能力還非常弱互墓,僅限于已定義好的策略,不能適應(yīng)安全策略變化蒋搜。
而且篡撵,企業(yè)需求肯定會(huì)隨著業(yè)務(wù)發(fā)展、時(shí)間推移豆挽,發(fā)生變化育谬。
比如:普通審查員審查區(qū)間由原來的單一設(shè)置區(qū)間,改為按照行業(yè)帮哈、按照地域來設(shè)置不同的區(qū)間膛檀。
用戶查詢訂單不僅和組織機(jī)構(gòu)有關(guān),還和訂單業(yè)務(wù)領(lǐng)域(體育娘侍、食品等)有關(guān)咖刃。
當(dāng)這些需求發(fā)生的時(shí)候,企業(yè)還要求助于軟件開發(fā)商進(jìn)行修改憾筏。
③ 企業(yè)完全掌控安全策略
企業(yè)完整掌控安全策略嚎杨,應(yīng)該包括2個(gè)方面內(nèi)容:
- 功能級權(quán)限管理完全自我掌控;
- 數(shù)據(jù)級權(quán)限管理完全自我掌控氧腰。
實(shí)現(xiàn)這方面需要枫浙,還需要考慮企業(yè)的IT能力:
IT能力沒有軟件開發(fā)商強(qiáng)刨肃,而且權(quán)限管理涉及整個(gè)系統(tǒng)安全,關(guān)系重大箩帚。
因此軟件必須是這樣的:
- 圖形化真友、集中管理的,便于企業(yè)管理紧帕;
- 可在線測試的锻狗,定制策略后在不影響業(yè)務(wù)的情況下,進(jìn)行測試焕参,確保無誤轻纪。
目前,就Ralasafe和Oracle叠纷、IBM產(chǎn)品滿足要求刻帚。
注意問題
不良的權(quán)限管理系統(tǒng),必然留下系統(tǒng)漏洞涩嚣,給黑客可趁之機(jī)崇众。
很多軟件可以輕松通過URL侵入、SQL注入等模式航厚,輕松越權(quán)獲得未授權(quán)數(shù)據(jù)顷歌。
甚至對系統(tǒng)數(shù)據(jù)進(jìn)行修改、刪除幔睬,造成巨大損失眯漩。
很多系統(tǒng),尤其是采用硬編碼方式的系統(tǒng)麻顶,存在權(quán)限邏輯與業(yè)務(wù)代碼緊密耦合赦抖,
同時(shí)又分散在系統(tǒng)各個(gè)地方,系統(tǒng)漏洞勢必非常多辅肾,
而且隨著系統(tǒng)不斷修改队萤,漏洞逐步增多。
好的系統(tǒng)矫钓,應(yīng)該將權(quán)限邏輯集中起來要尔,由專業(yè)的安全引擎進(jìn)行設(shè)置、解析新娜。
業(yè)務(wù)邏輯調(diào)用安全引擎赵辕,獲得權(quán)限結(jié)果,不再使用非專業(yè)模式杯活。
這種轉(zhuǎn)變匆帚,如圖示: