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