關(guān)偉文
關(guān)鍵詞:數(shù)據(jù)權(quán)限;分級授權(quán);角色控制;訪問控制
1引言
在信息系統(tǒng)的運(yùn)維中,權(quán)限管理是必不可少的。為了達(dá)到對權(quán)限細(xì)粒度的控制,同時(shí)兼顧未來權(quán)限的可拓展性,便于在信息系統(tǒng)運(yùn)維過程中對權(quán)限的控制以達(dá)到對數(shù)據(jù)的精確地控制,從而避免因權(quán)限控制缺失或者操作不當(dāng)引發(fā)的風(fēng)險(xiǎn)問題和系統(tǒng)安全性問題,提出分級數(shù)據(jù)權(quán)限設(shè)計(jì)方案。
權(quán)限管理是所有系統(tǒng)都會涉及的一個(gè)重要組成部分,主要目的是對不同的人訪問資源進(jìn)行權(quán)限的控制。權(quán)限可分為功能權(quán)限和數(shù)據(jù)權(quán)限。功能權(quán)限用于控制用戶菜單、界面、操作等權(quán)限。數(shù)據(jù)權(quán)限用于控制用戶可視的數(shù)據(jù)范圍。功能權(quán)限與數(shù)據(jù)權(quán)限需要分開配置.充分解耦。
功能權(quán)限主要從用戶可以操作的范圍來實(shí)現(xiàn),目前行業(yè)較為認(rèn)可的一種解決方案是基于RBAC的權(quán)限控制模型。數(shù)據(jù)權(quán)限更多的是從安全性角度思考,如何控制用戶可視的數(shù)據(jù)范圍,如何靈活把控?cái)?shù)據(jù)范圍,成了權(quán)限管理的一道難題?;凇敖M織架構(gòu)+RBAC”的權(quán)限控制模型的設(shè)計(jì)方案,以分級授權(quán)的形式,可以準(zhǔn)確控制行級別的數(shù)據(jù),可以很好地解決相應(yīng)的問題。
2數(shù)據(jù)權(quán)限設(shè)計(jì)
功能權(quán)限是各個(gè)信息系統(tǒng)必不可少的一個(gè)模塊,但數(shù)據(jù)權(quán)限并不是每個(gè)業(yè)務(wù)系統(tǒng)都要求的,具體要看實(shí)際的業(yè)務(wù)需求。假設(shè)所有的信息都是公開透明的,數(shù)據(jù)權(quán)限控制也就變得多余??墒牵?dāng)前世界錯(cuò)綜復(fù)雜,每個(gè)人的身份也不盡相同,不可能每個(gè)人可視的數(shù)據(jù)范圍是相同的。所以,數(shù)據(jù)權(quán)限控制也就成為信息系統(tǒng)不可或缺的一部分。
數(shù)據(jù)權(quán)限以功能權(quán)限為基礎(chǔ),不同的用戶,瀏覽同一個(gè)頁面顯示的數(shù)據(jù)是不同的,即用戶可以查看并處理哪些數(shù)據(jù)。出于靈活性、可拓展性、可維護(hù)性,本系統(tǒng)方案擬采用多級數(shù)據(jù)切割方案,具體如下。
一級數(shù)據(jù)規(guī)則(默認(rèn)),也稱全局?jǐn)?shù)據(jù)規(guī)則,它以組織架構(gòu)為核心。組織架構(gòu)一般為樹狀結(jié)構(gòu),每一個(gè)部門對應(yīng)于樹上的一個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)可綁定任意用戶?;谝越M織架構(gòu)為基礎(chǔ)的模型劃分的數(shù)據(jù),可以實(shí)現(xiàn)上級瀏覽下級數(shù)據(jù),但下級不能瀏覽上級數(shù)據(jù)。
父結(jié)點(diǎn)可以管理所有子結(jié)點(diǎn)的數(shù)據(jù),結(jié)點(diǎn)只能管理自己所在結(jié)點(diǎn)的數(shù)據(jù)。如圖1所示,一級機(jī)構(gòu)用戶可以管理二級機(jī)構(gòu)1下的用戶b、用戶c數(shù)據(jù)以及二級機(jī)構(gòu)2下的用戶d的數(shù)據(jù),用戶b僅可以管理二級機(jī)構(gòu)1下用戶的數(shù)據(jù)。
二級數(shù)據(jù)規(guī)則。需引入功能權(quán)限的【角色】,可以給角色配置預(yù)先定義的數(shù)據(jù)規(guī)則,從而實(shí)現(xiàn)跨部門的數(shù)據(jù)訪問以及同一部門下的數(shù)據(jù)切割。這類數(shù)據(jù)規(guī)則統(tǒng)稱為基于角色數(shù)據(jù)范圍,有如下三個(gè)范圍:全局級;部門級;個(gè)人級。
角色表(Role):存儲角色信息,即權(quán)限組。如表1所列。
角色數(shù)據(jù)范圍表(RoleDataRange):存儲角色數(shù)據(jù)范圍。如表3所列。
基于角色數(shù)據(jù)范圍,可以讓系統(tǒng)數(shù)據(jù)權(quán)限配置更加靈活,也彌補(bǔ)了一級數(shù)據(jù)規(guī)則的不足。通過這種方式配置的權(quán)限,屬于此角色的所有用戶都將獲得相應(yīng)的數(shù)據(jù)權(quán)限?;诮巧臄?shù)據(jù)規(guī)則,可以解決絕大多數(shù)的數(shù)據(jù)權(quán)限問題。但是,它的配置是基于現(xiàn)有的范圍,不能自定義數(shù)據(jù)規(guī)則。
三級數(shù)據(jù)規(guī)則,是二級數(shù)據(jù)規(guī)則的一個(gè)補(bǔ)充,可實(shí)現(xiàn)自定義數(shù)據(jù)規(guī)則。二級數(shù)據(jù)規(guī)則的實(shí)現(xiàn)是基于角色的,而三級數(shù)據(jù)規(guī)則的實(shí)現(xiàn)是基于用戶的,換言之,三級數(shù)據(jù)規(guī)則是粒度更細(xì)的數(shù)據(jù)權(quán)限控制。系統(tǒng)管理員可以根據(jù)具體的業(yè)務(wù)邏輯,給任意用戶添加任意的數(shù)據(jù)規(guī)則。
用戶數(shù)據(jù)范圍表(UserDataRange):存儲用戶數(shù)據(jù)范圍。如表4所列。
如圖2所示,用戶d是特殊人員,有權(quán)限訪問二級機(jī)構(gòu)1下所有的數(shù)據(jù),但是并沒有權(quán)限訪問他的上級數(shù)據(jù)。顯然,現(xiàn)有的數(shù)據(jù)規(guī)則并不能滿足此類需求。此時(shí)需要使用三級數(shù)據(jù)規(guī)則,這類數(shù)據(jù)規(guī)則統(tǒng)稱為基于用戶的數(shù)據(jù)范圍。針對特殊人員d,可以單獨(dú)賦予其訪問二級機(jī)構(gòu)1的權(quán)限,即可解決此類問題。
若業(yè)務(wù)系統(tǒng)規(guī)模較為龐大,不建議數(shù)據(jù)權(quán)限與角色進(jìn)行深度捆綁。由于角色和用戶以及角色和功能權(quán)限是多對多的關(guān)系,若把數(shù)據(jù)權(quán)限強(qiáng)加進(jìn)來進(jìn)行綁定,業(yè)務(wù)系統(tǒng)就會變得繁雜、瑣碎,難以區(qū)分權(quán)限之間的界限。特別是在后期維護(hù)中,很難做到準(zhǔn)確控制權(quán)限的范圍,造成權(quán)限的溢出。為了解決這一現(xiàn)象,只要把數(shù)據(jù)權(quán)限從角色中抽離出來,使角色與功能權(quán)限單獨(dú)捆綁,使用戶組與數(shù)據(jù)權(quán)限單獨(dú)捆綁,通過用戶組的形式,可以實(shí)現(xiàn)一對多的用戶管理,通過上述的二級數(shù)據(jù)權(quán)限設(shè)計(jì)方案,進(jìn)而控制多個(gè)用戶的數(shù)據(jù)權(quán)限。通過上述的三級數(shù)據(jù)權(quán)限設(shè)計(jì)方案,即可達(dá)到對用戶更加細(xì)粒度、更加個(gè)性化的權(quán)限控制??偠灾?,功能權(quán)限的控制具有通用性,在市場上也有較為成熟的方案。但是數(shù)據(jù)權(quán)限的控制,一般而言,都是需要定制化開發(fā),針對不同的業(yè)務(wù)系統(tǒng),數(shù)據(jù)權(quán)限的概念是不一樣的,很多業(yè)務(wù)系統(tǒng)根本就不需要數(shù)據(jù)權(quán)限,數(shù)據(jù)權(quán)限的增加無疑會加大業(yè)務(wù)系統(tǒng)的建設(shè)難度,但數(shù)據(jù)權(quán)限也是不可缺少的。讀者可根據(jù)以上數(shù)據(jù)權(quán)限設(shè)計(jì)方案,結(jié)合業(yè)務(wù)系統(tǒng)的實(shí)際情況,自行設(shè)計(jì)出滿足業(yè)務(wù)系統(tǒng)的數(shù)據(jù)權(quán)限。但是,在設(shè)計(jì)過程中需要把握一個(gè)原則,確定用戶與角色捆綁還是與用戶組捆綁,進(jìn)而設(shè)計(jì)出相應(yīng)的數(shù)據(jù)權(quán)限。
通過以上三級數(shù)據(jù)權(quán)限的設(shè)計(jì),可以實(shí)現(xiàn)對數(shù)據(jù)橫向控制,即控制用戶可以查看同一張表不同行的數(shù)據(jù)。行級別的數(shù)據(jù)權(quán)限控制基本上可以滿足絕大多數(shù)業(yè)務(wù)系統(tǒng)的需求。但是,有的業(yè)務(wù)系統(tǒng)信息比較敏感,如財(cái)務(wù)收費(fèi)系統(tǒng)、人事管理系統(tǒng)等。不同身份的人,看到同一張表的數(shù)據(jù)是不一樣的。如財(cái)務(wù)總監(jiān)可以看到工資總額,一般人員是看不到這個(gè)字段的。針對這種級別的數(shù)據(jù)權(quán)限控制,顯然以上的數(shù)據(jù)權(quán)限設(shè)計(jì)方案可能不太適用,為了實(shí)現(xiàn)對數(shù)據(jù)的縱向控制,對此提出了字段授權(quán)的設(shè)計(jì)理念,讀者可根據(jù)實(shí)際情況自行設(shè)計(jì)。
3字段授權(quán)
同屬一個(gè)角色或者用戶組的用戶,所擁有的數(shù)據(jù)權(quán)限是一致的,不同角色或用戶組用戶所看到的數(shù)據(jù)是不一致的。這里所指的數(shù)據(jù),指的是數(shù)據(jù)表中的“行”數(shù)據(jù)。然而,在實(shí)際場景中,不同角色或用戶組的用戶,對于同一張表,即使所擁有的權(quán)限一致,看到的內(nèi)容可能有所不同。針對敏感信息,不能直接暴露給非授權(quán)用戶。三級數(shù)據(jù)權(quán)限可以做到橫向切割數(shù)據(jù),而字段授權(quán)可實(shí)現(xiàn)縱向切割數(shù)據(jù)。換言之,字段授權(quán)切割的對象對應(yīng)于數(shù)據(jù)的數(shù)據(jù),即數(shù)據(jù)表里的字段。
字段授權(quán)可采用基于角色進(jìn)行授權(quán),也可采用基于用戶組或者用戶進(jìn)行授權(quán)。一般而言,從數(shù)據(jù)庫獲取而來的數(shù)據(jù),需要與授權(quán)字段相匹配,進(jìn)而過濾非授權(quán)字段,從而切割數(shù)據(jù)的數(shù)據(jù)。具體如圖3所示。
4結(jié)束語
基于“組織架構(gòu)+RBAC”的權(quán)限控制模型的設(shè)計(jì)方案,以分級授權(quán)的形式解決傳統(tǒng)信息系統(tǒng)難以解決的問題。通過個(gè)人、角色、部門、權(quán)限等對象的組合達(dá)到對數(shù)據(jù)權(quán)限細(xì)粒度的控制,從而實(shí)現(xiàn)對數(shù)據(jù)的“行”控制。在此基礎(chǔ)上,提出了基于字段授權(quán)的理念,以實(shí)現(xiàn)對數(shù)據(jù)的控制,進(jìn)而實(shí)現(xiàn)對數(shù)據(jù)的“列”控制。通過對數(shù)據(jù)“行”及“列”的訪問控制,可以滿足大多數(shù)信息系統(tǒng)對于數(shù)據(jù)權(quán)限控制的要求。實(shí)驗(yàn)表明,分級數(shù)據(jù)權(quán)限設(shè)計(jì)方案在信息系統(tǒng)的應(yīng)用中是可行、合理、高效的。