专利名称:包括访问受保护的xml数据的xml数据库的管理系统的制作方法
技术领域:
本发明涉及一种用于包括访问受保护的XML数据的XML数据库的XML数据库管理 系统。
背景技术:
在像遵循面向服务的架构(SOA)的范型的现代应用中,可扩展标记语言(XML)格 式的数据的重要性正在增加。为了高效地存储和检索这种XML数据,XML数据库管理系统 (XDBMS)是现代IT基础结构中的中心组件。要将XDBMS理解为包括适于便利对于XML数据 的访问的硬件和/或软件的系统,XML数据例如为XML数据库中存储的XML文档或者XML文 档的各个XML元素。因为现代应用通常分布于多个硬件上,例如不同方所管理的服务器,其 中应用的所分布部分经由网络(像LAN或因特网)来通信,安全-并且尤其是访问控制-成 为关键性的问题。访问控制通常指防止高度机密的数据被用户未经授权地访问,其中用户 可以是人类用户、另一个应用、web服务等。因此,经由访问控制保护XML数据在XDBMS中 是重要的必然,以便确保数据的安全性和机密性。XML数据通常为层次结构,即,XML数据片段中的任何XML元素本身可包括任何数 量的另外的XML元素,从而形成树状结构。而且,XML数据可包括任何数量的XML属性、XML 处理指令、XML注释或XML标准定义的任何其它种类的结构化元素。在下面,术语“结构化元 素”可指XML数据的任何上述内容。XML的一般语法在万维网联盟的“Extensible Markup Language (XML) 1. 0 (Fifth Edition) ”(W3C 推荐标准,2008 年 11 月 26 H, URL http //www. w3.org/TR/xml/)中定义。而且,XML数据通常以具有相同结构但是不同内容的多个XML文 档的形式存储在XML数据库中,其中每个XML文档表示XML数据库中的数据记录。XML文 档也可称为XML实例。通常,XML文档的结构在XML模式中定义。XML模式语言是万维网联 盟的“XML Schema Part 0 =PrimerSecond Edition”(更多信息可见 W3C 推荐标准,2004 年 10 月 28 日,URL http //www. w3. org/TR/xmlschema-O)中定义的 XML 方言。考虑组织XML数据的特定方式,现代XDBMS,像申请人的TaminoXML服务器,遵循两 种用于访问受保护的机密数据的主要方法。首先,基于结构的访问控制指保护XML数据中 的某些结构,即避免未被授权的用户访问在包括机密数据的XML数据库中存储的XML文档 的一个或多个元素。其次,基于实例的访问控制指避免未被授权的用户访问XML数据库中 单个机密的XML文档,即数据记录。在下面的详细描述中进一步说明这两种方法。除了访问控制,XDBMS的另一个关键特征是查询XM L数据的接口,即用户检索XML 数据库中存储的XML数据的方式。在XML的领域中,公布的XML查询语言(XQuery)已成为 最通用的查询语言。XQuery在万维网联盟的“XQuery 1. O =An XML Query Language”(W3C 标准,2007年 1 月 23 H, URL http://www.w3c.org/TR/xquery/)中说明。任何查询处理方 法的一个特定目标是增加效率,即尽可能快地提供查询结果并且在计算能力方面进行最少 的工作。处理XQuery以便检索期望的数据通常遵循四个阶段,标记为图1中描绘的分析器、预处理器、优化器和优化器。这四个阶段通常由分别称为分析器、预处理器、优化器和优 化器的数据库系统组件执行,它们可共同称作为查询处理器。如可见的,首先分析进入的 XQuery,即提取进入XQuery的逻辑单元以便产生抽象语法树(AST)。然后预处理AST,这包 括分类AST,即为AST中的每个表达式分配数据类型以便产生类型化的AST。然后优化类型 化的AST以便产生查询执行计划。优化可包括静态优化,例如确定哪些索引可用于以更加 有效的方式来评估XQuery并且由此重写类型化的AST。前述阶段还可包括XQuery的语义 分析,共同称作为编译(compilation)。随后,执行产生的查询执行计划以检索最终的查询 结果。一般而言,从现有技术中已知各种方法用于增加总地涉及XML数据的上述查询处 理的效率,例如根据申请人的EP 1 986 108A1.然而,当查询访问受保护的XML数据时,这 些方法不太适合,因为访问控制在很大程度上增加了查询处理的复杂性并且因此常常导致 XQuery的优化不足,导致整个XQuery处理的性能不可接受。在不同的上下文中,即对于关系数据库而不是XML数据库,US2007/0276835A1公 开了一种用于有效访问控制的技术。它公开了重写针对关系数据库的访问受保护的行或表 中的数据的查询,以使得可更有效地处理重写的查询。然而,关系数据库下的数据模型遵循 严格线性的存储范式,包括作为主要数据结构的具有行和列的单调的表。因为该存储模型 根本上不同于上述层次XML数据模型,从关系数据库已知的优化方法不能用于XML数据库。因此,本发明下面的技术问题是提供一种XML数据库管理系统,其便利了从XML数 据库检索访问受保护的XML数据,这加强了访问受保护的XML数据的安全性并且同时显著 地增加了查询处理的效率,由此至少部分地克服了现有技术的上述缺点。
发明内容
根据本发明的一个方面,该问题由用于包括XML文档的XML数据库的XML数据库 管理系统(XDBMS)解决,每个XML文档包括一个或多个结构化元素并且遵循XML模式,其中 至少一个结构化元素被保护以防止用户访问。在权利要求1的实施例中,XDBMS包括
a.优化器,适于处理包括一个或多个XQuery表达式的用户的XQuery,并且还适于 生成优化的XQuery执行计划;b.执行引擎,适于执行优化的XQuery执行计划,以从XML数据库检索XML数据,其 中c.优化器适于生成优化的XQuery执行计划,以使得优化器忽略涉及被保护以防 止用户访问的一个或多个结构化元素的所有XQuery表达式。因此,实施例定义了显著地增加了从包括XML数据的数据库检索XML数据的效率 的XDBMS,所述XDBMS遵循上面导言部分中描述的基于结构的访问控制。为此,XML数据库 中存储的XML文档中的至少一个结构化元素被保护以防止用户访问。如上已经描述,该上 下文中的结构化元素可以是XML元素、XML属性或XML标准定义的XML数据的任何其它结 构化实体。用户发起的X Query通常包括一个或多个XQuery表达式,其中每个XQuery表达 式适于从XML数据库检索某些结构化元素。实例XQuery在下面的详细描述中描述。XDBMS提供的优化器适于首先根据XQuery生成优化的XQuery执行计划。随后, XDBMS提供的执行引擎执行优化器生成的优化的XQuery执行计划。因此,执行引擎产生了包括用户期望依靠XQuery检索的XML数据的查询结果。迄今为止,根据本发明的XDBMS对 于图1中描绘的XML查询处理一般地遵循通常方法。然而,XDBMS的优化器特别适于相关于受保护以防止用户访问的XML数据增加 XQuery处理的效率。为此,优化器适于以这样的方式生成优化的XQuery执行计划由优化 器忽略涉及被保护以防止用户访问的结构化元素的XQuery的所有XQuery表达式。该方法 具有三个主要优点-首先,显著地降低了优化器的处理步骤的数量并且由此降低了处理时间,因为涉 及访问受保护的结构化元素的所有XQuery表达式在优化器执行优化期间被忽略。换言之, 优化器专注于仅优化涉及用户可访问的结构化元素的XQuery表达式,以使得相比于从现 有技术已知的方法整个优化处理花费显著更少的时间。-第二,因为优化器产生的XQuery执行计划已经是特别为要检索的XML数据优化 的,相比于从现有技术已知的通用方法,执行引擎的随后处理也花费远远更少的时间和处 理能力。这两个方面进一步由下面的详细描述中的示例来说明。-第三,应当理解,XQuery处理的整体安全性一点也不受影响或者降低,使得本发 明有利地组合了高安全标准的可信赖加强和非常有效的XQuery处理这两个目标。根据本发明的另一个方面,XDBMS还适于确定用户所属的一个或多个组并且保护 至少一个结构化元素免受所述一个或多个组的访问。因此,用户可属于一个或多个组,其中 组本身可属于一个或多个另外的组,由此可建立复杂的组层次。组可以是内部组,即XDBMS 内定义的组,或者外部组,即例如在外部用户储存库(如LDAP储存库)中定义的组。确定用户(或组)属于的组,即解析组层次,优选地作为查询处理器的查询编译的 第一步骤之一执行,以确保涉及检查的访问控制的效率。为此,查询处理器可首先确定用户 直接属于的一个或多个组。对于所确定的组中的每一个,查询处理器然后可递归地确定这 些组本身是否属于另外的组。而且,因为组层次可以是任意复杂的,上述组解析的结果可被缓存,以便改善整体 性能。为此,关于用户属于哪些组的信息可临时存储在用户/组缓存中。如果组层次需要 在随后阶段被再次解析,可检查该用户/组缓存,而不是重新执行完整的组解析。为了使用 户/组索引保持最新,可根据管理员设置的参数定期地执行组解析。在另一个方面中,XDBMS还包括预处理器,该预处理器适于评估至少一个基于结构 的访问权限,以确定要由优化器忽略的XQuery表达式,所述至少一个基于结构的访问权限 保护用户和/或组对相应结构化元素的访问。在该上下文中评估访问权限意味着检查访问 权限的内容,以使得可就访问权限准予或拒绝委托人(用户和/或组)进行某个动作得出 结论。访问权限的思想在下面详细描述中更详细地说明。因此,对比于现有技术,评估基于 结构的访问权限不在执行引擎的查询执行期间执行,而是已经由XDBMS提供的预处理器执 行,即在XQuery处理过程中远远更早的时间。特别是,在优化器开始它的处理之前执行评 估基于结构的访问权限,以使得优化器在XQuery的XML表达式的已经“过滤”的集合上执 行它的优化任务。而且,预处理器还可适于从XML模式中定义的类型信息得到至少一个基于结构的 访问权限。这具有另外的优点,基于结构的访问权限可存储在中心位置,即在XML模式内。 作为候选,访问权限也可以分布式方式存储并且可由XML模式引用。然而,在这两种情况下,基于结构的访问权限可仅定义一次并且然后应用到遵循XML模式的所有XML文档的所 有各个XML元素,这在创建并且随后更新基于结构的访问权限时显著地减少了工作。因为 基于结构的访问权限可从XML模式中定义的类型信息得到,评估基于结构的访问权限可已 经在分类过程期间执行,即在生成类型化AST期间(参照图1)。而且,至少一个基于结构的访问权限可附属到包括各个结构化元素的XML文档, 并且执行引擎还可适于评估至少一个基于结构的访问权限。如在前面段落中说明的,在分 类过程期间,为涉及某些结构化元素的XQuery表达式确定的类型信息通常由XML模式定 义。然而,如将在下面的详细描述中进一步说明的,不可能静态地分类某些XQuery表达式, 因为在XML模式中不存在对应的分类信息。代替地,类型信息在查询分类的时候可能是未 知的。通常,在该情况下对应的结构化元素从结构化元素包括在其中的XML文档内部引用 它们的类型信息,而不是从XML模式。因此,涉及这些结构化元素的基于结构的访问权限可 附属到XML文档本身。执行引擎然后可在查询执行期间从XML数据库检索单独的XML文档 时,评估这些基于结构的访问权限。在该情况下,执行引擎还可适于扫描结构索弓丨,例如从申请人的 US2005/0131895A1已知的。结构索引通常用于存储聚集的结构信息,即它可用于在任何给 定时间确定哪些结构化元素当前存在于XDBMS中存储的XML文档内,和哪些结构化元素未 出现在XDBMS中当前存储的XML文档内。因此,查阅结构索引在不能静态地分类某些XQuery 表达式时尤其有利,如上所述。根据本发明的又另一个方面,执行引擎还适于评估附属到至少一个XML文档的一 个或多个基于实例的访问权限,基于实例的访问权限保护用户和/或组对相应XML文档的 访问。因此,基于实例的访问权限不涉及单个结构元素(像基于结构的访问权限),而是完 整的XML文档,因此遵循上面导言部分中描述的基于实例的访问控制方法。用于基于实例 的访问权限的评估的示例可在下面的详细描述中找到。而且,XDBMS可适于根据基于结构的和/或基于实例的访问权限生成访问权限索 弓丨,并且执行引擎可适于扫描访问权限索引。因此,由于使用了访问权限索引,评估基于结 构和/或基于实例的访问控制的效率显著地增加。如本领域技术人员将会理解的,相比于 单独地查阅各个基于结构和/或基于实例的访问权限,扫描索引需要更少的处理时间,并 且因此是相当更加高效的。访问权限索引可包括一个或多个索引条目,所述索引条目各自包括到用户和/或 组的引用、到XML文档的引用、访问权限和/或标识符。而且,执行引擎可适于根据索引条 目的标识符定义的顺序来评估访问权限索引中与用户和/或组匹配的第一索引条目。访问 权限索引及其有利用途的示例在下面的详细描述中示出。通常,基于结构的和/或基于实例的访问权限可由访问控制列表(ACL)定义。本发明还涉及一种包括用于实现任意上面给出的XML数据库管理系统的指令的 计算机程序。而且,本发明涉及一种方法,用于处理用户的XQuery以使用任意上面给出的XML 数据库管理系统从XML数据库检索XML数据。最后,提供了一种包括用于实现上面给出的 方法的指令的计算机程序。
在随后的详细描述中,参考下面的附图进一步描述本发明的当前优选实施例图1 根据现有技术的用于XQuery处理的控制流程的示意性概览;图2 根据本发明的XML数据库管理系统的实施例的示意性概览;图3 根据本发明实施例的基于结构的访问控制的示意性概览;图4 根据本发明实施例的基于实例的访问控制的示意性概览;图5a 根据本发明实施例的示例XML模式;图5b 遵循图5a的XML模式的两个示例XML文档;图6a、b 根据本发明实施例的用于基于结构的访问控制的示例性基于结构的访 问权限;图7a 根据本发明实施例的用于基于实例的访问控制的示例性基于实例的访问 权限;图7b 根据本发明实施例的示例组定义;图8 根据本发明实施例的示例XQuery执行计划的示意性概览;和图9 根据本发明实施例的示例访问权限索引的示意性概览。
具体实施例方式如在导言部分中已经描述的,查询访问控制受保护的XML数据是现代XML数据库 管理系统(XDBMS)中的一个重要特征,以支持遵循面向服务的架构(S0A)的范型的应用。本 发明提供了 XDBMS 10 (参照图2),其适于对访问控制受保护的XML数据进行有效的XQuery 50处理,所述XML数据例如XML数据库20中存储的XML文档30或XML文档30的各个XML 元素35,所述XDBMS 10便利了基于结构的和基于实例的访问控制。遵循用于XQuery处理 的通用模型,可在XQuery 50的语义分析期间评估基于结构的访问控制。对于基于实例的 访问控制,XML数据库20中存储的XML文档30可用访问控制列表(ACL)批注。为了在查 询执行期间评估ACL,本发明的XDBMS 10生成扩展的XQuery执行计划70。扩展的XQuery 执行计划70根据提供涉及访问控制的运算符的扩展XQuery处理代数来声明。本发明由此 通过应用代数查询优化便利了扩展XQuery执行计划70的优化。而且,本发明提供了 ACL 索引的思想,用于高效地访问ACL信息。XML数据库中的访问控制XML数据库中的XML数据的保护显著地不同于从关系数据库系统已知的安全思 想,因为XML数据模型,即组织XML数据的方式,完全不同于关系数据模型(参照上面的导 言部分)。在像申请人的Tamino XML服务器这样的产品中,可使用基于结构以及基于实例 的访问控制,这将在下面更详细地描述。基于结构的访问控制意味着通过为某些结构化元素,例如XML元素、XML属性或由 XML标准定义的XML数据的任何其它结构化实体定义访问权限来保护XML数据。结构化元 素通常由XML模式定义。在本发明的XDBMS 10中,一个或多个XML模式40以XML模式语 言来指定,在上面的导言部分中提及。图5a描绘了定义用于在XML数据库20中存储涉及 雇员的数据(XML文档30)的employee XML元素35的结构的示例XML模式40。如在图5a 中可见,employee XML 元素 35 定义为包括子 XML 元素 35date_of-birth、name、salary、禾口IHBriBger0 胃i,date—of—birth XML 71 · 35 胃I^jgM xs: date,salary 禾口 mBnager XML元素35定义为类型xs integer,如XML模式40的相应类型信息45所表示的。name XML 元素35本身由两个子XML元素35定义,即xs string类型的last XML元素35和f irrst XML元素35,这突出了 XML的层次结构。而且,图5a中的示例XML模式40定义了 employee XML元素35必须包括需要的类型为xs: integer的XML属性number。应当理解,根据本发 明的XDBMS 10可包括多于一个的XML模式40,用于针对不同目的来定义不同类型的XML文 档。而且,定义employee元素的结构的示例XML模式仅仅是广泛种类的示例之一。图5b示出了表示上面给出的XML模式40的实例的两个 示例XML文档30。如可见 的,遵循XML模式40的XML文档30具有由XML模式40定义的精确结构,其中XML文档30 的XML元素35用必须遵循XML模式40中定义的类型的具体值来填充。在图5a和5b的示例中,XML文档30的某些XML元素35,例如name或者 date-of-birth,根据安全性被设想为不关键的,并且因此应当对于XDBMS 10的任何用户 是可访问的。相反,访问每个XML文档30的XML元素salary 35必须限制到仅仅有限集合 的用户,因为salary XML元素35存储机密信息(雇员的年薪),并且应当在任何情况下对 于大部分XDBMS的用户保持为秘密。应当理解,使用基于结构的访问控制,不仅可保护各个 XML元素35,还可保护XML数据库容器,例如集合,以及某些数据检索功能的执行。而且,如 上面已经描述的,可保护XML数据的任何结构化元素,例如XML属性、XML注释等。为了指定对XML文档30的XML元素35的访问级别,可使用访问控制列表(ACL), 其示例在图6a中示出。图6a的示例ACL对持有employee元素的集合hr,例如XML文档 30,定义了基于结构的访问权限90。在该上下文中的ACL name “default (默认)”表示各 个ACL应当应用于所有可能的用户,除非另外声明。为此,图6a中的示例ACL对于employee XML元素35准予read访问,而拒绝对salary XML元素35的任何访问,因为公司想要将个 人薪水保持为秘密。如示例所示,ACL如在申请人的Tamino XML服务器中定义的那样,包括 任何数量的访问权限/访问控制元素(ACE)。每个ACE 90由定义目标XML元素35的可选 "subject (主题)”和"privilege (权限)”的"grant (准予)”或"deny (拒绝)”组成,所 述“权限”例如为“读”、“更新”、“删除”、“全部”或者任何其它适合的权限。为了更有效率, 需要将ACL分配到单个用户和/或组(group),其中组可引用一个或多个用户或另外的组, 建立任意复杂的组层次(参见上面)。如已经提及的,图6a的示例ACL隐含地分配到“默 认”组,该组包括所有可能的用户,即XDBMS 10的所有用户根据图6a的给定ACL继承访问 权限90。为了允许用户访问salaryXML元素35,用户需要属于特别被授权的组,例如图7b 中定义的示例hrgroup组65。如可见的,组65列出组的用户(在示例中为用户“A”和用 户“B”)并且引用hracl ACL,该hracl ACL定义了许可给hrgroup组65的访问权限90。 对应的hracl ACL在图6b中描绘。如在图6b中可见到的,hrgroup组65的成员被准予对 employee XML元素35的全部访问权限。图6b中定义的访问权限90突出了 XML的层次结构所特有的方面。因为允许属于 hrgroup组65的用户访问employee XML元素35,也允许这些用户访问employee XML元素 35的所有子XML元素35,例如salaryXML元素35。因此,XML元素上定义的访问权限可根 据XML的层次结构由全部子XML元素“继承”。如在图3中可见到的,为了定义基于结构的访问控制,基于结构的访问权限90优先地从XML模式40的类型信息45引用。而且,ACL还可用于根据基于实例的访问控制保护XML数据库中存储的实例,即单 个XML文档30。为此,XML数据库20中存储的XML文档30直接用包括一个或多个基于实例 的访问权限95的一个或多个ACL来批注,以定义哪个用户可对XML文档30执行的操作(参 照图4)。包括两个基于实例的访问权限(ACE) 95的图7a中描绘的示例ACL对于hrgroup 的成员准予完全访问。所有其它用户对于受保护文档不能进行任何访问(参照图7a中的 “principal”元素以及“grant”和“deny”元素)。如可见到的,图7a的基于实例的访问权 限95不引用单个结构化元素35 (如相比于上述的基于结构的访问权限90),而是图7a中 描绘的整个ACL从XML文档30来引用,以便由该ACL保护。如图7a进一步示出的,ACL不 需要是“无冲突”的。ACL可包括允许某种操作的ACE90、95以及拒绝该操作的ACE 90、95。 该“冲突”经由给定ACL中的ACE 90,95的顺序来解决,即当确定适合的ACE 90、95时,选 择匹配给定用户的第一 ACE。用XQuery杳询警保护的XML数据因为XQuery是用于查询XML数据的最通用的语言,XQuery处理器或XDBMS 10必 须分别实施上面给出的授权方法。因此,当执行由用户60发起的XQuery 50时(参照图2), 需要评估用户60的授权。必须不能由进行查询的用户60访问的XML数据必须对于用户60 来说变为不可见。参考上面给出的示例,对于以下XQuery 50,必须不允许不属于hrgroup 组65的用户60检索任何结果For$x in collection( "hr,,)/employeeLet$y: = $x/salaryffhere$y > 100000Return$x在示例中,上面的XQuery 50确定具有给定数量,即100000以上的薪水的所有雇 员。XQuery 50的第一行在XML数据库20的集合hr中存储的所有XML文档30上迭代。它 通过应用path XML表达式55来提取所包括的employee XML元素35并且将所提取的XML 元素35绑定到变量$x。第二行将变量$y绑定到已绑定到变量$x的employee XML元素 35中包括的salary XML元素35。For子句和let子句都产生用于每个employee XML元素 35的元组。在示例中,生成的元组,也称为元组列表,包括保存用于变量$x和$7的绑定的 两个条目。随后元组列表由示例XQuery 50的第三行中示出的where子句过滤。仅仅具有 绑定到包括的值大于100000的$y的元素的那些元组通过过滤器(where子句)。最后,在 上述步骤之后,XQuery 50将仍然绑定到变量$x的所有元组返回(参见XQuery 50的第四 行)。通常,上述示例中的每个path表达式,例如hr/employee,值(例如$y > 100000)与 变量的每次比较,和每次向变量分配值(例如$y: = $x/Salary),构成XQuery表达式55。如果根据上述图6a和6b的ACL,授权是基于结构的,salary XML元素35不能由 用户60读取。因此,变量$y被分配为空白序列。根据XQuery规范,比较空白序列产生布 尔值false。如果根据上述图7a的ACL,授权是基于实例的,所有的XML文档30对于不是 hrgroup组65的成员的用户60是不可见的。处理 XQuery
如技术人员将会理解的,评估访问控制很大地增加了查询处理的复杂性并且可导 致显著的性能下降。为了解决访问控制定义导致的性能问题,需要在XQuery处理期间优化 访问控制的评估。本发明提供的方法基于图1中示意性示出并且在下面说明的通用XQuery 处理模型。在XQuery处理期间的一个步骤是分类XQuery 50的XQuery表达式55。因为 XQuery是强类型化的语言,每个XQuery表达式55和子XQuery表达式55被分配一种类型, 即XQuery表达式55产生的结果的某种数据类型。为了确定从XML数据库20中存储的XML 文档30提取XML数据的path XML表达式55的类型,检查XML模式40的定义,即基于XML 模式40中存储的类型信息45确定path XML表达式55的类型(参照图5a和上面的说明)。由于XQuery表达式55的潜在复杂性,不是对于每种XQuery表达式55都可静态 地确定相关XML元素35的类型,即在编译XQuery 50的期间。这些情况可通过动态类型检 查来覆盖,其中XQuery表达式55涉及的XML元素35直接引用它们的类型。 在像申请人的Tamino XML服务器这样的XDBMS 10中(参照图2),查询编译的结 果是指定可如何从XML数据库20获得查询结果80的XQuery执行计划70。XQuery执行计 划70包括XDBMS 10的查询执行引擎400提供的操作。这些操作可包括数据库访问操作、 过滤器操作以及XQuery特定的操作。在XQuery编译期间由优化器300执行的优化过程应该找到最佳的XQuery执行计 划70。为此,通常已知的方法是将给定的XQuery 50转换为代数表达式(图1中的“抽象 语法树(AST)”和/或“类型化的AST”)并且经由重写或变换代数表达式来执行优化,这最 终得到优化的XQuery执行计划70。该方法也称作为代数查询处理。代数查询处理基于反映基础的执行引擎400的能力的运算符集合。运算符消费和 生产排序的元组列表。每个元组条目包括例如已根据索引读取、从XML文档30提取或者通 过应用XQuery表达式55确定的一部分XML数据。这些元组条目称为变量绑定。运算符交 换的元组列表称为表结构。图8示出了作为上面给出的示例XQuery 50的变换结果的示例代数查询表达式。 图8描绘了 “运算符树”,即代数表达式的运算符710、720、730、740表示为节点(参照图8 中的框)。每个运算符710、720、730、740消费它的输入运算符710、720、730、740的结果并 且产生可由任何其它运算符710、720、730、740消费的结果。运算符树的定向边(参照图8 中的箭头)可视化了运算符710、720、730、740之间的数据流。不消费任何输入的运算符, 例如710,称作为扫描运算符。扫描运算符负责从磁盘(或者XML数据库30的任何其它存 储装置)读取XML文档30或者访问已在XML文档30上定义用于高效检索的索引。图8的示例运算符树包括DoctypeScan运算符710。在申请人的Tamino中,数据 库可包括一个或多个集合,其中集合可包括一个或多个文档类型。一个文档类型可将各自 包括相同根XML元素的一个或多个XML文档成组(例如文档类型employee中的每个XML文 档包括XML元素employee作为最顶层(根)XML元素)。DoctypeScan运算符710扫描属 于文档类型employee的所有XML元素30并且将它们绑定到变量$d。换言之,DoctypeScan 运算符710为文档类型employee中的每个XML文档30产生一个元组,其中每个元组包括保 存完整XML文档30的单个条目。随后的Path运算符720从所扫描的XML文档30中提取 employee XML元素35并且将它们绑定到变量$x。通常,Path运算符720、730的注脚(图8中在“[”和“]”之间的运算符的部分)包括输出变量和受限制的XQuerypath表达式55。 Path运算符720、730评估用于输入表结构的每个元组的path表达式55并且将输出变量绑 定到产生的XML片段,即path表达式55选择的XML数据的部分。第二 Path运算符730从 每个 employee XML 元素 35 提取 salary XML 元素 35。DoctypeScan 710 和两个 Path 运算 符720、730的结果是具有变量$d、$x和$y的表结构。该表结构随后由在每个输入元组上 应用它的脚注的过滤器谓词(在图8中为“$y> 100000”)的Select运算符740来过滤。 在图8的示例中,仅仅具有值大于100000的绑定到salary XML元素55的$y变量的那些 元组通过Select运算符740。通常,Select运算符740的过滤器谓词可以是任意复杂的布 尔XQuery表达式。转换后的查询(即上述和图8中示出的代数查询表达式)是用于实际查询优化的 输入。运算符树,例如图8中描绘的运算符树给出了代数查询表达式的描述性显现。然而, 为了描述随后的代数变换,将使用更简明的文本表示。应当理解,代数查询表达式的符号、 运算符树和以下的文本表示是等同的。对于上面给出的代数查询表达式,文本表示如下Select [$y > 100000](Path[$y:$b/salary](Path[$x:$d/employee](DoctypeScan[$d "‘employee,,])))用于改善查询处理的效率的通常已知的方法是索引。索引帮助减少需要从XML数 据库30的存储装置读取的XML数据的数量以便评估查询。应当理解,从存储装置,例如硬 盘读取数据是极度费时的并且因此应当保持为最小量。通过代数重写,索引访问运算符可 引入代数查询表达式。假设索引在salary XML元素35上,上述的示例实施例50可通过引 入相应的索引访问运算符来优化。产生的重写的代数表达式内容如下Path[$x:$d/employee](IdxScan[$d ;/employee/salary ;> ; 100000])因此,IdxScan检索包括薪水大于100000的雇员的XML文档30。这尤其有利,因 为仅必须从XML数据库20的存储装置读取满足给出的搜索谓词的那些XML文档30。在可 能有几百万XML文档30的巨型XML数据库的上下文中,例如上述的索引导致巨大的性能改
口 o基于结构的访l、nl控制的评估在下面,基于结构的访问控制的评估将描述为由图2中描绘的XDBMS 10有利地执行。如已经在上面描述的,通过用ACL中包括的访问权限90来批注XML模式40,便利 了基于结构的访问控制。由于这点,可在分类XDBMS 10的预处理器200执行的XQuery 50 的XQuery表达式55期间,有利地执行基于结构的访问控制的评估。在类型分析期间,从 XML模式40检索类型信息45并且用来自XML模式40的类型信息45批注每个XQuery表达 式55。因为用ACL批注XML模式40,分配到XQuery表达式55的类型信息45引用需要被 评估的ACL。如果ACL拒绝声明XQuery 50的用户60的访问,相应的XQuery表达式55呈 现为返回空白序列。因为通常可在语义分析阶段期间静态地执行大部分分类,也可在那时 执行大部分基于结构的访问控制的评估,即由XDBMS 10的预处理器200执行。评估基于结构的访问控制是执行由XDBMS 10的优化器300执行的随后XQuery优化的前提。当优化器 300执行XQuery 50的优化时,查询优化器300不考虑全部受保护的XQuery表达式55,即 涉及受保护以防止用户60访问的XML元素35的所有XQuery表达式55。如上面已经描述的,对于不能静态分类的那些XQuery表达式55,在运行时期间执 行访问控制的评估,即由XDBMS 10的执行引擎400执行。因为在该情况下,与从XML模式 40引用形成对照,直接从XML文档30引用类型信息,可根据来自于XML文档30的引用确定 各个ACL。为了减少需要动态访问控制检查的情况的数量,可使用结构索引。结构索引可保 存关于当前XML数据库中存储的XML数据(即XML文档)的结构的信息,即关于结构化元 素的信息,并且可用于分类XQuery。为此,结构索引可提供XML数据库中哪些结构化元素当 前可用并且哪些不可用的信息,以使得可更具体地确定某些XQuery表达式的类型。基于实例的访向控制的评估 因为在基于实例的访问控制中,从XML文档30本身引用ACL,可通过审查XML数 据库20中存储的实例,即XML文档30,来实施基于实例的访问控制,这优选地在查询执 行期间完成,即由XDBMS 10的执行引擎400完成。为此,优化器300生成的查询执行计 划70根据本发明而被扩展。因此,提供了返回布尔值的并且适于用作为过滤器谓词的 checkPrivelege ()函数。基于上述的示例XQuery,扩展后的XQuery执行计划70如下Path[$x:$d/employee](Select [checkPrivilege ($d, user, read)](IdxScan [$d ;/employee/salary ; > ; 100000]))上面列表的第二行中的另外的Select运算符使用checkPrivilege ()函数来根据 用户60的授权级别过滤XML文档30。如果索引扫描IdxScan (参照上面列表中的第三行) 返回少量的XML文档30,上面的XQuery执行计划70具有高性能。另一方面,在XML数据库20主要包含高薪水的雇员并且声明XQuery 50的用户60 仅可读取有限数量的XML文档30的情况下,甚至可通过应用不同的XQuery执行计划70来 进一步改善性能。根据该不同的XQuery执行计划70,首先经由相应的访问权限索引97,即 如图9中示出的ACL索引,来检索可由用户60访问的XML文档30。图9中示出的ACL索引97由XDBMS 10生成并且用于经由用户60的给定用户ID 以及经由访问操作(例如“读取”、“更新”等)来检索XML文档30。ACL索引97的索引条 目970表示ACE 90,95o每个索引条目970包括principal 970 (对用户和/或组的引用) 和具有表示准予或拒绝权限的标志的privilege 973。与为基于实例的访问控制定义的包 括一个或多个访问权限/ACE 95的ACL形成对照,ACL索引97的索引条目970包括单个访 问权限。对于具有多个访问权限的ACL,生成多个索引条目970。图9示出了根据图7a的 ACL生成的ACL索引97。假设图7a的ACL引用具有标识符“#1”的XML文档30并且因此 ACL索引97在索引列“文档(主题)” 972中包括“#1”。在图9的示例中,除了用户或组标识符971之外,每个ACL索引条目970包括XML 文档标识符972和权限97,以及标识ACL内所表示的ACE的ACE标识符(ACE ID) 974。在 ACE ID上定义对应于ACL中ACE顺序的顺序,根据所述ACL中ACE顺序生成ACL索引97。 因此,ACE ID允许重建初始ACL内ACE的顺序,以便解决“冲突”的ACE。如上面已经说明 的,ACE不必是“无冲突”的,即一个ACE可允许某种操作并且另一个ACE可拒绝该操作。在该情况下,ACE ID用于按ACE ID定义的顺序检查单个ACE并且用于根据索引条目970确 定第一匹配的ACE,以便解决冲突。使用ACL索引97的示例XQuery执行计划70描绘为如下Path[$x:$d/employee](Semi Join (AclIdxScan[$d ;userld, read],IdxScan [$d ;/employee/salary ; > ; 100000]))因此,Aclldxscan(上面列表中的第三行)确定可由给定用户60访问的XML文档 30。为此,AC1 IdxScan读取匹配于给定用户ID (参数userlD)和给定访问操作(上面列表中 为read)的所有ACE,并且检查第一匹配的ACE。基于该ACE,AclIndexScan决定引用的XML 文档30是否属于结果集,即是否用户60被授权检索XML文档30。对于每个结果XML文档 30,随后的Semi Join (上面列表中的第二行)检查XML文档30是否也属于可经由IdxScan 的搜索谓词(上面列表中的第四行)检索的文档集。ACL索引97还可用于优化涉及Join运算和聚集的复杂XQuery。应当执行XQuery 执行计划70的上面给出的变量中的哪些的决定优选地由XDBMS 10的优化器300执行。为 此,优化器300可使用对XML数据库20中的数据(即XML文档30)进行收集的统计数字, 以及对XML数据库20中存储的ACL的统计数字。
权利要求
一种用于包括XML文档(30)的XML数据库(20)的XML数据库管理系统(XDBMS,10),每个XML文档(30)包括一个或多个结构化元素(35)并且遵循XML模式(40),其中至少一个所述结构化元素(35)被保护以防止用户(60)访问,所述XDBMS(10)包括a.优化器(300),适于处理包括一个或多个XQuery表达式(55)的所述用户(60)的XQuery(50),并且还适于生成优化的XQuery执行计划(70);b.执行引擎(400),适于执行所述优化的XQuery执行计划(70),以从所述XML数据库(20)检索XML数据(80),其特征在于c.所述优化器(300)适于生成所述优化的XQuery执行计划(70),以使得所述优化器(300)忽略涉及被保护以防止所述用户(60)访问的一个或多个所述结构化元素(35)的所有XQuery表达式(55)。
2.根据权利要求1所述的XDBMS(10),还适于确定所述用户(60)所属的一个或多个组 (65)并且其中保护至少一个所述结构化元素(35)免受所述一个或多个组(65)的访问。
3.根据权利要求1或2所述的XDBMS(10),还包括预处理器(200),该预处理器适于评 估至少一个基于结构的访问权限(90),以确定要由所述优化器(300)忽略的所述XQuery表 达式(55),所述至少一个基于结构的访问权限(90)保护所述用户(60)和/或所述组(65) 对所述相应结构化元素(35)的访问。
4.根据前述权利要求所述的XDBMS(IO),其中所述预处理器(200)还适于从所述XML 模式(40)中定义的类型信息(45)得到所述至少一个基于结构的访问权限(90)。
5.根据权利要求3或4所述的XDBMS(IO),其中至少一个所述基于结构的访问权限 (90)附属到包括所述各个结构化元素(35)的所述XML文档(30),并且其中所述执行引擎 (400)还适于评估所述至少一个基于结构的访问权限(90)。
6.根据前述权利要求所述的XDBMS(IO),其中所述执行引擎(400)还适于扫描结构索引。
7.根据前述任一权利要求所述的XDBMS(IO),其中所述执行引擎(400)还适于评估附 属到至少一个所述XML文档(30)的一个或多个基于实例的访问权限(95),所述基于实例的 访问权限(95)保护所述用户(60)和/或所述组(65)对所述相应XML文档(30)的访问。
8.根据前述任一权利要求所述的XDBMS(10),还适于根据所述基于结构的(90)和/或 基于实例的访问权限(95)生成访问权限索引(97),并且其中所述执行引擎(400)适于扫描 所述访问权限索引(97)。
9.根据前述权利要求所述的XDBMS(IO),其中所述访问权限索引(97)包括一个或多个 索引条目(970),所述索引条目(970)各自包括到用户和/或组的引用(971)、到XML文档 的引用(972)、访问权限(973)和/或标识符(974)。
10.根据前述权利要求所述的XDBMS(IO),其中所述执行引擎适于根据所述索引条目 (970)的标识符(974)定义的顺序来评估所述访问权限索引(97)中与所述用户(60)和/ 或所述组(65)匹配的第一索引条目(970)。
11.根据前述任一权利要求所述的XDBMS(IO),其中所述基于结构的(90)和/或基于 实例的访问权限(95)由访问控制列表(ACL)定义。
12.一种包括用于实现根据前述任一权利要求所述的XML数据库管理系统(XDBMS,10) 的指令的计算机程序。
13.一种方法,用于处理用户(60)的XQUery(50)以使用根据前述权利要求1-11中任 何一个所述的XML数据库管理系统(XDBMS,10)从XML数据库(20)检索XML数据(80)。
14.一种包括用于实现根据前述权利要求所述的方法的指令的计算机程序。
全文摘要
公开了一种包括访问受保护的XML数据的XML数据库的管理系统。本发明涉及一种用于包括XML文档(30)的XML数据库(20)的XML数据库管理系统(XDBMS,10),每个XML文档(30)包括一个或多个结构化元素(35)并且遵循XML模式(40),其中至少一个所述结构化元素(35)被保护以防止用户(60)访问,所述XDBMS(10)包括a.优化器(300),适于处理包括一个或多个XQuery表达式(55)的所述用户(60)的XQuery(50),并且还适于生成优化的XQuery执行计划(70);b.执行引擎(400),适于执行所述优化的XQuery执行计划(70),以从所述XML数据库(20)检索XML数据(80),其特征在于c.所述优化器(300)适于生成所述优化的XQuery执行计划(70),以使得所述优化器(300)忽略涉及被保护以防止所述用户(60)访问的一个或多个所述结构化元素(35)的所有XQuery表达式(55)。
文档编号G06F17/30GK101847155SQ201010140810
公开日2010年9月29日 申请日期2010年3月24日 优先权日2009年3月24日
发明者于尔根·哈巴斯, 托尔斯特恩·飞尔比格, 海科·韦伯 申请人:软件股份公司