摘要:提出了一個工作流管理中基于規(guī)則策略的訪問控制模型,給出了規(guī)則模型的集合表達和定義,重點分析了規(guī)則解釋器的實現(xiàn)和關(guān)鍵算法,最后給出了一個應(yīng)用。
關(guān)鍵詞: 工作流管理系統(tǒng); 訪問控制; 基于角色的訪問控制; 規(guī)則表達式
中圖分類號:TP309文獻標(biāo)志碼:A
文章編號:1001-3695(2008)03-0885-03
工作流管理系統(tǒng)是一個快速發(fā)展的領(lǐng)域,它使用戶可以設(shè)計、分析、執(zhí)行和監(jiān)控其業(yè)務(wù)過程,對流程進行高效管理。隨著工作流管理系統(tǒng)的應(yīng)用日趨廣泛,其安全問題引起了人們越來越多的關(guān)注。信息安全的基本服務(wù)為認(rèn)證、機密性、訪問控制、數(shù)據(jù)完整和不可否認(rèn),受保護的數(shù)據(jù)有工作流控制數(shù)據(jù)、工作流相關(guān)數(shù)據(jù)和工作流應(yīng)用數(shù)據(jù)。本文關(guān)注的是應(yīng)用數(shù)據(jù)的訪問控制保護。
當(dāng)前在工作流管理系統(tǒng)中進行應(yīng)用數(shù)據(jù)訪問控制的主要是RBAC機制。為了實現(xiàn)與業(yè)務(wù)邏輯相關(guān)的細(xì)粒度權(quán)限控制,通用做法是提供一種上下文敏感的能夠擴展到較細(xì)粒度的訪問控制模型。例如,文獻[1]通過向工作流引擎提交角色屬性認(rèn)證的方法,提出了一種在不影響現(xiàn)有網(wǎng)絡(luò)工作流系統(tǒng)的前提下使用RBAC的實驗框架,保證了任務(wù)和過程只能由限定的用戶完成。文獻[2]將訪問許可歸結(jié)為實體之間的沖突,提出了沖突實體管理范式(conflicting entities administration paradigm,CoAP),很好地解決了工作流環(huán)境中的責(zé)任分離問題。在細(xì)化控制目標(biāo)粒度、歸納訪問控制約束、擴展RBAC模型以適應(yīng)對工作流應(yīng)用數(shù)據(jù)嚴(yán)格保護的過程中,人們做了很多有意義的工作。例如,文獻[3]從一個醫(yī)護領(lǐng)域的例子出發(fā),提出了工作流系統(tǒng)中基于謂詞表達式的訪問控制模型。文獻[4]中定義了一種以邏輯程序檢查授權(quán)規(guī)約的語言,并基于該語言提出了角色分配計劃算法。該算法得到一個將角色和用戶分派到不同任務(wù)的計劃,從而滿足相關(guān)的訪問許可。文獻[5]將工作流看做綁定了授權(quán)規(guī)約的任務(wù)集合的視圖,認(rèn)為訪問控制的各種規(guī)約可以由通用形式即分配規(guī)約(entailment constraint)表示,從而將工作流管理信息和訪問控制信息更好地結(jié)合起來。文獻[6]給出了如何利用應(yīng)用程序中的上下文信息作出訪問控制判斷的抽象描述,并以一種面向?qū)ο蟮恼Z言為例實現(xiàn)了與上下文相關(guān)的細(xì)粒度權(quán)限的限制。這些研究通常以特定的應(yīng)用場景為出發(fā)點,使用不同的實現(xiàn)形式如謂詞表達式[3]、規(guī)約定義語言[4]、分配規(guī)約[5]、上下文約束[6]等,很好地解決了權(quán)限分離的問題。但是工作流管理系統(tǒng)中的業(yè)務(wù)規(guī)則千差萬別,通常不能使用語言或算法等方法進行一般化處理,需要一個具有更強表達能力的系統(tǒng)來表示各種復(fù)雜的授權(quán)。
筆者認(rèn)為各種訪問許可規(guī)則均可以被抽象為規(guī)則表達式,由此提出了一個工作流管理中基于規(guī)則策略的訪問控制模型,將訪問許可規(guī)則從工作流管理系統(tǒng)中分離出來,構(gòu)建了一個相對獨立的規(guī)則表達式系統(tǒng)模型,從而提供靈活、
獨立、可復(fù)用的授權(quán)規(guī)則管理。
1規(guī)則模型
1.1工作流訪問控制模型
基于角色的工作流環(huán)境中,訪問控制模型一般定義為[7,8]
M={roles,users,sessions,permissions,tasks,process}。
該多元組中的元素為:
roles表示角色集合,通常指在一個組織背景下的職能,根據(jù)授權(quán)附有相關(guān)語義;
users表示用戶集合;
sessions表示會話集合,它是用戶使用系統(tǒng)的特定實例,定義了一個活動角色的子集;
OBJS表示對象的集合;
OPS表示對對象實施訪問操作的集合,如創(chuàng)建、修改、刪除、查看、更新等;
permissionsOBJS×OPS表示權(quán)限集合,是對象與操作之間的多對多關(guān)系;
tasks表示一個工作流中任務(wù)的集合;
process=2tasks表示業(yè)務(wù)流程,它是由若干任務(wù)組成的集合。
1.2規(guī)則模型的集合表達
在工作流訪問控制模型的基礎(chǔ)上,參照RBAC標(biāo)準(zhǔn)[9],本文定義規(guī)則模型為
M={operands,operators,rules}。
該多元組中的元素為:
constants是常量集合;
attributes是實體對象的安全屬性集合,環(huán)境變量看做是sessions的安全屬性;
operands=constantsuattributes表示操作數(shù)集合;
operators表示運算符集合,包括比較運算符、集合運算符、布爾運算符等;
domain(oprnd:operands)是獲得操作數(shù)運算的值域的函數(shù);
domain(oprtr:operators)是獲得操作符運算的值域的函數(shù);
rules=2operands×operators, c∈rules: c|→{(oprnd1,…, oprndsx,oprtr)| oprnd1,…, oprndsx∈operands,oprtr∈operators}∧{domain(oprnd1)∪…∪ domain(oprndsx)domain(oprtr)},表示規(guī)則集合;
permissionAssignmentspermissions×roles表示角色與權(quán)限的多對多分配關(guān)系;
userRoleAssignmentsusers×roles表示用戶與角色的多對多關(guān)系;
taskParticipantstasks×roles表示角色參與完成任務(wù)的多對多關(guān)系;
taskAssignmentstasks×users表示任務(wù)分配到用戶的多對多關(guān)系;
authentications={permissions, permissionAssignments, userRoleAssignments, taskParticipants,taskAssignments }是工作流實體之間的關(guān)系,統(tǒng)一稱之為授權(quán);
constraintedAuthentica ̄tionsauthentications×rules表示受規(guī)則約束的授權(quán)。
在這個定義下,工作流可以看做是一組有序的taskParticipant的集合,訪問控制可以看做對授權(quán)authentications的規(guī)則約束檢查,即是否限制在constraintedAuthentications中。從文獻[10]中的論述可以看到,各種策略規(guī)則可以形式化為操作數(shù)集合上的關(guān)系、集合與布爾運算和訪問許可位元(permission bit)的配對,表示對任務(wù)分配和對象訪問的允許或禁止。
1.3規(guī)則的定義
本文對規(guī)則模型中具體授權(quán)規(guī)則的定義如下:
operands:
〈wfEntity〉 ::= 〈atomVariable〉|〈wfFun〉 ′(′ 〈wfEntity〉 {,〈wfEntity〉} ′)′
〈wfSet〉 ::= 〈setVariable〉|′(′ 〈wfEntity〉 {,〈wfEntity〉} ′)′
operators:
〈compareExp〉 ::= 〈wfEntity〉 〈comOp〉 〈wfEntity〉
其中:〈ComOp〉 ::= ′=′ | ′<>′ | ′>′ | ′≥′ | ′<′ | ′≤′
〈setExp〉 ::= 〈wfEntity〉 〈elementOp〉〈 wfSet〉 | 〈wfSet〉 〈setOp〉 〈wfSet〉
其中:〈elementOp〉 ::=′∈′|′′,〈setOp〉 ::= ′′|′′|′′
〈andExp〉 ::= 〈rule〉 ′and′ 〈rule〉
〈orExp〉 ::= 〈rule〉 ′or′ 〈rule〉
〈notExp〉 ::= ′not′ 〈rule〉
rules:
〈rule〉 ::= 〈compareExp〉| 〈setExp〉 | 〈andExp〉 | 〈orExp〉 | 〈notExp〉
一條規(guī)則是比較、集合或布爾運算的一種。規(guī)則可以由工作流實體之間的比較運算獲得,也可以由實體和實體集合以及實體集合之間的集合運算獲得,還可以對規(guī)則進行布爾運算以產(chǎn)生新的規(guī)則。
采用這個規(guī)則表達式定義可以充分滿足復(fù)雜授權(quán)規(guī)則的需求。例如規(guī)則R1,如果一個當(dāng)前角色為“申請登記”的用戶U執(zhí)行了任務(wù)T1,那么他不能執(zhí)行任務(wù)T2,可以表示為 P(R1)=not(((u|→t1) ∈taskRoleParticipant)∧((u|→t2)∈taskRoleParticipant)∧((u|→Rregister)∈userRoleAssignments))。
2規(guī)則解釋器的實現(xiàn)
本文中使用規(guī)則解釋器實現(xiàn)訪問控制模型,從而提供細(xì)粒度、可復(fù)用的授權(quán)規(guī)則管理。模型實現(xiàn)如圖1所示。
圖1Rule解釋器
圖1中rule類是一個抽象表達式類,抽象表達式聲明了一個抽象的規(guī)則解釋操作。其中:_conflictEntities是實體變量wfEntity的集合,它定義了對應(yīng)規(guī)則的沖突實體集,由一個hash_map模板容器類實現(xiàn)。Rule的兩個主要成員函數(shù):a)是求值函數(shù)evaluate,即在某個上下文環(huán)境中計算rule的值。Rule中的變量在規(guī)則解釋時由上下文對象context根據(jù)當(dāng)前rule涉及的工作流實體wfEntity或?qū)嶓w集合wfSet進行賦值。b)替換函數(shù)replace,即用一個規(guī)則替代其他規(guī)則中的一個變量以產(chǎn)生新的規(guī)則,從而可以表示復(fù)雜多變的授權(quán)規(guī)則。
Context是一個全局類,表示運行解釋時所需的上下文實例,如當(dāng)前用戶、執(zhí)行的任務(wù)、執(zhí)行的操作以及操作對象和其他環(huán)境變量等。運行時為了將對象OBJS的操作OPS和規(guī)則表達式中的操作數(shù)關(guān)聯(lián),筆者使用了一種稱為對象信息映射的機制。這種機制對于所有的工作流實體和應(yīng)用對象都實現(xiàn)了一個注冊方法,每個注冊方法都會對應(yīng)于一個規(guī)則系統(tǒng)中的一個操作數(shù)。例如,在對象操作OPS中,對象屬性對應(yīng)規(guī)則表達式中的簡單操作數(shù),對象函數(shù)對應(yīng)規(guī)則表達式中的復(fù)雜操作數(shù),從而建立了從對象操作OPS到規(guī)則運算表達式操作數(shù)的映射。相關(guān)的規(guī)則運算將會限制在對象OBJS這個抽象層次上。
WfEntity可以是rule中的一個變量t,也可以是一個常量,如某個任務(wù)T1,還可以作為實體函數(shù)wfFun的參數(shù)或結(jié)果。WfSet是wfEntity的集合,它可以是一個實體函數(shù)wfFun的返回值,也可以是一個集合常量。
RuleAtomOperand是一個抽象表達式的操作數(shù),作為抽象表達式rule的子類compareExp或setExp的成員變量被實現(xiàn)。RuleSetOperand是若干ruleAtomOperand的集合,用于完成集合運算終結(jié)符的解釋。
CompareExp表示wfEntity之間的比較表達式。WfEntity的比較包括是否相等,對應(yīng)于定義中的“=”“<>”;對于角色實體來說還有可能表示繼承關(guān)系;對于任務(wù)來說可能表示組成任務(wù)的子任務(wù)和這個任務(wù)之間的隸屬關(guān)系,對應(yīng)于定義中的“>”“<”,等等。
SetExp表示元素包含elementOfExp和集合包含setCompareExp兩種集合表達式。元素包含表示一個實體wfEntity和一個wfSet之間的包含關(guān)系。當(dāng)wfEntity是wfSet的一個元素時,對應(yīng)于定義中的wfEntityWfSet。集合包含表示兩個實體集合wfSet之間的包含關(guān)系。
AndExp、notExp、orExp是非終結(jié)符表達式。它們使用一個抽象的rule指針,各自維護了一組rule實例變量作為操作數(shù)并對其作布爾運算。這個rule指針可能指向它們自身、compareExp或setExp。
3關(guān)鍵算法
在任務(wù)分配過程assignUsertoTask中,將任務(wù)task分配給用戶user時作授權(quán)規(guī)則檢查。它首先檢查用戶是否具有執(zhí)行任務(wù)所需的角色權(quán)限,滿足條件后再檢查相應(yīng)的授權(quán)規(guī)則。如果成功則返回對應(yīng)的taskAssignment,空對象表示不符合規(guī)則約束。
TaskAssignment * assignUsertoTask (user : ID,task : ID) {
boolean lb_passed=true;
lb_passed=checkUserQualified(user, task);
//檢查user是否具有執(zhí)行任務(wù)所需的角色權(quán)限
if lb_passed //如果具有執(zhí)行任務(wù)的角色,檢查相應(yīng)的授權(quán)規(guī)則
{//獲得與任務(wù)task相關(guān)的taskAssignment授權(quán)關(guān)系集合
Authentications=task.getTaskAssignments();
/*獲得與用戶user相關(guān)的taskAssignment授權(quán)關(guān)系集合,并與authentications集合合并*/
Authentications=authentications∪user.getTaskAssignments();
for every authentication in authentications{
//對于authentications集合中的每個authentication,獲取對應(yīng)規(guī)則
rule=GetAuthenticationRule(Authentication);
lb_passed = rule.Evaluate(); //得到規(guī)則的運算結(jié)果
if !(lb_passed) exit; //若授權(quán)失敗,跳出循環(huán)結(jié)束任務(wù)分配
}
if lb_passed //若授權(quán)成功,分配任務(wù)
newTaskAssignment = new TaskAssignment(task, user);
else
newTaskAssignment=1; //否則返回失敗標(biāo)志
return newTaskAssignment;
}
其中:檢查用戶是否具有執(zhí)行任務(wù)的角色權(quán)限,是任務(wù)分配的前提。
Boolean checkUserQualified(user: ID, task: ID){
Boolean lb_passed=1;
UserRoles=assignedUserRoles(user);
//獲得用戶所能扮演的角色集合
TaskRoles=participantTaskRoles(task);
//獲得完成任務(wù)所需具備的角色集合
if taskRolesuserRoles
//判斷用戶扮演的角色集合包括完成任務(wù)所需的角色集合
lb_passed = true;//用戶具有執(zhí)行任務(wù)的資格
else
lb_passed = 1;//否則,用戶不具備執(zhí)行任務(wù)的資格
return lb_passed;
}
在對象訪問過程中,對象層次上的規(guī)則檢查chessAccess在用戶申請對對象進行操作時觸發(fā)。它根據(jù)用戶、對象及操作來判斷訪問控制結(jié)果。首先判斷當(dāng)前用戶要求的對象操作是否屬于用戶的權(quán)限集合;其次判斷相關(guān)的授權(quán)規(guī)則是否滿足。
Boolean checkAccess(user: ID, ojbect: ID, operation: ID){
boolean lb_passed=true;
new permissionUnderCheck(object, operation);
//得到用戶要求的權(quán)限
Permissions=userPermissions(user); //得到用戶所具有的權(quán)限
//判斷用戶是否具有要求的權(quán)限
if permissionUnderCheckepermissions{
//這里的授權(quán)就是指用戶所具有的對象上的權(quán)限
Authentications=permissions
for every authentication in authentications{
//對于authentications集合中的每個authentication,獲取對應(yīng)規(guī)則
rule=getAuthenticationRule(authentication);
lb_passed = rule.Evaluate(); //得到規(guī)則的運算結(jié)果
if ! lb_passed exit; //如果為1,跳出循環(huán),禁止用戶訪問
}
}
else
lb_passed = 1;//禁止用戶訪問和操作
return lb_passed
}
4結(jié)束語
本文給出了工作流管理系統(tǒng)中訪問控制的規(guī)則表達。其中規(guī)則解釋器的操作數(shù)由工作流實體類提供,使用實體類提供的各種函數(shù),通過對象信息映射系統(tǒng)將其映射到規(guī)則表達式系統(tǒng)中,所以規(guī)則表達式具有很靈活的表達能力,可以表示各種特定應(yīng)用的授權(quán)規(guī)則。
在筆者開發(fā)的法院信息化工程法院綜合信息系統(tǒng)中,建立和應(yīng)用了基于規(guī)則策略的訪問控制模型。法院綜合信息系統(tǒng)是在江蘇省和天津市100多家法院使用的基于關(guān)系數(shù)據(jù)庫Sybase的大型應(yīng)用系統(tǒng)。法院的業(yè)務(wù)有很強的流程性,其承辦人變更、審限管理等流程中涉及的訪問許可規(guī)則會根據(jù)不同法院的管理模式而變化,而且針對不同的數(shù)據(jù)對象會有不同的操作權(quán)限限制,所以對訪問控制提出了較為復(fù)雜的要求。本文使用工作流來對業(yè)務(wù)過程進行建模,并將應(yīng)用數(shù)據(jù)的所有授權(quán)規(guī)則存放在一個規(guī)則庫中。這些規(guī)則根據(jù)應(yīng)用程序的上下文配置,由會話期間的對象訪問事件觸發(fā),使用獨立的規(guī)則解釋器進行解釋,很好地簡化了業(yè)務(wù)過程中的授權(quán)管理。而且使用者可以根據(jù)本法院不同的流程和權(quán)限設(shè)置修改授權(quán)規(guī)則,從而提高了系統(tǒng)的授權(quán)靈活性。
參考文獻:
[1]AHN G J, SANDHU R, KANG M, et al. Injecting RBAC to secure a Webbased workflow[C]//Proc of the 5th ACM Workshop on Rolebased Access Control. 2000:110.
[2]BOTHA R A, ELOFF J H P. Separation of duties for access control enforcement in workflow environment[J]. IBM System Journal EndtoEnd Security, 2001,40(3):666-682.
[3]WU S L, SHETH A, MILLER J, et al. Authorization and access control of application data in workflow systems[J]. Journal of Intelligent Information System, 2002,18(1):71-94.
[4]BERTINO E, FERRARI E, ATLURI V. The specification and enforcement of authorization constrains in workflow management systems[J]. ACM Transactions on Information and System Security, 1999,2(1):65104.
[5]CRAMPTON J. On the satisfiablility of constraints in workflow systems[EB/OL].(2004). http://www.rhul.ac.uk/ mathematics/techreports.
[6]STREMBECK M, NEUMANN G. An integrated approach to engineer and enforce context constraints in RBAC environments[J]. ACM Transactions on Information and System Security, 2004,7(3):392-427.
[7]ESSMArR W, PROBST S, WEIPPL E. Rolebased access controls: status, disseminations, and prospects for generic security mechanisms[J]. Electronic Commerce Research, 2004, 4(1-2):127156.
[8]BOTHA R A. CoSAWoE:a model for context sensitive access control in workflow environments[D]. [S.l.]: Department of Computer Science, Rand Afarikanns University, 2001: 79-85.
[9]FERRAIOLO D F, SANDHU R, GAVRILA S. Proposed NIST stan ̄dard for rolebased access control[J]. ACM Transactions on Information and System Security, 2001,4(3):224-274.
[10]COVINGTON M J, LONG Wende, SRINIVASAN S. Securing contextaware applications using environment roles[C]//Proc of the 6th ACM Symposium on Access Control Models and Technologies. 2001: 10-20.
“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文”