RBAC權(quán)限管理模型在油田管理系統(tǒng)中的應(yīng)用
2017-03-13
作者:陳宮浩1,卿粼波1,滕奇志1,張余強(qiáng)2
來(lái)源:2017年微型機(jī)與應(yīng)用第2期
陳宮浩1,卿粼波1,滕奇志1,張余強(qiáng)2
(1.四川大學(xué) 電子信息學(xué)院 圖像信息研究所,四川 成都 610065; 2.成都西圖科技有限公司,四川 成都 610065)
摘要:油田實(shí)驗(yàn)數(shù)據(jù)作為勘探、開(kāi)發(fā)、油藏評(píng)價(jià)等各個(gè)科研領(lǐng)域必不可少的研究資料,其重要性可見(jiàn)一斑,保護(hù)油田實(shí)驗(yàn)數(shù)據(jù)的安全性具有重要的戰(zhàn)略價(jià)值和現(xiàn)實(shí)意義。為有效管理科研人員對(duì)油田實(shí)驗(yàn)數(shù)據(jù)的查看和使用,通過(guò)分析權(quán)限控制在油田信息管理系統(tǒng)中的發(fā)展現(xiàn)狀,結(jié)合ASP.NET MVC、jQuery easyUI以及RBAC訪問(wèn)控制模型,介紹了一套完整的油田權(quán)限管理系統(tǒng)的實(shí)現(xiàn)方法,主要包括系統(tǒng)架構(gòu)和技術(shù)實(shí)現(xiàn),旨在促進(jìn)權(quán)限控制在數(shù)字化油田中的發(fā)展。
關(guān)鍵詞:ASP.NET MVC;基于角色的權(quán)限控制模型;油田實(shí)驗(yàn)數(shù)據(jù)
中圖分類號(hào):TP399文獻(xiàn)標(biāo)識(shí)碼:ADOI: 10.19358/j.issn.1674-7720.2017.02.026
引用格式:陳宮浩,卿粼波,滕奇志,等.RBAC權(quán)限管理模型在油田管理系統(tǒng)中的應(yīng)用[J].微型機(jī)與應(yīng)用,2017,36(2):87-89,95.
0引言
*基金項(xiàng)目:國(guó)家自然科學(xué)基金(00000000);國(guó)家高技術(shù)研究發(fā)展計(jì)劃(863計(jì)劃)(2008AA000000)隨著HTML5技術(shù)的發(fā)展與推廣,基于B/S架構(gòu)的數(shù)據(jù)管理系統(tǒng)得到了充分的應(yīng)用。在油田信息管理系統(tǒng)的建設(shè)中,由于油田信息數(shù)據(jù)量大、種類繁多,加之網(wǎng)絡(luò)環(huán)境的開(kāi)放性,在提高工作效率的同時(shí),如何有效地保護(hù)數(shù)據(jù)、分配權(quán)限、保證國(guó)家油田實(shí)驗(yàn)數(shù)據(jù)的安全成為了關(guān)注的焦點(diǎn),相關(guān)的探討和應(yīng)用正在不斷發(fā)展。如李琛、李宇峰等人提出的USB加密狗技術(shù),不僅給出了身份認(rèn)證和權(quán)限設(shè)定的實(shí)現(xiàn)辦法,而且對(duì)軟硬件結(jié)合的加密模式做了探討[1]。又如張琴等人提出的安全插件技術(shù),探討了對(duì)油田數(shù)據(jù)庫(kù)的訪問(wèn)控制,在保障訪問(wèn)安全的同時(shí),又記錄了用戶對(duì)數(shù)據(jù)庫(kù)的操作[2]。本文結(jié)合微軟推出的ASP.NET MVC框架,采用基于角色的權(quán)限控制(RoleBased Access Control,RBAC)模型,以及面向切面編程(Aspect Oriented Programming,AOP)等技術(shù),設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)基于B/S架構(gòu)的油田權(quán)限管理系統(tǒng)。
1系統(tǒng)總體框架
1.1MVC架構(gòu)
以往基于B/S架構(gòu)的管理系統(tǒng)常采用ASP.NET Webform框架進(jìn)行開(kāi)發(fā),該框架封裝了許多常用的控件,雖然方便了開(kāi)發(fā),但是不利于服務(wù)器端結(jié)構(gòu)分層,在后期維護(hù)上成本過(guò)高,故本系統(tǒng)采用ASP.NET MVC 分層體系結(jié)構(gòu)。
ASP.NET MVC從邏輯上可以劃分為視圖層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層。視圖層采用jQuery easyUI框架,該框架可以提供簡(jiǎn)潔而強(qiáng)大的數(shù)據(jù)展示功能,視圖層通過(guò)Ajax異步通信技術(shù)提交用戶的請(qǐng)求到后臺(tái),后臺(tái)控制器接收視圖層傳來(lái)的數(shù)據(jù)后立刻交給業(yè)務(wù)邏輯層的相應(yīng)方法,然后對(duì)數(shù)據(jù)進(jìn)行相應(yīng)處理,比如驗(yàn)證數(shù)據(jù)的合法性、對(duì)原始數(shù)據(jù)進(jìn)行封裝以及構(gòu)造JSON數(shù)組等,最后,由業(yè)務(wù)邏輯層調(diào)用數(shù)據(jù)訪問(wèn)層的方法對(duì)數(shù)據(jù)庫(kù)進(jìn)行增、刪、改、查的操作。對(duì)數(shù)據(jù)庫(kù)的操作采用的是ADO.NET技術(shù)。如果操作成功則經(jīng)控制器以JSON數(shù)組的形式返回?cái)?shù)據(jù)到視圖層,或者直接在視圖層提示用戶操作結(jié)果。系統(tǒng)的總體框架圖如圖1所示。

1.2RBAC模型
RBAC的核心思想是在用戶和權(quán)限之間增加一層角色映射。角色的引入來(lái)自于實(shí)際生產(chǎn)環(huán)境中的職務(wù),具體職務(wù)代表著處理某些事物的權(quán)利[3]。在權(quán)限系統(tǒng)中角色可以理解為一定數(shù)量的權(quán)限的集合。權(quán)限映射到角色,角色再映射到用戶,角色是連接權(quán)限和用戶的橋梁。這種分層次的設(shè)計(jì)把權(quán)限分配的重點(diǎn)由用戶轉(zhuǎn)移到角色,大大簡(jiǎn)化了權(quán)限分配的復(fù)雜程度。RBAC訪問(wèn)控制模型如圖2所示。

2關(guān)鍵技術(shù)實(shí)現(xiàn)
為實(shí)現(xiàn)系統(tǒng)管理員在瀏覽器上查看、編輯、修改、刪除權(quán)限信息,本系統(tǒng)涉及的關(guān)鍵技術(shù)包括數(shù)據(jù)庫(kù)設(shè)計(jì)、數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程的編寫(xiě)、面向切面編程、權(quán)限信息的展示和用戶交互功能的編寫(xiě)。
2.1數(shù)據(jù)庫(kù)設(shè)計(jì)
石油部門(mén)大多使用Windows操作系統(tǒng),本系統(tǒng)為了與部署環(huán)境保持一致,采用與Windows操作系統(tǒng)兼容的SQL Server 2008數(shù)據(jù)庫(kù)。RBAC模型最基本由4個(gè)數(shù)據(jù)表組成:用戶信息表、部門(mén)信息表、角色表、權(quán)限表,在此基礎(chǔ)之上,還需要?jiǎng)?chuàng)建兩張中間表關(guān)聯(lián)4個(gè)基本表。數(shù)據(jù)庫(kù)的設(shè)計(jì)如圖3所示。

AuthDepartment表是部門(mén)信息表,DID字段是AuthDepartment表的主鍵,唯一標(biāo)識(shí)部門(mén)。ParentDID字段是父部門(mén)的ID,部門(mén)和父部門(mén)通過(guò)DID和ParentDID形成遞歸。
AuthUser表是用戶信息表,UID字段是AuthUser表的主鍵,唯一標(biāo)識(shí)用戶,DID字段是AuthUser表的外鍵,該字段參照的完整性約束是AuthDepartment表的DID字段,標(biāo)識(shí)了用戶所屬的部門(mén)ID。
AuthRole表是角色信息表,RID字段是AuthRole表的主鍵。
AuthPrivilege表是最底層的權(quán)限表,PrivilegeRoute字段存放的是管理系統(tǒng)各個(gè)頁(yè)面的路由信息。
除此之外還創(chuàng)建了兩張中間表AuthUserRole和AuthRolePrivilege。AuthUserRole連接著AuthUser表和AuthRole表,添加用戶時(shí)向AuthUser表插入用戶信息,同時(shí)向AuthUserRole表插入用戶擁有的權(quán)限,刪除用戶時(shí)不僅要?jiǎng)h除AuthUser表的記錄,同時(shí)要?jiǎng)h除AuthUerRole表中該用戶所擁有的權(quán)限。通過(guò)AuthUserRole可以實(shí)現(xiàn)用戶和角色之間多對(duì)多的關(guān)系。同理,AuthRolePrivilege表也是連接AuthRole表和AuthPrivilege表的橋梁,同樣實(shí)現(xiàn)了角色和權(quán)限之間多對(duì)多的關(guān)系。
2.2存儲(chǔ)過(guò)程的編寫(xiě)
AuthUserRole表存儲(chǔ)了一個(gè)用戶擁有的所有角色,在油田管理系統(tǒng)的使用過(guò)程中,一個(gè)工作人員往往有多個(gè)角色,故在創(chuàng)建AuthUserRole表時(shí),設(shè)置AuthUserRole表的UID字段為外鍵,參照完整性約束為AuthUser表的UID字段,并設(shè)置為級(jí)聯(lián)刪除。當(dāng)從AuthUser表中刪除用戶的同時(shí),數(shù)據(jù)庫(kù)根據(jù)用戶的UID把AuthUserRole表中有相同UID的數(shù)據(jù)條目刪除,也即刪除了該用戶的所有角色信息。
SQL Server數(shù)據(jù)庫(kù)無(wú)法實(shí)現(xiàn)用戶信息的級(jí)聯(lián)添加和級(jí)聯(lián)修改,故需要編寫(xiě)存儲(chǔ)過(guò)程來(lái)保證用戶信息的一致性[4]。添加用戶角色時(shí),需要使用游標(biāo),循環(huán)向AuthUserRole表插入角色數(shù)據(jù)。添加用戶的存儲(chǔ)過(guò)程的執(zhí)行流程如圖4所示。

與用戶的添加、修改和刪除類似,角色的添加、修改和刪除不僅需要修改AuthRole表,同時(shí)還要修改AuthRolePrivilege表,對(duì)AuthRolePrivilege表的操作同樣需要存儲(chǔ)過(guò)程的控制。
2.3切面編程
用戶在請(qǐng)求一個(gè)控制器(Controller)的方法(Action)前系統(tǒng)要先對(duì)用戶的身份進(jìn)行檢查,如果用戶具有執(zhí)行操作的權(quán)限則放行,如果用戶不具有執(zhí)行操作的權(quán)限,則攔截用戶的請(qǐng)求[5]。
ASP.NET MVC為系統(tǒng)開(kāi)發(fā)人員提供了Action過(guò)濾器,Action過(guò)濾器是可以自定義的屬性,用來(lái)標(biāo)記添加Action方法之前或者Action方法之后的行為到控制器的Action方法中。Action過(guò)濾器是通過(guò)繼承ActionFilterAttribute類來(lái)實(shí)現(xiàn)的一個(gè)Attribute類。ActionFilterAttribute 是一個(gè)抽象類,提供了OnActionExecuting和OnActionExecuted方法供開(kāi)發(fā)人員重寫(xiě)。ActionExecutingContext類為OnActionExecuting方法提供了上下文信息,通過(guò)該類的RouteData屬性可以獲得用戶請(qǐng)求的方法的路由信息。
在用戶成功登錄管理系統(tǒng)的同時(shí),通過(guò)用戶的ID查詢出用戶擁有的角色,再根據(jù)角色從AuthPrivilege表中取出權(quán)限,這里的權(quán)限指的是角色擁有的路由信息的集合。在執(zhí)行用戶請(qǐng)求控制器的方法前會(huì)先執(zhí)行OnActionExecuting方法,在OnActionExecuting方法中判斷用戶的會(huì)話是否過(guò)期,如果會(huì)話過(guò)期就提示用戶重新登錄管理系統(tǒng)并重定向到登錄頁(yè)面。如果會(huì)話沒(méi)有過(guò)期則利用ActionExecutingContext類取出請(qǐng)求的方法的路由信息,檢查該路由信息是否包含在用戶的路由集合里,如果包含,表明用戶擁有對(duì)該方法的執(zhí)行權(quán)限,對(duì)用戶的請(qǐng)求放行;如果不包含,表明用戶沒(méi)有對(duì)該方法的執(zhí)行權(quán)限,不允許用戶執(zhí)行該方法。該功能的程序流程如圖5所示。

3功能測(cè)試
選擇用戶部門(mén)批量處理可以批量地修改用戶的部門(mén)信息,該功能如圖6所示。同理選擇用戶角色批量處理可以批量地修改用戶的角色信息,該功能如圖7所示?!?/p>

4結(jié)論
本文針對(duì)數(shù)字化油田信息管理系統(tǒng)的數(shù)據(jù)安全和訪問(wèn)控制需求,制作了一套基于B/S架構(gòu)的權(quán)限管理系統(tǒng)。本系統(tǒng)采用RBAC權(quán)限模型來(lái)實(shí)現(xiàn)對(duì)權(quán)限的高效管理;使用ADO.NET組件訪問(wèn)SQL Server數(shù)據(jù)庫(kù)。為了保證數(shù)據(jù)的安全性,服務(wù)器端的程序必須對(duì)用戶提交的內(nèi)容做檢查;為了保證數(shù)據(jù)的一致性,數(shù)據(jù)庫(kù)采用存儲(chǔ)過(guò)程的方式修改數(shù)據(jù)表。
本系統(tǒng)有效地解決了不同身份的工作人員對(duì)油田管理系統(tǒng)的訪問(wèn)控制,保證了油田數(shù)據(jù)的安全性。
參考文獻(xiàn)
?。?] 李琛,李宇峰,陳祥光. 油田過(guò)程信息管理系統(tǒng)身份認(rèn)證與權(quán)限設(shè)定方法[J].微計(jì)算機(jī),2007,23(9):37-38.
?。?] 張琴,徐品品,楊國(guó)棟.長(zhǎng)慶油田勘探開(kāi)發(fā)數(shù)據(jù)庫(kù)安全系統(tǒng)分析與應(yīng)用[J].信息技術(shù)與標(biāo)準(zhǔn)化,2012(1):61-62.
