文檔已補(bǔ)充完,特別感謝高海東提出寶貴的意見(jiàn)。當(dāng)然,這還不是結(jié)束。我們還會(huì)陸續(xù)的完善這個(gè)模型,包括安全策略、資源歸屬控制、責(zé)任分離關(guān)系等等等等吧。。 1. 概念訪問(wèn)控制技術(shù)是由美國(guó)國(guó)防部(Department of Defense, DoD)資助的研究和開(kāi)發(fā)成果演變而來(lái)的。這一研究導(dǎo)致兩種基本類(lèi)型訪問(wèn)控制的產(chǎn)生:自主訪問(wèn)控制(Discretionary Access Control, DAC)和強(qiáng)制訪問(wèn)控制(Mandatory Access Control, MAC)。最初的研究和應(yīng)用主要是為了防止機(jī)密信息被未經(jīng)授權(quán)者訪問(wèn),近期的應(yīng)用主要是把這些策略應(yīng)用到為商業(yè)領(lǐng)域。 自主訪問(wèn)控制,允許把訪問(wèn)控制權(quán)的授予和取消留給個(gè)體用戶來(lái)判斷。為沒(méi)有訪問(wèn)控制權(quán)的個(gè)體用戶授予和廢除許可。自主訪問(wèn)控制機(jī)制允許用戶被授權(quán)和取消訪問(wèn)其控制之下的任何客體(object),換句話說(shuō),用戶就是他們控制下的客體的擁有者。對(duì)于這些組織,公司或代理機(jī)構(gòu)是事實(shí)上的系統(tǒng)客體和處理他們的程序的擁有者。訪問(wèn)優(yōu)先權(quán)受組織控制,而且也常?;诠蛦T功能而不是數(shù)據(jù)所有權(quán)。 強(qiáng)制訪問(wèn)控制,在美國(guó)國(guó)防部 Trusted Computer Security Evaluation Criteria (TCSEC) 中定義如下:“一種限制訪問(wèn)客體的手段,它以包含在這些客體中的信息敏感性和訪問(wèn)這些敏感性信息的主體的正式授權(quán)信息(如清除)為基礎(chǔ)”。 什么是基于角色訪問(wèn)控制(Role-Based Access Control, RBAC)?NIST 有如下定義。 訪問(wèn)是一種利用計(jì)算機(jī)資源去做某件事情的的能力,訪問(wèn)控制是一種手段,通過(guò)它這種能力在某些情況下被允許或者受限制(通常是通過(guò)物理上和基于系統(tǒng)的控制)。基于計(jì)算機(jī)的訪問(wèn)控制不僅可規(guī)定是“誰(shuí)”或某個(gè)操作有權(quán)使用特定系統(tǒng)資源,而且也能規(guī)定被允許的訪問(wèn)類(lèi)型。這些控制方式可在計(jì)算機(jī)系統(tǒng)或者外部設(shè)備中實(shí)現(xiàn)。 就基于角色訪問(wèn)控制而言,訪問(wèn)決策是基于角色的,個(gè)體用戶是某個(gè)組織的一部分。用戶具有指派的角色(比如醫(yī)生、護(hù)士、出納、經(jīng)理)。定義角色的過(guò)程應(yīng)該基于對(duì)組織運(yùn)轉(zhuǎn)的徹底分析,應(yīng)該包括來(lái)自一個(gè)組織中更廣范圍用戶的輸入。 訪問(wèn)權(quán)按角色名分組,資源的使用受限于授權(quán)給假定關(guān)聯(lián)角色的個(gè)體。例如,在一個(gè)醫(yī)院系統(tǒng)中,醫(yī)生角色可能包括進(jìn)行診斷、開(kāi)據(jù)處方、指示實(shí)驗(yàn)室化驗(yàn)等;而研究員的角色則被限制在收集用于研究的匿名臨床信息工作上。 2. 核心對(duì)象模型設(shè)計(jì)(RBAC0)根據(jù)RBAC模型的權(quán)限設(shè)計(jì)思想,建立權(quán)限管理系統(tǒng)的核心對(duì)象模型.對(duì)象模型中包含的基本元素主要有:用戶(Users)、用戶組(Group)、角色(Role)、控制對(duì)象(Resource Class)、訪問(wèn)模式(Access Mode)、操作(Operator)。主要的關(guān)系有:分配角色權(quán)限PA(Permission Assignment)、分配用戶角色UA(Users Assignmen描述如下: 1. 控制對(duì)象:是系統(tǒng)所要保護(hù)的資源(Resource Class),可以被訪問(wèn)的對(duì)象。資源的定義需要注意以下兩個(gè)問(wèn)題: a) 資源具有層次關(guān)系和包含關(guān)系。例如,網(wǎng)頁(yè)是資源,網(wǎng)頁(yè)上的按鈕、文本框等對(duì)象也是資源,是網(wǎng)頁(yè)節(jié)點(diǎn)的子節(jié)點(diǎn),如可以訪問(wèn)按鈕,則必須能夠訪問(wèn)頁(yè)面。 b) 這里提及的資源概念是指資源的類(lèi)別(Resource Class),不是某個(gè)特定資源的實(shí)例(Resource Instance)。資源的類(lèi)別和資源的實(shí)例的區(qū)分,以及資源的粒度的細(xì)分,有利于確定權(quán)限管理系統(tǒng)和應(yīng)用系統(tǒng)之間的管理邊界,權(quán)限管理系統(tǒng)需要對(duì)于資源的類(lèi)別進(jìn)行權(quán)限管理,而應(yīng)用系統(tǒng)需要對(duì)特定資源的實(shí)例進(jìn)行權(quán)限管理。兩者的區(qū)分主要是基于以下兩點(diǎn)考慮: i. 一方面,資源實(shí)例的權(quán)限常具有資源的相關(guān)性。即根據(jù)資源實(shí)例和訪問(wèn)資源的主體之間的關(guān)聯(lián)關(guān)系,才可能進(jìn)行資源的實(shí)例權(quán)限判斷。 例如,在管理信息系統(tǒng)中,需要按照營(yíng)業(yè)區(qū)域劃分不同部門(mén)的客戶,A區(qū)和B區(qū)都具有修改客戶資料這一受控的資源,這里“客戶檔案資料”是屬于資源的類(lèi)別的范疇。如果規(guī)定A區(qū)只能修改A區(qū)管理的客戶資料,就必須要區(qū)分出資料的歸屬,這里的資源是屬于資源實(shí)例的范疇??蛻魴n案(資源)本身應(yīng)該有其使用者的信息(客戶資料可能就含有營(yíng)業(yè)區(qū)域這一屬性),才能區(qū)分特定資源的實(shí)例操作,可以修改屬于自己管轄的信息內(nèi)容。 ii. 另一方面,資源的實(shí)例權(quán)限常具有相當(dāng)大的業(yè)務(wù)邏輯相關(guān)性。對(duì)不同的業(yè)務(wù)邏輯,常常意味著完全不同的權(quán)限判定原則和策略。 2. 操作(權(quán)限):完成資源的類(lèi)別和訪問(wèn)策略之間的綁定。 3. 用戶:權(quán)限的擁有者或主體。用戶和權(quán)限實(shí)現(xiàn)分離,通過(guò)授權(quán)管理進(jìn)行綁定。 4. 用戶組:一組用戶的集合。在業(yè)務(wù)邏輯的判斷中,可以實(shí)現(xiàn)基于個(gè)人身份或組的身份進(jìn)行判斷。系統(tǒng)弱化了用戶組的概念,主要實(shí)現(xiàn)用戶(個(gè)人的身份)的方式。 5. 角色:權(quán)限分配的單位與載體。角色通過(guò)繼承關(guān)系支持分級(jí)的權(quán)限實(shí)現(xiàn)。例如,科長(zhǎng)角色同時(shí)具有科長(zhǎng)角色、科內(nèi)不同業(yè)務(wù)人員角色。 6. 分配角色權(quán)限PA:實(shí)現(xiàn)操作和角色之間的關(guān)聯(lián)關(guān)系映射。 7. 分配用戶角色UA:實(shí)現(xiàn)用戶和角色之間的關(guān)聯(lián)關(guān)系映射。 3. HR數(shù)據(jù)權(quán)限模型設(shè)計(jì)初稿3.1. 訪問(wèn)主體在本系統(tǒng)中訪問(wèn)主體是員工和用戶組。 如圖 公司、部門(mén)、職位一定有對(duì)應(yīng)的一個(gè)用戶組,但用戶組不一定是公司、部門(mén)、職位當(dāng)中一個(gè),也可能是虛擬出來(lái)的一個(gè)組,比如:工會(huì)組織、公司籃球隊(duì)等等。
(圖 3.2. 分配用戶角色(Users Assignmen)如圖 用戶組是可以無(wú)限制擴(kuò)充的。 無(wú)論添加幾個(gè)主體到最后都會(huì)映射到角色(roles)表中,成為多個(gè)角色。 然后對(duì)角色分配訪問(wèn)權(quán)限控制。 3.3. 操作
操作(權(quán)限)=訪問(wèn)模式+資源(resource class) 如圖
(圖 3.4. 分配角色權(quán)限(Permission Assignment)
3.3節(jié)中提到,根據(jù)資源和訪問(wèn)模式、我們這里就有了很多操作,也就是權(quán)限。 那么我們只需要把這些權(quán)限分配到角色就可以了。如圖
(圖 3.5. 資源類(lèi)別(Resources Class)
根據(jù)以上的描述可以看出來(lái),在本模型中主體是可以無(wú)限制擴(kuò)充的。那么客體呢?我們可以看到,不管你有多少客體,到最后也都是分解成了多個(gè)資源類(lèi)別(和主體一樣,把每個(gè)主體都分解成了多個(gè)角色),然后和訪問(wèn)模式組成了操作(權(quán)限),最后賦給角色。 我們?cè)俜治鱿沦Y源類(lèi)別模型。 我認(rèn)為我們系統(tǒng)的資源類(lèi)別可以分為2個(gè)方向,頁(yè)面功能和流程。 比如:?jiǎn)T工資料查詢(xún),這個(gè)頁(yè)面上就有查詢(xún)這個(gè)客體資源類(lèi)別。 而員工轉(zhuǎn)正流程中又有直接主管審批這個(gè)資源。 那么我們把資源類(lèi)別(resources class)設(shè)計(jì)成如圖
功能模塊表中存放“流程”或“頁(yè)面功能”。 “功能模塊類(lèi)別”用來(lái)區(qū)分,這條記錄是“頁(yè)面功能”還是“流程”。 一個(gè)流程有多個(gè)審批操作。我們可以放到資源類(lèi)別中。 頁(yè)面功能同理。 4. 小結(jié)該對(duì)象模型最終將訪問(wèn)控制模型轉(zhuǎn)化為訪問(wèn)矩陣形式。訪問(wèn)矩陣中的行對(duì)應(yīng)于用戶,列對(duì)應(yīng)于操作,每個(gè)矩陣元素規(guī)定了相應(yīng)的角色,對(duì)應(yīng)于相應(yīng)的目標(biāo)被準(zhǔn)予的訪問(wèn)許可、實(shí)施行為。按訪問(wèn)矩陣中的行看,是訪問(wèn)能力表CL(Access Capabilities)的內(nèi)容;按訪問(wèn)矩陣中的列看,是訪問(wèn)控制表ACL(Access Control Lists)的內(nèi)容。如表4.1
(表4.1) 圖4.1為整個(gè)權(quán)限模型。
(圖4.1) 5. 思考5.1. 相對(duì)角色在很多時(shí)候我們都會(huì)用到相對(duì)角色這個(gè)概念。比如:?jiǎn)T工轉(zhuǎn)正流程中就有個(gè)直接主管審批,那么這個(gè)直接主管這個(gè)角色就是一個(gè)相對(duì)角色。這個(gè)相對(duì)角色在數(shù)據(jù)庫(kù)權(quán)限模型中其實(shí)也是一個(gè)角色,只用添加到角色表中給這個(gè)角色賦權(quán)限(操作)就可以了,但在開(kāi)發(fā)過(guò)程中一定要注意相對(duì)角色的設(shè)定,特別是設(shè)定方法,公式。 5.2. 用戶組的聯(lián)想用戶組可以是組織架構(gòu)中的實(shí)體單位。同時(shí)也可以是虛擬的,由用戶自己添加、配置的一個(gè)角色的集合。角色又是權(quán)限的集合。 那么我們可以這么做,添加一個(gè)系統(tǒng)管理員組,然后通過(guò)角色為這個(gè)組,分配好應(yīng)有的權(quán)限。以后如果有新的系統(tǒng)管理員,我們只需要放到這個(gè)組里面去就可以,沒(méi)必要再重新配置一個(gè)用戶。 這樣就完全可以實(shí)現(xiàn)windows的權(quán)限管理了。 5.3. 角色的繼承給角色分配權(quán)限(操作)其實(shí)也是件比較復(fù)雜的工作。如果角色間存在一定的關(guān)系,可以直接把另外一個(gè)角色的權(quán)限直接復(fù)制過(guò)來(lái),然后再添加自己需要的其他權(quán)限,這樣不是會(huì)方便很多嗎? 繼承可分為兩種方式,一般繼承關(guān)系和受限繼承關(guān)系。一般繼承關(guān)系僅要求角色繼承關(guān)系是一個(gè)絕對(duì)偏序關(guān)系(不能繼承自己的子類(lèi)),允許角色間的多繼承。而受限繼承關(guān)系則進(jìn)一步要求角色繼承關(guān)系是一個(gè)樹(shù)結(jié)構(gòu)(單繼承)。 5.4. 資源實(shí)例(Resource Instance)場(chǎng)景1:有一個(gè)功能頁(yè)面,查詢(xún)員工資料??稍L問(wèn)角色有“人事專(zhuān)員”和“部門(mén)經(jīng)理”。“人事專(zhuān)員”進(jìn)入可以查出全公司的所有員工資料。“部門(mén)經(jīng)理”進(jìn)入后,只能查出自己部門(mén)的員工資料。 場(chǎng)景1的解決方案: 1. 在功能模塊(functionmodule)表中添加“查詢(xún)員工資料”這個(gè)功能。 2. 在功能資源(functionresource)表中添加這個(gè)“查詢(xún)員工資料”的兩個(gè)資源,“部門(mén)經(jīng)理查詢(xún)”和“人事專(zhuān)員查詢(xún)”。 3. 抽象成資源類(lèi)別(resourcesclass)。 4. 資源類(lèi)別(resourcesclass)和訪問(wèn)模式(accessmode)組合成2個(gè)操作(權(quán)限)。 5. 把這兩個(gè)權(quán)限分別賦予部門(mén)經(jīng)理組所擁有的角色和人事專(zhuān)員組所擁有的角色。 6. 在開(kāi)發(fā)過(guò)程中就可以根據(jù)兩個(gè)不同的資源,在這個(gè)頁(yè)面做查詢(xún)條件的處理。
場(chǎng)景2:有一個(gè)功能頁(yè)面,部門(mén)花名冊(cè)??稍L問(wèn)角色有“部門(mén)經(jīng)理”和任何登錄后的員工。根據(jù)員工部門(mén)自動(dòng)顯示所在部門(mén)的花名冊(cè)。如果是“部門(mén)經(jīng)理”,就顯示一些“部門(mén)經(jīng)理”可以看到的敏感信息。比如,工資。 場(chǎng)景2的解決方案: 1. 在功能模塊(functionmodule)表中添加“部門(mén)花名冊(cè)”這個(gè)功能。 2. 在功能資源(functionresource)表中添加這個(gè)“部門(mén)花名冊(cè)”的一個(gè)資源,“部門(mén)經(jīng)理花名冊(cè)”。 3. 抽象成資源類(lèi)別(resourcesclass)。 4. 資源類(lèi)別(resourcesclass)和訪問(wèn)模式(accessmode)組合成1個(gè)操作(權(quán)限)。 5. 把這個(gè)權(quán)限賦予部門(mén)經(jīng)理組所擁有的角色。 6. 在開(kāi)發(fā)過(guò)程中進(jìn)入這個(gè)功能頁(yè)面,沒(méi)有這個(gè)權(quán)限的顯示一般花名冊(cè)。有這個(gè)權(quán)限的顯示部門(mén)經(jīng)理花名冊(cè)。
小結(jié): 資源實(shí)例讓我們?cè)诎粹o級(jí)權(quán)限的基礎(chǔ)上,加上了對(duì)記錄和字段的控制。當(dāng)然,你也可以把場(chǎng)景1和場(chǎng)景2結(jié)合起來(lái)。記錄、字段一起控制,這個(gè)肯定是可以的。 再擴(kuò)展下。場(chǎng)景二中,如果有一天部門(mén)經(jīng)理所能看到的東西改變了,加一項(xiàng)或少一項(xiàng),怎么辦呢?難道去改代碼? 其實(shí)在很多情況下,都是可以做死的。比如場(chǎng)景二中大家都只能看到自己部門(mén)的花名冊(cè)??隙ú粫?huì)有一天要看公司的花名冊(cè),如果真有這個(gè)需求,那么就應(yīng)該再做個(gè)功能頁(yè)面。叫做“公司花名冊(cè)”。 但也有些情況,是要可以調(diào)整的。同樣是場(chǎng)景二,部門(mén)經(jīng)理能看到的東西。哪天公司想變變,這個(gè)也是有可能的。 其實(shí)這個(gè)功能實(shí)現(xiàn)起來(lái)也非常簡(jiǎn)單。如圖5.4.1。 無(wú)論什么,到最后都會(huì)變成資源類(lèi)別,我們直接給這個(gè)類(lèi)別記錄一些屬性。到時(shí)候你只要根據(jù)這些屬性顯示就可以了,要變的時(shí)候把這些屬性變了就行了。只要愿意,完全可以做個(gè)維護(hù)頁(yè)面。 表資源設(shè)置(resourcesetting)記錄一些訪問(wèn)條件。比如,這個(gè)資源按部門(mén)查詢(xún)。如果需要你可以把他改成按公司查詢(xún)。 表字段設(shè)置(fieldsetting)記錄的是這個(gè)資源的字段信息。比如,部門(mén)經(jīng)理可以看到“部門(mén)花名冊(cè)”的字段。 6. 總結(jié)本模型的主要設(shè)計(jì)思想是把所有訪問(wèn)主體,包括部門(mén)、職位、公司、人等等。全部分解成一個(gè)或多個(gè)角色。 把所有訪問(wèn)控制客體全部分解成一個(gè)和多個(gè)資源類(lèi)別(Resources Class)。 把資源類(lèi)別加上訪問(wèn)模式(讀、寫(xiě)、刪、運(yùn)行等)成為一個(gè)操作,也就是權(quán)限。 然后把這個(gè)權(quán)限賦予到角色。 這個(gè)模型支持頁(yè)面級(jí)權(quán)限、按鈕級(jí)權(quán)限、記錄級(jí)權(quán)限、字段級(jí)權(quán)限和這幾種權(quán)限的任意組合。 在角色的分配上。他本身是支持一個(gè)客體有多個(gè)角色,一個(gè)角色屬于多個(gè)客體。支持用戶組角色、角色繼承、相對(duì)角色等。特別是用戶組這個(gè)設(shè)計(jì)。部門(mén)、職位、公司這些組織都可以抽象成一個(gè)用戶組,直接給這個(gè)組分配權(quán)限就可以了。但用戶組不僅僅只有抽象實(shí)體組織這功能,他還可以無(wú)限制的擴(kuò)展。比如可以添加一個(gè)虛擬的系統(tǒng)管理員組。他本身就是一個(gè)員工的集合,你可以以任何形式去組合人員。 |
|
來(lái)自: 賈朋亮博客 > 《權(quán)限管理》