產(chǎn)品 | 權(quán)限設(shè)計(jì)=功能權(quán)限+數(shù)據(jù)權(quán)限

權(quán)限設(shè)計(jì)=功能權(quán)限+數(shù)據(jù)權(quán)限

權(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)定義角色沦童,給用戶分配角色。
這就是最常見的基于角色訪問控制叹话。

場景舉例:
  1. 給張三賦予“人力資源經(jīng)理”角色偷遗,“人力資源經(jīng)理”具有“查詢員工”、“添加員工”驼壶、“修改員工”和“刪除員工”權(quán)限氏豌。此時(shí)張三能夠進(jìn)入系統(tǒng),則可以進(jìn)行這些操作热凹;
  2. 去掉李四的“人力資源經(jīng)理”角色箩溃,此時(shí)李四就不能夠進(jìn)入系統(tǒng)進(jìn)行這些操作了。

以上舉例碌嘀,局限于功能訪問權(quán)限涣旨。還有一些更加豐富、更加細(xì)膩的權(quán)限管理股冗。

比如:
  1. 因?yàn)閺埲潜本┓止镜摹叭肆Y源經(jīng)理”霹陡,所以他能夠也只能夠管理北京分公司員工和北京分公司下屬的子公司(海淀子公司、朝陽子公司、西城子公司烹棉、東城子公司等)的員工攒霹;
  2. 因?yàn)橥跷迨呛5碜庸镜摹叭肆Y源經(jīng)理”,所以他能夠也只能夠管理海淀子公司的員工浆洗;
  3. 普通審查員審查財(cái)務(wù)數(shù)據(jù)的權(quán)限是:在零售行業(yè)審核最高限額是¥50萬催束,在鋼鐵行業(yè)最高限額是¥1000萬;高級審查員不受該限額限制伏社;
  4. ATM取款每次取款額不能超過¥5000元抠刺,每天取款總額不能超過¥20000元。

這些權(quán)限管理和數(shù)據(jù)(可以統(tǒng)稱為資源)直接相關(guān)摘昌,
又稱為數(shù)據(jù)級權(quán)限管理速妖、細(xì)粒度權(quán)限管理或者內(nèi)容權(quán)限管理。


分類

從控制力度來看聪黎,可以將權(quán)限管理分為兩大類:
  1. 功能級權(quán)限管理罕容;
  2. 數(shù)據(jù)級權(quán)限管理。
從控制方向來看稿饰,也可以將權(quán)限管理分為兩大類:
  1. 從系統(tǒng)獲取數(shù)據(jù)锦秒,比如查詢訂單、查詢客戶資料喉镰;
  2. 向系統(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)交互锣吼。

實(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)容:
  1. 功能級權(quán)限管理完全自我掌控;
  2. 數(shù)據(jù)級權(quán)限管理完全自我掌控氧腰。

實(shí)現(xiàn)這方面需要枫浙,還需要考慮企業(yè)的IT能力:
IT能力沒有軟件開發(fā)商強(qiáng)刨肃,而且權(quán)限管理涉及整個(gè)系統(tǒng)安全,關(guān)系重大箩帚。

因此軟件必須是這樣的:
  1. 圖形化真友、集中管理的,便于企業(yè)管理紧帕;
  2. 可在線測試的锻狗,定制策略后在不影響業(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)變匆帚,如圖示:


權(quán)限可以怎樣設(shè)計(jì)熬词?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旁钧,一起剝皮案震驚了整個(gè)濱河市吸重,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌歪今,老刑警劉巖嚎幸,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異寄猩,居然都是意外死亡嫉晶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門田篇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來替废,“玉大人,你說我怎么就攤上這事泊柬∽盗停” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵兽赁,是天一觀的道長状答。 經(jīng)常有香客問我,道長刀崖,這世上最難降的妖魔是什么惊科? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮亮钦,結(jié)果婚禮上馆截,老公的妹妹穿的比我還像新娘。我一直安慰自己蜂莉,他們只是感情好孙咪,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巡语,像睡著了一般翎蹈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上男公,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天荤堪,我揣著相機(jī)與錄音,去河邊找鬼枢赔。 笑死澄阳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的踏拜。 我是一名探鬼主播碎赢,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼速梗!你這毒婦竟也來了肮塞?” 一聲冷哼從身側(cè)響起襟齿,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枕赵,沒想到半個(gè)月后猜欺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拷窜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年开皿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片篮昧。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赋荆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出懊昨,到底是詐尸還是另有隱情糠睡,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布疚颊,位于F島的核電站狈孔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏材义。R本人自食惡果不足惜均抽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望其掂。 院中可真熱鬧油挥,春花似錦、人聲如沸款熬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贤牛。三九已至惋鹅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間殉簸,已是汗流浹背闰集。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留般卑,地道東北人武鲁。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像蝠检,于是被迫代替她去往敵國和親沐鼠。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容