专利名称:基于安全视图的xml访问控制方法
技术领域:
本发明涉及的是一种计算机网络安全技术领域的方法,具体是一种基于安全视图 的XML访问控制方法。
背景技术:
作为一种标记语言,XML将内容和显示格式分离开来,并且描述了文档中的文本结 构。不同于HTML,在XML中用户可以定义自己的标记语言,因此XML更具有可扩展性,在网 络中受到广泛应用,已经成为网上数据和文档传输的标准。安全是互联网业务发展的前提, 于是XML文档的安全成为研究者和开发者关心的问题。其中,信息的保密性和完整性是信 息安全的重要方面,为了保证XML文档中的信息不受到非授权用户的查看和修改,必须控 制用户对XML文档的访问。 访问控制策略包括自主访问控制(DAC)、强制访问控制(MAC)以及基于角色的访 问控制(RBAC)策略。RBAC是近年来安全访问控制领域的热点。它在用户和权限之间引入 角色这个中介。安全管理人员根据需要定义各种角色,并设置合适的访问权限,而用户根据 其职责和资历被指派为不同的角色。由于XML文档中可能包含敏感性程度不同的数据,例 如员工信息中的工资信息敏感性程度就比其他信息要高,用户对这些信息的访问权限是不 同的,因此必须实现细粒度的访问控制。实现访问控制有很多机制,例如传统的访问控制体 系下使用的访问控制矩阵、ACL等机制。在关系数据库中,视图是实现细粒度访问控制的一 种常用手段。因此可以通过视图技术来隐藏用户无权访问的XML数据对象,这样既保证了 数据安全,也不会改变用户对XML文档的使用方式。 经过对现有文献检索发现,中国专利申请号200610033602. 2,公开号为 CN1859402,名称为《XML文档管理系统及其方法与XML文档访问控制方法》,该技术中实现 了 XML文档的读取、写入、删除、搜索操作的访问控制,其具体方法为首先XML文档管理客 户端向XML文档管理服务器发出XML文档管理操作请求;XML文档管理服务器接收所述XML 文档管理客户端的XML文档管理操作请求并判断XML文档管理客户端的请求是否满足所 述XML文档管理操作的委托授权规则的生效条件;最后当XML文档管理客户端的请求满足 XML文档管理操作的委托授权规则的生效条件时,执行规则规定的XML文档管理操作,否则 执行非授权委托处理过程。但是该技术对每一次的客户端请求,需要通过消息交互判断其 是否满足权限规则的生效条件,造成处理效率偏低。 又经检索发现,Wenfei Fan, Chee-Yong Chan等人发表的《Secure XML Querying withSecurity Views (基于安全视图的XML安全查询)》、《Rewriting Regular XPath Queries on XMLViews (XML视图上的XPath查询重写)》以及Gabriel Kuper, Fabio Massacci, NataliyaRassadko发表的{Generalized XML Security Views (通用的XML安 全视图)》,研究了基于安全视图的XML查询以及路径重写,然而这些技术建立的是DTD的视 图,而DTD出现的时间比较早,与Schema相比有许多明显的缺点,DTD有另外的语法要求, 而Schema本身是良构的XML文档,可以采用和XML文档相同的处理机制。
发明内容
本发明的目的在于克服现有技术的上述不足,提供了一种基于安全视图的XML访 问控制方法,能够根据访问权限和XML文档对应的Schema,处理得到Schema安全视图,视图 中包含所有用户有权限访问的内容并屏蔽所有无权限的内容,在视图基础上构建XPath后 对XML文档进行操作的结果都将符合访问权限的限定,以此实现对XML文档的访问控制。
本发明是通过如下技术方案实现的,本发明包括如下步骤 步骤一,系统定义了若干角色,每个角色包括若干权限,且为每个角色生成XML格 式的授权文档。 所述的角色间存在层次关系,该层次关系是偏序关系,或者是自反关系,或者是传 递关系,或者是反对称关系。 所述的角色间存在约束关系,该约束关系是互斥约束,或者是基数约束,或者是先 决约束,或者是会话约束,或者是等级约束。 所述的授权文档用于指定角色对XML文档具有的权限,该文档包括角色信息、权 限对象、权限类型、权限值和继承取值。 所述的权限对象是访问控制的对象,包括XML文档、模式、元素和属性。
所述的权限类型包括读取、添加、更新和删除,其中添加、更新和删除都包括读取。
所述的权限值包括有权限、无权限和受限权限。 所述的受限权限是指该对象是否有权限和对象在XML文档中的具体内容有关,当 对象在XML文档中的具体内容满足设定的限制条件时,该对象才有权限;否则该对象无权 限。 所述的继承取值决定对象的后代是否允许继承该权限,继承取值包括允许继承 取值和不允许继承取值。 所述的授权文档由XPath的谓词实现基于内容的细粒度访问权限定义,XPath的 谓词(Predicates)用来查找特定的节点或者包含指定值的节点。 步骤二,为每个用户分配若干角色,当用户登录后,得到其所分配的角色,进行基 于角色的访问控制(RBAC),从而得到节点权限。 所述的节点权限采用封闭式权限定义方式,包括直接权限和继承权限,其中直 接权限是直接定义在节点上的权限,继承权限是定义在节点祖先节点上的允许继承取值的 权限,直接权限用O表示,继承自父亲节点的才继承权限类型值为l,继承自祖父节点的继 承权限类型值为2,以此类推,继承权限类型值随继承层数的增多而增大,其中最小的继 承权限类型值为节点的最终权限。 所述的基于角色的访问控制是用户在一个环境中被指定为一个角色来访问资
源,在另一个环境中用户被指定为另一个角色来访问资源,每个角色有若干权限。 步骤三,用户根据其得到的权限,将XML文档的Schema模式处理生成Schema安全
视图,Schema安全视图只包含角色有权限访问的内容,而隐藏或删除了角色没有权限的内容。 所述的Schema安全视图包括Schema视图Sv以及生成Sv的过程中产生的映射o ,其中Sv包含所有用户有权限和受限权限的元素和属性结构和数据类型信息,用户没有 权限的信息在Sv中被删除或隐藏;而o是将基于Sv的XPath转换为基于原文档Schema的 XPath的映射,该映射对用户隐藏。 所述的隐藏了角色没有权限的内容是通过用鹏(dummy)节点替换没有权限的原 节点,实现在不改变文档结构的基础上隐藏节点。 所述的删除了角色没有权限的内容是通过用鹏节点替换没有权限的原节点,当 鹏节点没有属性和子元素或者其所有属性和子元素均为鹏节点时,则删除鹏节点。
所述的删除鹏节点是通过剪枝方法实现的。 步骤四,用户发出访问操作请求时,Schema安全视图的XPath指定权限对象,当用 户请求读取XML文档时,执行步骤五;当用户请求为XML文档添加内容时,执行步骤六;当 用户请求为XML文档更新内容时,执行步骤七;当用户请求为XML文档删除内容时,执行步 骤八。 所述的访问操作包括读取操作、添加操作、更新操作和删除操作,其中读取操 作是用户查看XML文档中元素的内容和属性值,添加操作是用户为XML文档添加元素或属 性并提供该节点的名称和内容,更新操作是用户更改XML文档元素和属性,删除操作是用 户删除元素及其子元素和属性。 步骤五,当用户所属的角色具有读取权限时,先将Schema安全视图给出的XPath 表达式中的鹏节点替换为原节点,并对原XML文档查找,获得的结果集合便是用户所查询 的所有信息中有权限的部分;当用户所属的角色不具有读取权限时,则用户读取XML文档 的请求被拒绝。 步骤六,当用户所属的角色具有添加权限且添加的内容合法时,用户根据Schema 安全视图结构构造的分支(Branch)添加到原XML文档中,缺失的元素或属性根据原Schema 补充;否则,用户请求为XML文档添加内容的请求被拒绝。 步骤七,当用户所属的角色具有更新权限且更新的内容合法时,用户根据Schema 安全视图构造的更新分支替换原XML文档的内容或属性;否则用户请求为XML文档更新内 容的请求被拒绝。 步骤八,当用户所属的角色具有删除权限时,先将Schema安全视图给出的XPath 表达式中的鹏节点替换为原节点,然后用户将欲删除分支的根节点进行删除,即该根节点 中所有的子元素和属性都被删除;否则,用户请求为XML文档删除内容的请求被拒绝。
与现有技术相比,本发明的有益效果是通过生成Schema安全视图,达到基于安 全视图的XML文档访问控制,当一个Schema文档对应若干个XML实例时,本发明只需要对 Schema文档进行处理,不需要针对每一个XML文档生成视图,有效的减少了待处理的对象 数目,提高了效率;本发明采用RBAC访问控制策略对Schema文档进行扩展,提出了细粒度 授权文档的形式,实现了基于角色的访问控制,既保证了XML文档中数据信息的安全性,也 不会改变用户对XML文档的使用方式。
图1是实施例的访问控制原理示意图;
图2实施例安全视图定义的示意图。
具体实施例方式
下面结合附图对本发明的实施例作详细说明本实施例在以本发明技术方案为前 提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下 述的实施例。
如图1所示,本实施例包括以下步骤 步骤一,系统定义了若干角色,每个角色包括若干权限,且为每个角色生成XML格 式的授权文档。 所述的角色间存在层次关系,该层次关系是偏序关系,或者是自反关系,或者是传 递关系,或者是反对称关系。 所述的角色间存在约束关系,该约束关系是互斥约束,或者是基数约束,或者是先 决约束,或者是会话约束,或者是等级约束。 所述的授权文档用于指定角色对XML文档具有的权限,该文档包括角色信息、权 限对象、权限类型、权限值和继承取值。
所述的权限对象是访问控制的对象,包括XML文档、模式、元素和属性。
所述的权限类型包括读取、添加、更新和删除,其中添加、更新和删除都包括读取。
所述的权限值包括有权限、无权限和受限权限。 所述的无权限节点的处理方法,具体为对于无权限的节点,应该在安全视图中隐 藏或删除。通过用鹏节点替换没有权限的原节点,在不改变文档结构的基础上达到隐藏节 点的目的。当一个鹏节点没有属性和子元素或者其所有属性和子元素均为鹏节点时,显示 该节点对用户没有任何意义,删除该节点。文档中用户没有权限的节点至少有一个,不能全 用dummy来替换,此外,也有可能本来就存在名称为dummy的元素或属性。本实施例的具体 处理方法是通过节点名称生成相应的ID,用dummy+ID来替换原节点,需要保证dummy节 点ID的唯一性,同时需要将ID和原名称的对应关系记录到鹏节点映射文件中,作为访问控 制过程XPath转换的准备,等所有没有权限的节点都用dummy+ID替换后,再执行剪枝方法 删除必要的节点。 所述的哑节点映射文件,具体为,符合如下Schema的XML文档 〈? xml version =〃 1.0〃 encoding = 〃 UTF-8" > 〈xs:schema xmlns:xs=〃 http://www.w3.org/2001/XMLSchema" elementFormDef ault =〃 qualified〃 attributeFormDef ault
= 〃 皿qimlified" > 〈xs:element name = 〃 hashresults" > 〈xs:complexType> 〈xs:sequence> 〈xs:element name =〃 dummy〃 minOccurs
=〃 0〃 max0ccurs = 〃 unbounded" > 〈xs:complexType> 〈xs:sequence>
〈xs: element name = 〃 originalname 〃 type
=〃 xs:string〃 /〉 〈/xs: sequence〉 〈xs: attribute name = 〃 id〃 type
=〃 xs:string〃 use=〃 required" /〉 〈/xs: complexType〉 〈/xs:element〉 〈/xs: sequence〉 〈/xs: complexType〉 〈/xs:element〉 〈/xs: schema〉 所述的受限权限节点的处理方法,具体为受限权限的节点权限跟节点内容有关, 在Schema中无法判定限制条件是否成立,不能将其归为有权限或无权限的节点分别处理。 在安全视图中当不正常显示受限权限节点的名称,用户访问XML文档,且存在限制条件成 立的节点时,返回结果中将包含安全视图中未正常显示的节点;反之正常显示的话,当不存 在符合条件的节点,返回结果将不包含安全视图中包含的节点。为了解决这些矛盾,应当将 节点的名称正常显示,并为节点设置minOccurs属性值为0。此外也要将限制条件记录到限 制条件文档,作为访问控制过程XPath转换的依据。 所述的限制条件文档,具体为,符合如下Schema的XML文档 〈? xml version =〃 1.0〃 encoding = 〃 UTF_8〃 ?〉 〈xs: schema xmlns:xs =〃 http://www. w3. org/2001/XMLSchema〃 〉 〈xs: element name =〃 originalname〃 type =〃 xs: string〃 /〉 〈xs: element name =〃 objectpath〃 type =〃 xs: string〃 /〉 〈xs: element name =〃 hashresults〃 〉 〈xs: complexType〉 〈xs: sequence〉 〈xs: element name = 〃 condition 〃 maxOccurs =〃 unbounded"〉 〈xs: complexType〉 〈xs: sequence〉 〈xs: element ref =〃 originalname 〃 /〉 〈xs: element ref = 〃 objectpath〃 /〉 〈/xs: sequence〉 〈xs: attribute name = 〃 id〃 use = 〃 required〃 /〉 〈/xs:complexType〉 〈/xs:element〉 〈/xs: sequence〉 〈/xs: complexType〉
〈/xs:element>
〈/xs:schema> 所述的继承取值决定对象的后代是否允许继承该权限,继承取值包括允许继承 取值和不允许继承取值。 所述的授权文档由XPath的谓词实现基于内容的细粒度访问权限定义,XPath的 谓词用来查找特定的节点或者包含指定值的节点。 本实施例中在授权时指定/bookstore/book[price 〉 35. 00],其含义是选取所 有bookstore元素中的price元素大于35. 00的book元素,角色对price高于35的book 具有read权限,而不符合price高于35这一条件的book不具有read权限。XML文档中同 一个book元素,通过权限定义时谓词的使用,就变为有权限或无权限,从而达到了细粒度 授权。
0090] 所述的XML格式的授权文档,具体为,符合如下Schema的XML文档
0091] 〈? xml version =〃 1.0〃 encoding = 〃 UTF-8〃 ?〉
0092] 〈xs: schema xmlns:xs =〃 http://www. w3. org/2001/XMLSchema〃
0093] e 1 ementFormDef au lt=〃 qualified〃 at tr ibuteFormDef au 11
=〃 unqualified"〉
0094] 〈xs:element name = 〃 Policy〃 〉
0095] 0096] 0097]
xs:string
0098]
〈xs:complexType〉 〈xs:sequence〉
〈xs:element name
〈xs:element name
0b jectSchema 〃 type
Privileges
type
PrisType'
0099]
〈xs:element name
PrivilegeRoleAssignment〃 type
PRAType'
0100] 〈/xs:sequence〉
0101 ] 〈/xs:complexType〉
0102] 〈/xs:element〉
0103] 〈xs:complexType name =〃 PrisType〃 〉
0104] 〈xs:sequence〉
0105] 〈xs : e 1 ement name = 〃
=〃 PriType〃 minOccurs = 〃 0〃 0106] maxOccurs =〃 unbounded 〃 /〉 0107] 〈/xs:sequence〉
0108] 〈/xs:complexType〉
0109] 〈xs: complexType name =〃 PRAType〃 〉
0110] 〈xs:sequence〉
〈xs:element name
RoleType〃 minOccurs =〃 0〃
Privilege
type
Role
type
xs
xs
xs
xs
xs
maxOccurs =〃 unbounded" /〉 〈/xs:sequence〉 〈/xs:complexType〉 〈xs:complexType name =〃 PriType' 〈xs:sequence〉
〈xs:element name
:xs:element name :xs:element name <xs:element name
ObjectPath AccessType Permission Recursive
:string /〉 :string〃 /〉 :string〃 /〉 :string〃 /〉
〈/xs:sequence〉
〈xs: attribute name =〃 PrilD〃 type 〈/xs:complexType〉
〈xs:complexType name =〃 RoleType〃 〉 〈xs:sequence〉
〈xs:element name =〃 Assigned maxOccurs =〃 unbounded"〉
〈xs:complexType〉
〈xs:attribute name = 〃 :string〃 /〉
〈/xs:complexType〉 〈/xs:element〉 〈/xs:sequence〉
〈xs:attribute name =〃 RolelD〃 type =〃 xs: string' 〈/xs:complexType〉 〈/xs:schema〉
所述的符合以上Schema的XML文档,具体为,如下例所示 〈Policy〉
〈0bjectSchema>target〈/0bjectSchema> 〈Privileges>
〈Privilege PriID =〃 1〃 >
〈0bjectPath>a/b/d〈/0bjectP£ith> 〈AccessType>write〈/AccessType> 〈Permission>[q]〈/Permission> 〈Recursive>Y〈/Recursive> 〈/Privilege>
type type type type
xs:string
minOccurs
PriID 〃 type
〈/Privileges> 〈PrivilegeRoleAssignment> 〈Role RoleID =〃 rOl" > 〈Assigned PriID =〃 1〃 /> 〈/Role> 〈/PrivilegeRoleAssignment> 〈/Policy〉 步骤二,为每个用户分配若干角色,当用户登录后,得到其所分配的角色,进行基 于角色的访问控制,从而得到节点权限。 所述的节点权限包括直接权限和继承权限,其中直接权限是直接定义在节点 上的权限,继承权限是定义在节点祖先节点上的允许继承取值的权限,直接权限用0表示, 继承自父亲节点的才继承权限类型值为l,继承自祖父节点的继承权限类型值为2,以此类 推,继承权限类型值随继承层数的增多而增大,其中最小的继承权限类型值为节点的最终 权限。 节点权限的定义有开放式和封闭式两种方式开放式是指对于不具有直接权限和 任何继承权限的节点,默认为有权限;封闭式则与此相反,节点默认为无权限。本实施例采 用封闭式定义。 为保证授权的完整性,对于没有定义任何权限也没有继承任何权限的对象,本实 施例设有一个默认权限。 所述的基于角色的访问控制是用户在一个环境中被指定为一个角色来访问资
源,在另一个环境中用户被指定为另一个角色来访问资源,每个角色有若干权限。 步骤三,用户根据其得到的权限,将XML文档的Schema模式处理生成Schema视
图,Schema视图只包含角色有权限访问的内容,而隐藏或删除了角色没有权限的内容。 所述的隐藏了角色没有权限的内容是通过用鹏节点替换没有权限的原节点,实
现在不改变文档结构的基础上隐藏节点。 所述的删除了角色没有权限的内容是当鹏节点没有属性和子元素或者其所有属 性和子元素均为鹏节点时,且所有没有权限的节点都用dummy+ID替换后,通过剪枝方法删 除哑节点。 所述的剪枝方法,具体为当元素及其所有子元素和属性对某个角色都没有权限, 这些元素和属性都会被哑节点代替,全部由哑节点组成的分支对用户没有任何意义,不应 该在安全视图中存在,因此需要将符删除条件的节点删除。 所述的Schema视图包括Schema视图Sv以及生成Sv的过程同时产生的一个映 射o。 Sv包含所有且仅包含用户有权限和受限权限的元素和属性结构和数据类型信息,用 户没有权限的信息在Sv中被删除或隐藏。而o是将基于Sv的XPath转换为基于原文档 Schema的XPath的映射,对用户不可见。由于Schema视图Sv中需要隐藏用户不可访问的 信息,新生成鹏节点以替换用户无权限的元素和属性。授权允许独立针对每个元素或属性, 祖先后代关系的节点不一定具有同样的权限。因此基于视图Sv的XPath路径Pv中可能包 含哑元素,这种情况下直接用Pv在原XML文档做查询只能得到空结果。需要通过o (Pv)= P得到基于原Schema的等效路径P再做查询。根据授权文档,原Schema文档中没有权限的元素被dummy所替代。仅有dummy元素组成的分支被剪枝,生成对应的Schema视图Sv,以 及映射o 。
0162] 所述的生成Schema视图,具体方法为
0163] 输入访问者的角色role
0164] 目标XML文档target, xml
0165] 输出XML Schema视图targetview. xsd
0166] t = parse (target, xsd);〃得到target, xsd的文档树
0167] nodeList = FindEleAndAttr(target, xsd)
0168] for (all the nodes G nodeList)
0169] 〃判断节点是否有read权限,其他权限的对象包含在有read权限的对象中
0170] result = findPermission(role, node, targetpolicy. xml); 0171] if (N == result)
0172]proInaccNode(node);〃处理没有权限的节点 0173] elseif(Y == result)
0174]proAccNode (node);〃处理有权限的节点 0175] else
0176]proCoaccNode (node);〃处理受限权限的节点 0177] 〃保存为XML Schema视图
0178] saveAsFile(targetView. xsd);
0179] p進e (targetView. xsd);〃剪枝处理。
0180] fileOutput (targetview. xsd);〃输出XML Schema视图
0181] 本实施例中生成Schema视图的过程中首先解析目标Schema文档target, xsd, 找出所有代表元素和属性定义的节点。对每一个节点,通过findPermission()方法从授 权策略文档中取得其权限,然后分三种情况分别处理无权限、受限权限和有权限的节点 proInaccNode()是处理无权限节点的方法,用哑节点替换原节点;proCoaccNode ()是处 理受限权限节点的方法,受限表达式的真假在现阶段无法判定,和用户的操作类型或具体 实例有关,因此在XML Schema视图中应正常显示受限权限的节点,并将限制条件保存; proAccNode()是处理有权限的节点,目前什么也不做。将所有的元素和属性节点处理完之 后,当生成的ML Schema视图中存在若干只包含哑节点的分支时,这些分支没有必要在XML schema视图中显示,所以输出视图之前需要执行prune ()方法,该方法对没有子元素或只 有哑元素子元素的哑元素进行剪枝。 步骤四,用户根据Schema视图的结构发出访问操作请求,Schema视图的XPath指 定权限对象,当用户请求读取XML文档时,执行步骤五;当用户请求为XML文档添加内容时, 执行步骤六;当用户请求为XML文档更新内容时,执行步骤七;当用户请求为XML文档删除 内容时,执行步骤八。 所述的访问操作包括读取操作、添加操作、更新操作和删除操作,其中读取操 作是用户查看XML文档中元素的内容和属性值,添加操作是用户为XML文档添加元素或属 性并提供该节点的名称和内容,更新操作是用户更改XML文档元素和属性,删除操作是用 户删除元素及其子元素和属性。
12
本实施例具体为若干个XML文档对应一个Schema文档,用户的操作为读取XML 文档的根元素,Schema视图根据安全视图的定义以及用户所属角色所具有的权限生成,用 户基于Schema视图对XML文档进行操作,读取操作的结果则恰好为XML文档视图。
步骤五,当用户所属的角色具有读取权限时,先将Schema视图给出的XPath表 达式中的鹏节点替换为原节点,并对原XML文档查找和剪枝处理,获得的结果集合便是用 户所查询的所有信息中有权限的部分;当用户所属的角色不具有读取权限时,则用户读取 XML文档的请求被拒绝。 如图2所示,本实施例中用户需要查询ele4,构造查询路径为elel/dummy1/ ele4,在原XML文档中查询之前,需确定dummyl对应的节点,进而将路径转换为elel/ ele2/ele4。基于原XML文档的查询结果不一定会符合Schema安全视图,必须依据安全 视图对结果进行修剪,本实施例中的具体做法为,查询结果中的节点如果在dummy映射文 档中存在,则用dummy+ID替换,否则如果节点出现在包含限制条件的文档中,需要根据限 制条件所限定的路径判定节点是否有权限。例如,假设限制条件为〃product[(itype = 'book'],表示用户只对book类型的product有权限,当用户查询〃product时,结果中的 所有product节点在包含限制条件的文档中存在,只有type属性为book的product节点 符合限制条件,不符合限制条件的节点用dummy+ID替换,最终的查询结果在返回给用户之 前同样需要进行剪枝操作。 步骤六,当用户所属的角色具有添加权限且添加的内容合法时,用户根据Schema 视图结构构造的分支添加到原XML文档中,缺失的元素或属性根据原Schema补充,如果 Schema中定义了元素或属性的默认值,则使用默认值,否则取空值;当用户所属的角色不 具有添加权限或添加的内容不合法时,用户请求为XML文档添加内容的请求被拒绝。
本实施例中具体的做法为如果用户对添加的内容中任何一个节点有权限,则首 先按照Schema中的定义添加一个内容为空或默认值的完整分支,在通过更新这个分支的 内容来完成整个添加。 步骤七,当用户所属的角色具有更新权限且更新的内容合法时,用户根据Schema 视图构造的更新分支替换原XML文档的内容或属性;否则用户请求为XML文档更新内容的 请求被拒绝。 更新操作改变元素和属性的内容,但不影响文档的结构。当用户根据Schema试图 构造好需要更新的分支Branch,权限检查通过且内容合法时,将Branch中包含的元素和属 性更新即可。更新操作成功后,除了元素的内容或者属性的值发生了变化外,XML文档的其 他部分都没有发生改变。 步骤八,当用户所属的角色具有删除权限时,先将Schema视图给出的XPath表达
式中的鹏节点替换为原节点,然后用户将欲删除分支的根节点进行删除,即该根节点中所
有的子元素和属性都被删除;否则,用户请求为XML文档删除内容的请求被拒绝。 本实施例中具体的做法为对用户想要删除的节点,并不直接删除,而是先将元素
或属性的内容清空,直到处理完Branch分支中所有的节点后,根据剪枝方法,将没有实际
内容的分支删除;如果分支中仍存在有意义的节点,则需保留。 本实施例实现了基于安全视图的XML文档访问控制,给出了授权文档的具体形 式,以及生成安全视图的具体方法,丰富灵活的特性使得RBAC模型能很好地满足大型系统对复杂权限管理的需求。由于实现了用户与访问权限的逻辑分离,基于角色的访问策略极 大地方便了权限管理。
权利要求
一种基于安全视图的XML访问控制方法,其特征在于,包括以下步骤步骤一,系统定义了若干角色,每个角色包括若干权限,且为每个角色生成XML格式的授权文档;步骤二,为每个用户分配若干角色,当用户登录后,得到其所分配的角色,进行基于角色的访问控制,从而得到节点权限;步骤三,用户根据其得到的权限,将XML文档的Schema模式处理生成Schema安全视图,Schema安全视图只包含角色有权限访问的内容,而隐藏或删除了角色没有权限的内容;步骤四,用户发出访问操作请求时,Schema安全视图的XPath指定权限对象当用户请求读取XML文档时,执行步骤五;当用户请求为XML文档添加内容时,执行步骤六;当用户请求为XML文档更新内容时,执行步骤七;当用户请求为XML文档删除内容时,执行步骤八;步骤五,当用户所属的角色具有读取权限时,先将Schema安全视图给出的XPath表达式中的哑节点替换为原节点,并对原XML文档查找,获得的结果集合便是用户所查询的所有信息中有权限的部分;当用户所属的角色不具有读取权限时,则用户读取XML文档的请求被拒绝;步骤六,当用户所属的角色具有添加权限且添加的内容合法时,用户根据Schema安全视图结构构造的分支添加到原XML文档中,缺失的元素或属性根据原Schema补充;否则,用户请求为XML文档添加内容的请求被拒绝;步骤七,当用户所属的角色具有更新权限且更新的内容合法时,用户根据Schema安全视图构造的更新分支替换原XML文档的内容或属性;否则用户请求为XML文档更新内容的请求被拒绝;步骤八,当用户所属的角色具有删除权限时,先将Schema安全视图给出的XPath表达式中的哑节点替换为原节点,然后用户将欲删除分支的根节点进行删除,即该根节点中所有的子元素和属性都被删除;否则,用户请求为XML文档删除内容的请求被拒绝。
2. 根据权利要求1所述的基于安全视图的XML访问控制方法,其特征是,步骤一中所述的授权文档用于指定角色对XML文档具有的权限,该文档包括角色信息、权限对象、权限类型、权限值和继承取值;所述的权限对象是访问控制的对象,包括XML文档、模式、元素和属性;所述的权限类型包括读取、添加、更新和删除,其中添加、更新和删除都包括读取;所述的权限值包括有权限、无权限和受限权限;所述的继承取值决定对象的后代是否允许继承该权限,继承取值包括允许继承取值和不允许继承取值。
3. 根据权利要求1所述的基于安全视图的XML访问控制方法,其特征是,步骤一中所述的角色间存在层次关系,该层次关系是偏序关系,或者是自反关系,或者是传递关系,或者是反对称关系。
4. 根据权利要求1所述的基于安全视图的XML访问控制方法,其特征是,步骤一中所述的角色间存在约束关系,该约束关系是互斥约束,或者是基数约束,或者是先决约束,或者是会话约束,或者是等级约束。
5. 根据权利要求1所述的基于安全视图的XML访问控制方法,其特征是,步骤一中所述的授权文档由XPath的谓词实现基于内容的细粒度访问权限定义,XPath的谓词用来查找特定的节点或者包含指定值的节点。
6. 根据权利要求1所述的基于安全视图的XML访问控制方法,其特征是,步骤二中所述的节点权限采用封闭式权限定义方式,包括直接权限和继承权限,其中直接权限是直接定义在节点上的权限,继承权限是定义在节点祖先节点上的允许继承取值的权限,直接权限用O表示,继承自父亲节点的才继承权限类型值为l,继承自祖父节点的继承权限类型值为2,以此类推,继承权限类型值随继承层数的增多而增大,其中最小的继承权限类型值为节点的最终权限。
7. 根据权利要求1所述的基于安全视图的XML访问控制方法,其特征是,步骤二中所述的基于角色的访问控制是用户在一个环境中被指定为一个角色来访问资源,在另一个环境中用户被指定为另一个角色来访问资源,每个角色有若干权限。
8. 根据权利要求1所述的基于安全视图的XML访问控制方法,其特征是,步骤三中所述的Schema安全视图包括Schema视图Sv以及生成Sj勺过程中产生的映射。,其中S,包含所有用户有权限和受限权限的元素和属性结构和数据类型信息,用户没有权限的信息在Sv中被删除或隐藏;而o是将基于Sv的XPath转换为基于原文档Schema的XPath的映射,该映射对用户隐藏。
9. 根据权利要求1所述的基于安全视图的XML访问控制方法,其特征是,步骤三中所述的隐藏了角色没有权限的内容是通过用鹏节点替换没有权限的原节点,实现在不改变文档结构的基础上隐藏节点;所述的删除了角色没有权限的内容是通过用鹏节点替换没有权限的原节点,当鹏节点没有属性和子元素或者其所有属性和子元素均为鹏节点时,则删除哑节点。
10. 根据权利要求1所述的基于安全视图的XML访问控制方法,其特征是,步骤四中所述的访问操作包括读取操作、添加操作、更新操作和删除操作,其中读取操作是用户查看XML文档中元素的内容和属性值,添加操作是用户为XML文档添加元素或属性并提供该节点的名称和内容,更新操作是用户更改XML文档元素和属性,删除操作是用户删除元素及其子元素和属性。
全文摘要
一种计算机网络安全领域的基于安全视图的XML文档访问控制方法,包括以下步骤定义角色并授权;为每个用户分配角色,进行基于角色的访问控制;将XML文档的Schema模式处理生成Schema安全视图;用户发出访问操作请求时,Schema安全视图的XPath指定权限对象,执行相应的读取读取XML文档或为XML文档添加内容或为XML文档更新内容或为XML文档删除内容。本发明通过生成Schema安全视图,达到基于安全视图的XML文档访问控制,有效的减少了待处理的对象数目,提高了效率;采用RBAC访问控制策略对Schema文档进行扩展,提出了细粒度授权文档的形式,实现了基于角色的访问控制,既保证了XML文档中数据信息的安全性,也不会改变用户对XML文档的使用方式。
文档编号G06F17/30GK101794312SQ20101011916
公开日2010年8月4日 申请日期2010年3月8日 优先权日2010年3月8日
发明者李建华, 李斓, 肖灵, 范磊, 蔡伟 申请人:上海交通大学