摘 要 權(quán)限管理是網(wǎng)絡(luò)信息系統(tǒng)中一個(gè)非常重要的部分。該文提出基于職務(wù)的用戶權(quán)限控制方法,并介紹了基于此方法的MIS系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)和系統(tǒng)實(shí)現(xiàn)算法。
關(guān)鍵字 MIS系統(tǒng); 權(quán)限控制; 職務(wù); 權(quán)限集。
1引言
權(quán)限控制是管理信息系統(tǒng)(Management Information Systems, MIS)中一個(gè)重要的組成部分。在B/S模式下,由于系統(tǒng)的用戶數(shù)目不固定,以及機(jī)構(gòu)變動(dòng)、人員調(diào)整可能比較頻繁,并且系統(tǒng)向著多應(yīng)用方向發(fā)展,因此給系統(tǒng)安全機(jī)制提出了更高的要求。如何給用戶提供一個(gè)安全的操作環(huán)境是系統(tǒng)設(shè)計(jì)者要解決的一個(gè)關(guān)鍵問題[1-4]。因而需要采用新的用戶權(quán)限控制方式來實(shí)現(xiàn)系統(tǒng)資源的安全訪問問題。
2基于職務(wù)的用戶權(quán)限控制
訪問權(quán)限控制決定了一個(gè)用戶或程序是否有權(quán)對(duì)某一特定資源執(zhí)行某種操作,傳統(tǒng)的權(quán)限控制是通過將訪問權(quán)限直接和用戶對(duì)應(yīng)起來的方式實(shí)現(xiàn)的。隨著網(wǎng)絡(luò)的普及,用戶可訪問的信息資源的結(jié)構(gòu)日趨復(fù)雜,規(guī)模也日益增大,如果繼續(xù)使用這種傳統(tǒng)的訪問權(quán)限控制機(jī)制,將使得系統(tǒng)對(duì)信息的存取權(quán)限的管理變得十分復(fù)雜和繁重。雖然有學(xué)者曾提出基于角色的訪問控制機(jī)制,以及角色層次和約束的概念來解決這個(gè)問題[1],但此機(jī)制也存在不足之處。首先,它在權(quán)限控制中針對(duì)每一個(gè)操作權(quán)限集都建立一個(gè)角色。一方面,對(duì)于很多人擁有的相同權(quán)限集建立一個(gè)角色,將給系統(tǒng)權(quán)限分配和管理帶來了很大的方便。另一方面,對(duì)于某些只有個(gè)別用戶使用的權(quán)限集合,如果也都建立角色,這將增加權(quán)限管理的負(fù)擔(dān)。其次,在這種機(jī)制下,只有系統(tǒng)管理員和功能模塊管理員可以管理用戶和角色以及分配事宜,對(duì)于系統(tǒng)權(quán)限復(fù)雜多樣并且用戶很多的網(wǎng)絡(luò)信息系統(tǒng),權(quán)限管理工作過于集中,管理員的工作量很大;并且在應(yīng)用于企業(yè)時(shí),由于企業(yè)的組織機(jī)構(gòu)復(fù)雜,這種權(quán)限管理模式只能進(jìn)行橫向的功能模塊管理,不能進(jìn)行縱向的部門管理,管理方式不夠靈活。
針對(duì)基于角色的訪問控制機(jī)制的不足,本文提出對(duì)其改進(jìn)的基于職務(wù)的用戶權(quán)限控制機(jī)制。系統(tǒng)中的職務(wù)源于企業(yè)的實(shí)際工作崗位,例如,系統(tǒng)中將職務(wù)設(shè)置為“一般員工”、“部門領(lǐng)導(dǎo)”等等,比角色更加貼近于系統(tǒng)用戶的實(shí)際工作狀況。在權(quán)限控制機(jī)制中,一個(gè)職務(wù)就代表了工作中處理某些事務(wù)的權(quán)利。在權(quán)限管理中,一個(gè)職務(wù)可以看成是一組權(quán)限的集合。一個(gè)職務(wù)可以擁有多項(xiàng)權(quán)限,一個(gè)權(quán)限可以分配給多個(gè)職務(wù);另外,一個(gè)用戶可以被賦予多個(gè)職務(wù),一個(gè)職務(wù)也可以被賦予多個(gè)用戶。職務(wù)作為中間橋梁將用戶和權(quán)限聯(lián)系起來。系統(tǒng)權(quán)限管理員則根據(jù)需要定義各種職務(wù),給每個(gè)職務(wù)分配相應(yīng)的權(quán)限;用戶則根據(jù)其實(shí)際工作崗位和責(zé)任被指派不同的職務(wù)。
2.1 特殊權(quán)限集
首先引入特殊權(quán)限集的概念。特殊權(quán)限集是只有個(gè)別用戶使用的權(quán)限集合,是針對(duì)個(gè)別用戶的職務(wù)設(shè)置的系統(tǒng)操作權(quán)限集。在給用戶分配特殊權(quán)限集時(shí),管理員只需要針對(duì)用戶的某個(gè)職務(wù)分配特殊權(quán)限。用戶登陸系統(tǒng)后,系統(tǒng)將提取用戶的職務(wù)信息,先查用戶的某個(gè)職務(wù)是否具有特殊權(quán)限集,如果有,就直接提取特殊權(quán)限集,否則提取這個(gè)職務(wù)的操作權(quán)限集。取消用戶的特殊權(quán)限集時(shí),管理員只需要取消用戶的相應(yīng)職務(wù)的特殊權(quán)限集;用戶再次登陸時(shí),系統(tǒng)提取的就是用戶的相應(yīng)職務(wù)的操作權(quán)限集。這種建立特殊權(quán)限集的方法比基于角色的訪問控制機(jī)制中新建角色、把角色分配給用戶、之后再刪除角色的處理過程要簡(jiǎn)單方便很多。因此,特殊權(quán)限集的設(shè)置,對(duì)于基于角色的訪問控制機(jī)制來說,是必要的改進(jìn)。
基于職務(wù)的用戶權(quán)限控制模型結(jié)構(gòu)圖如圖1所示。
2.2 橫向與縱向結(jié)合的權(quán)限管理
在基于職務(wù)的用戶權(quán)限控制系統(tǒng)中,不但有橫向的功能模塊分塊權(quán)限管理,也有用戶操作權(quán)限的縱向分配管理。不僅僅只有系統(tǒng)管理員和功能模塊管理員可以管理用戶和職務(wù)以及分配事宜,系統(tǒng)中用戶管理和職務(wù)管理是相互獨(dú)立的。具有用戶管理的管理員可以在系統(tǒng)中新增和刪除用戶以及修改用戶信息,但是管理員的用戶管理權(quán)限是限制在組織機(jī)構(gòu)的某一級(jí)別的某一個(gè)部門;具有職務(wù)管理的管理員也可以對(duì)職務(wù)進(jìn)行新增修改刪除操作,他的職務(wù)管理權(quán)限也是限制在組織機(jī)構(gòu)的某一級(jí)別的某一個(gè)部門。分配權(quán)限在系統(tǒng)中是一個(gè)操作權(quán)限,具有分配權(quán)限的用戶,都可以分配權(quán)限。不過,每一個(gè)具有分配權(quán)限的用戶的分配權(quán)限都受到限制:他只能夠把自己在系統(tǒng)中的操作權(quán)限分配給別的用戶,自己操作權(quán)限之外的,不能分配。這種橫向與縱向管理相結(jié)合的權(quán)限管理方法,比文獻(xiàn)[1]提出的僅有橫向的功能模塊權(quán)限管理,以及文獻(xiàn)[2]提出的權(quán)限分級(jí)管理方法要靈活很多。
用戶分配權(quán)限的過程如圖2所示。
分配操作權(quán)限時(shí),操作權(quán)限將按照系統(tǒng)的功能模塊分組。給職務(wù)分配權(quán)限時(shí),如果這個(gè)職務(wù)擁有某一個(gè)功能模塊的所有操作權(quán)限,就可以直接選擇這個(gè)功能模塊的操作權(quán)限組,從而這個(gè)職務(wù)就具有了這個(gè)功能模塊的所有操作權(quán)限。這樣就不必將功能模塊中的每一個(gè)操作權(quán)限都選一次,節(jié)省了操作,簡(jiǎn)化了權(quán)限分配。當(dāng)然,也可以按照職務(wù)需求選擇某一功能模塊操作權(quán)限組中的某一個(gè)操作權(quán)限。
2.3 用戶訪問控制
一個(gè)系統(tǒng)用戶可以通過他具有的職務(wù)對(duì)應(yīng)的操作權(quán)限來判斷他可以訪問的系統(tǒng)資源和對(duì)該資源可進(jìn)行的操作。在用戶進(jìn)人系統(tǒng)后,系統(tǒng)只顯示那些用戶有權(quán)訪問的功能菜單以及菜單中用戶有權(quán)操作的功能按鈕,將那些用戶不具有訪問權(quán)限的功能菜單以及用戶有權(quán)訪問的功能菜單中用戶無操作權(quán)限的功能按鈕設(shè)置為對(duì)該用戶不可見。這樣用戶在進(jìn)人系統(tǒng)后只能看到他擁有訪問權(quán)限的那些功能菜單以及菜單中用戶有權(quán)操作的功能按鈕。
基于職務(wù)的用戶權(quán)限控制在企業(yè)應(yīng)用中具有很大的優(yōu)勢(shì):
(1) 將企業(yè)各部門的職務(wù)映射到網(wǎng)絡(luò)信息系統(tǒng)組織機(jī)構(gòu)中的職務(wù),非常直觀,易于應(yīng)用;
(2) 一旦職務(wù)的權(quán)限初始設(shè)置好之后,就不再需要做大的調(diào)整。因?yàn)闄?quán)限是直接與職務(wù)相對(duì)應(yīng),而不是用戶。即使是系統(tǒng)用戶的人員調(diào)動(dòng)頻繁,但是工作崗位本身卻是很少變化的。由于權(quán)限控制是基于職務(wù),而不是基于用戶的,所以企業(yè)人員的調(diào)動(dòng)并不會(huì)太多的影響到權(quán)限控制機(jī)制;
(3) 特殊權(quán)限的設(shè)置為用戶的臨時(shí)工作需要提供了很大的方便。比如用戶被委托擔(dān)任某部門的資料管理員一段時(shí)間,那么該部門系統(tǒng)管理員只需要給這個(gè)用戶的職務(wù)分配部門資料管理員等特殊權(quán)限,用戶就能夠?qū)υ摬块T的資料進(jìn)行管理;在用戶完成工作之后,該部門系統(tǒng)管理員只需要取消該用戶的職務(wù)的特殊權(quán)限,該用戶就沒有了管理部門資料的權(quán)限;
(4) 橫向與縱向相結(jié)合的權(quán)限管理方式,既明確的對(duì)各個(gè)功能模塊進(jìn)行了權(quán)限分快管理,也可以很方便的把用戶管理、職務(wù)管理、權(quán)限分配事宜的工作分到各個(gè)部門,并且有分配權(quán)限的用戶只能把自己的操作權(quán)限分配給別人、操作權(quán)限之外的不能分配的系統(tǒng)限制保證了不會(huì)權(quán)限擴(kuò)大化。
3 基于職務(wù)的用戶權(quán)限控制機(jī)制的系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)
數(shù)據(jù)庫的字段及其數(shù)據(jù)類型設(shè)計(jì)如表1至表5所示:
表1 記錄了組織機(jī)構(gòu)的所有部門信息,包括部門之間上下級(jí)關(guān)系。
表1 部門表 APPARTMENT
字段名稱 | 數(shù)據(jù)類型 | 備注 |
APPART_ID | VARCHAR2 | 唯一關(guān)鍵字,部門編號(hào) |
APPART_SPR_ID | VARCHAR2 | 上級(jí)部門編號(hào) |
APPART_NAME | VARCHAR2 | 部門名稱 |
表2記錄了各個(gè)部門的人員基本信息,其中用戶名字段是作為系統(tǒng)用戶登錄時(shí)用的,是唯一字段。
表2 職工表 PERSON
字段名稱 | 數(shù)據(jù)類型 | 備注 |
APPART_ID | VARCHAR2 | 職工所在部門編號(hào) |
PERSON_ID | VARCHAR2 | 職工唯一編號(hào) |
PERSON_NAME | VARCHAR2 | 姓名 |
USER_ID | VARCHAR2 | 用戶名 |
USER_PSW | VARCHAR2 | 密碼 |
表3記錄了系統(tǒng)中所有操作權(quán)限,系統(tǒng)中操作權(quán)限具體到每一個(gè)需要控制的功能菜單和按鈕。作為操作權(quán)限,功能菜單也可以看作按鈕,在按鈕表中統(tǒng)一管理。其中是否默認(rèn)操作字段記錄了系統(tǒng)的功能菜單或者按鈕是否是默認(rèn)操作,默認(rèn)操作即系統(tǒng)用戶都可以訪問和操作。
表3 按鈕權(quán)限表 BUTTON_ACCESS
字段名稱 | 數(shù)據(jù)類型 | 備注 |
BUTTON_ID | NUMBER | 唯一關(guān)鍵字,菜單按鈕編號(hào) |
BUTTON_NAME | VARCHAR2 | 菜單按鈕名稱 |
ACCESS_DEFAULT | NUMBER | 是否為默認(rèn)操作 1是0非 |
表4 記錄了系統(tǒng)用戶的職務(wù)信息,一個(gè)職工可以同時(shí)在幾個(gè)部門擔(dān)任職務(wù),并且在不同部門有不同的操作權(quán)限。其中ACCESS_STR字段是表3中的一系列BUTTON_ID用逗號(hào)連接起來組成的字符串,它記錄了用戶所任職務(wù)的特殊權(quán)限集。
表4 職工職務(wù)表 PERSON_DUTY
字段名稱 | 數(shù)據(jù)類型 | 備注 |
PERSON_ID | VARCHAR2 | 職工編號(hào) |
APPART_ID | VARCHAR2 | 職工所任職務(wù)的部門編號(hào) |
DUTY_ID | NUMBER | 職工所任職務(wù)的編號(hào) |
ACCESS_STR | VARCHAR2 | 特殊權(quán)限集 |
表5 記錄了組織機(jī)構(gòu)各個(gè)部門的所有職務(wù)信息,其中ACCESS_STR字段記錄了各個(gè)職務(wù)的操作權(quán)限集。當(dāng)表4中某條記錄的ACCESS_STR字段為空時(shí),則根據(jù)DUTY_ID聯(lián)合查詢表5的ACCESS_STR字段,獲得用戶所任職務(wù)的操作權(quán)限集。如果表5某條記錄的ACCESS_STR字段為空時(shí),就要提取表3中的默認(rèn)操作權(quán)限。
表5 職務(wù)表 DUTY
字段名稱 | 數(shù)據(jù)類型 | 備注 |
APPART_ID | VARCHAR2 | 部門編號(hào) |
DUTY_ID | NUMBER | 部門中的職務(wù)編號(hào) |
DUTY_NAME | VARCHAR2 | 職務(wù)名稱 |
ACCESS_STR | VARCHAR2 | 職務(wù)的操作權(quán)限集 |
系統(tǒng)對(duì)每一個(gè)需要加以權(quán)限控制的系統(tǒng)功能菜單和按鈕都作了編號(hào),并把這些按鈕信息存儲(chǔ)在表3中,其中ACCESS_DEFAULT (是否默認(rèn)操作)字段為1代表了所有系統(tǒng)用戶都可訪問和操作該功能菜單或按鈕。
要提取某登陸用戶的權(quán)限時(shí),先要在PERSON_DUTY表中查找該用戶對(duì)應(yīng)的職工編號(hào)的職務(wù)記錄,他有可能在多個(gè)部門任職,所以他在不同部門的操作權(quán)限有可能不一樣,即他在不同部門的職務(wù)所對(duì)應(yīng)的ACCESS_STR字段值不同。如果用戶在某部門的所有職務(wù)的ACCESS_STR字段值不為空,則取這些權(quán)限的總和作為該用戶在該部門中的操作權(quán)限;如果用戶在某部門的某些職務(wù)的ACCESS_STR字段為空值,則根據(jù)DUTY_ID聯(lián)合查詢DUTY表,查找該職務(wù)的操作權(quán)限集,取得的權(quán)限集的總和再與之前在PERSON_DUTY表中提取的特殊權(quán)限集取并集,所得權(quán)限集就是該用戶在該部門的全部操作權(quán)限;如果用戶在某部門的職務(wù)都沒有被分配權(quán)限,則需要提取BUTTON_ACCESS表中的默認(rèn)操作權(quán)限作為用戶在該部門的權(quán)限。
PERSON_DUTY表中ACCESS_STR字段的值是賦給單獨(dú)某個(gè)用戶的,所以如果想增加或限制該用戶的權(quán)限,可以加入或減去該用戶的特殊權(quán)限集,即該用戶所有可操作的功能菜單或按鈕的編號(hào)集合。而DUTY表中ACCESS_STR字段值不是針對(duì)某個(gè)用戶,而是針對(duì)某個(gè)職務(wù)的,如果企業(yè)內(nèi)部有人員調(diào)動(dòng)或者某個(gè)職工被撤消了某職務(wù),則DUTY表中這個(gè)ACCESS_STR字段值還是存在的,不同的只是該職工沒有了該職務(wù),該職務(wù)對(duì)應(yīng)的操作權(quán)限集他也不再擁有。這就實(shí)現(xiàn)了用戶和職務(wù)的雙重管理。
4系統(tǒng)實(shí)現(xiàn)
在用戶登陸時(shí),首先驗(yàn)證該用戶在系統(tǒng)中身份,即用戶名和用戶密碼,然后根據(jù)用戶唯一的職工編號(hào)取得他有權(quán)訪問的系統(tǒng)功能菜單和按鈕的操作權(quán)限編號(hào)集。取得用戶操作權(quán)限集算法流程描述如下:
⑴ 取得用戶在PERSON_DUTY表中的特殊權(quán)限集。
⑵ 當(dāng)在PERSON_DUTY中特殊權(quán)限集為空時(shí),提取DUTY表中用戶擔(dān)任的職務(wù)的操作權(quán)限編號(hào)集。
⑶ 如果職務(wù)操作權(quán)限集為空,則提取BUTTON_ACCESS表中的默認(rèn)操作權(quán)限。
⑷ 返回權(quán)限信息總和。
在系統(tǒng)的組織機(jī)構(gòu)模塊,組織機(jī)構(gòu)樹形結(jié)構(gòu)只顯示用戶有權(quán)訪問的部門。用戶進(jìn)入組織機(jī)構(gòu)模塊時(shí),系統(tǒng)根據(jù)用戶的職工編號(hào)取得該用戶有權(quán)訪問的部門以及在此部門的操作權(quán)限編號(hào)集,并將這些信息以字符串的形式記錄:“部門編號(hào)1:權(quán)限編號(hào)集1;部門編號(hào)2:權(quán)限編號(hào)集2;……部門編號(hào)m:權(quán)限編號(hào)集m“。
當(dāng)用戶選擇其中一個(gè)部門,系統(tǒng)就記錄下來該部門編號(hào),提取該部門的信息以及用戶在該部門的操作權(quán)限編號(hào)集,然后根據(jù)權(quán)限編號(hào)集顯示該部門的功能菜單和按鈕。
實(shí)現(xiàn)控制部門菜單顯示的算法函數(shù)如下(JavaScript語言編寫):
function showmenu() {//注釋:菜單定位在用戶選擇的部門
menu.style.visibility = "visible";//注釋:顯示菜單
var appart_id = document.all.appart_id.value; //注釋:取得用戶選擇的部門編號(hào)
var access_str = document.all.access_str.value; //注釋:取得權(quán)限信息
var appart_access = access_str.split(";");//注釋:將各個(gè)部門的信息分開
for(var i=0; i<appart_access.length; i++){
var str = appart_access[i].split(":");//注釋:將部門與該部門的權(quán)限編號(hào)集分開
if(str[0] == appart_id){//注釋:部門編號(hào)和用戶選擇的部門編號(hào)相同
var access = str[1].split(",");
for(var j=0; j<access.length; j++ ){
if(access[j]=="1")//注釋:1為某部門菜單中某個(gè)按鈕的編號(hào)
menu_btn.style.display = "block";//注釋:顯示該按鈕
……
}
}
}
}
這樣,用戶登陸后,如果在不同部門的操作權(quán)限不一樣,則系統(tǒng)顯示的部門菜單按鈕也不相同。這樣用戶就只能夠訪問和操作組織機(jī)構(gòu)各個(gè)部門中該用戶有權(quán)訪問的功能菜單和按鈕。
這種權(quán)限控制方法,使得用戶有權(quán)訪問的功能菜單和按鈕都顯示在系統(tǒng)中并且可操作,用戶無權(quán)訪問的系統(tǒng)功能菜單或按鈕對(duì)用戶不可見,反過來系統(tǒng)中所有顯示的功能菜單和按鈕用戶都能夠訪問和操作。這就實(shí)現(xiàn)了用戶的訪問權(quán)限控制。
5結(jié)束語
本文所提出的基于職務(wù)的用戶權(quán)限控制模型以及模型實(shí)現(xiàn)中提出的算法可以有效地控制用戶對(duì)系統(tǒng)資源的訪問權(quán)限,從而防止了對(duì)系統(tǒng)資源的非法訪問,實(shí)現(xiàn)了網(wǎng)絡(luò)信息系統(tǒng)在B/S模式下系統(tǒng)資源的用戶訪問權(quán)限控制。本系統(tǒng)提出的權(quán)限控制機(jī)制和算法已經(jīng)被應(yīng)用于兩個(gè)項(xiàng)目的開發(fā)中,并得到了良好的運(yùn)行效果。
參考文獻(xiàn):
[1] 林磊,駱建彬,鄧憲,宋志剛. 管理信息系統(tǒng)中基于角色的權(quán)限控制[J]. 計(jì)算機(jī)應(yīng)用研究,2002,P82-84.
[2] 申寶成,光艷良,夏桂梅. 加強(qiáng)數(shù)據(jù)庫應(yīng)用安全的權(quán)限分級(jí)方法及應(yīng)用[J]. 太原重型機(jī)械學(xué)院學(xué)報(bào),2002,2(23).
[3] 陳軍,伍天玉,曾志浩,陳治平. 基于權(quán)限沖突的擴(kuò)展權(quán)限管理方法[J].長(zhǎng)沙電力學(xué)院學(xué)報(bào),2005,1(20).
[4] 宋光明,高俊,易善勇. 用戶登錄權(quán)限分配的模型與算法實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程,2002,7(28).
[信隆論文網(wǎng):http://www.xllw.cn 聯(lián)系方式:1、QQ:180347747;QQ客戶超級(jí)群:51835511、QQ客戶高級(jí)群:78483171、QQ編輯平臺(tái)高級(jí)群:78490570; 2、MSN:xllw8@hotmail.com;3、電話:020-61131496;4、手機(jī):15915860696(只支持短信);投稿郵箱:6826298@163.com]