校验对数据存储器的动态生成操作转让专利

申请号 : CN200510088530.7

文献号 : CN1744061B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : D·E·希帕G·吴J·M·史东三世J·E·利德J·拜尔德S·B·伯格丹

申请人 : 微软公司

摘要 :

校验对数据存储器的动态生成操作包括执行用于访问数据存储器的设置动作,该设置动作至少部分地基于对将产生的动态生成操作的请求。设置动作的执行包括对部分数据存储器设置许可以建立数据存储器的受限制部分和数据存储器的未受限制部分,以及使用一种或多种其它技术来检查是否对未受限制部分作了任何非期望改变,或锁定对未受限制部分中各部分的访问。在执行动态生成操作之后,校验非期望工作未由动态生成操作执行。如果非期望工作已执行,则操作被确定为对于该请求不正确。

权利要求 :

1.一种用于校验动态生成操作未执行非期望工作的方法,包括:对数据存储器设置许可以允许仅访问所述数据存储器的未受限制部分,所述数据存储器的未受限制部分排除了不应被因请求而动态生成的对所述数据存储器的一个或多个操作访问的所述数据存储器的第一部分;以及在执行所述一个或多个操作之后,检查是否对所述未受限制部分作了任何非期望改变。

2.如权利要求1所述的方法,其特征在于,所述非期望改变包括为执行所述请求对不应被改变的所述未受限制部分中数据的任何添加、删除、或更改。

3.如权利要求1所述的方法,其特征在于,还包括:

在执行所述一个或多个操作之前捕捉对所述未受限制部分的一部分的第一抽点,并在执行所述一个或多个操作之后捕捉对所述未受限制部分的一部分的第二抽点;以及要检查是否对所述未受限制部分作了任何非期望改变,则比较所述第一抽点和第二抽点。

4.如权利要求3所述的方法,其特征在于,所述未受限制部分的一部分包括为执行所述请求的所述未受限制部分的不应被改变部分。

5.如权利要求3所述的方法,其特征在于,还包括:

当所述第一抽点和所述第二抽点不相同时,确定对所述未受限制部分作了非期望改变。

6.如权利要求3所述的方法,其特征在于,还包括:

当所述第一抽点和所述第二抽点相同时,确定对所述未受限制部分未作非期望改变。

7.如权利要求3所述的方法,其特征在于,所述未受限制部分的一部分是来自数据库中一个或多个表格的一个或多个行的数据。

8.如权利要求7所述的方法,其特征在于,要捕捉所述第一抽点是在执行所述一个或多个操作之前从所述一个或多个行中复制一列版本值,而要捕捉所述第二抽点则是在执行所述一个或多个操作之后从所述一个或多个行中复制所述列版本值。

9.如权利要求7所述的方法,其特征在于,要捕捉所述第一抽点是在执行所述一个或多个操作之前从所述一个或多个行中复制一列版本值和一列主键值,而要捕捉所述第二抽点则是在执行所述一个或多个操作之后从所述一个或多个行中复制所述列版本值和所述列主键值。

10.如权利要求1所述的方法,其特征在于,要检查是否对所述未受限制部分作了任何未受限制改变是要:请求由所述数据存储器发送对所述数据存储器的未受限制部分作了任何改变的通知;以及分析从所述数据存储器接收的任何通知以确定为执行所述请求是否有不应发生的对所述未受限制部分中数据的任何添加、删除或更改发生。

11.一种用于校验不应被动态生成操作访问的数据存储器的各部分未被动态生成操作访问的方法,包括:对数据存储器设置许可以允许仅访问所述数据存储器的未受限制部分,所述数据存储器的未受限制部分排除了不应被因请求而动态生成的对所述数据存储器的一个或多个操作访问的所述数据存储器的第一部分;以及锁定对不应由所述一个或多个操作访问的所述数据存储器的一部分的访问,所述数据存储器的该部分被包括在所述未受限制部分内。

12.如权利要求11所述的方法,其特征在于,所述数据存储器包括具有多个表格的一数据库,所述数据存储器的未受限制部分包括所述多个表格的一个或多个,而所述数据存储器的一部分包括所述未受限制部分中所述多个表格的至少一个的一个或多个行。

13.如权利要求11所述的方法,其特征在于,要锁定对所述数据存储器的一部分的访问是要防止所述一个或多个操作访问所述数据存储器的所述部分。

14.如权利要求11所述的方法,其特征在于,要锁定对所述数据存储器的一部分的访问是要对所述数据存储器的一部分的数据开始一个或多个更新处理,但直到执行了所述一个或多个操作之后才会完成所述一个或多个更新处理。

15.如权利要求11所述的方法,其特征在于,所述请求包括对从所述数据存储器检索数据的请求。

16.一种确定对数据存储器的动态生成操作是否正确的方法,其特征在于,所述方法包括:执行用于访问数据存储器的设置动作,所述设置动作至少部分地基于对将产生的动态生成操作的请求,所述执行包括对部分数据存储器设置许可以建立数据存储器的受限制部分和数据存储器的未受限制部分,所述执行还包括锁定对未受限制部分中一部分的访问或允许随后检查是否对未受限制部分作了任何非期望改变;

在执行动态生成操作之后,校验非期望工作未由动态生成操作执行;

当非期望工作未由动态生成操作执行时,确定操作对于该请求正确;以及当非期望工作已由动态生成操作执行时,确定操作对于该请求不正确。

17.如权利要求16所述的方法,其特征在于,允许随后检查是否对未受限制部分作了任何非期望改变包括:在执行所述动态生成操作之前捕捉所述未受限制部分的第一部分的第一抽点。

18.如权利要求17所述的方法,其特征在于,还包括:

在执行所述动态生成操作之后捕捉所述未受限制部分的第一部分的第二抽点;

比较所述第一抽点和所述第二抽点;

当所述第一抽点和所述第二抽点不相同时,确定非期望工作已由动态生成操作执行;以及当所述第一抽点和所述第二抽点相同时,确定非期望工作未由动态生成操作执行。

19.如权利要求17所述的方法,其特征在于,所述未受限制部分的第一部分包括为执行所述请求的未受限制部分的不应被改变部分。

20.如权利要求17所述的方法,其特征在于,所述未受限制部分的第一部分是来自数据库中一个或多个表格的一个或多个行的数据。

21.如权利要求16所述的方法,其特征在于,允许随后检查是否对未受限制部分作了任何非期望改变包括:请求由所述数据存储器发送对所述数据存储器的未受限制部分作了任何改变的通知;以及分析从所述数据存储器接收的任何通知以确定为执行所述请求的是否有不应发生的对所述未受限制部分中数据的任何添加、删除或更改发生。

22.如权利要求16所述的方法,其特征在于,所述锁定对所述未受限部分中的一部分的访问包括:对所述未受限部分中的一部分开始一个或多个更新处理,但直到执行了所述动态生成操作之后才会完成所述一个或多个更新处理。

23.如权利要求16所述的方法,其特征在于,还包括仅当所述请求为要更改所述数据存储器的请求时,允许随后检查是否对未受限制部分作了任何非期望改变。

24.如权利要求16所述的方法,其特征在于,还包括仅当所述请求为要从所述数据存储器检索数据的请求时,锁定对所述未受限制部分的一部分的访问。

25.一种数据集成管理器,其特征在于,包括:

一抽点模块,在执行了对数据存储器的一个或多个操作之后,检查是否对所述数据存储器的一部分作了任何非期望改变,所述一个或多个操作因一请求而被动态生成;

一锁定设置模块,锁定对所述数据存储器的不应被所述一个或多个操作访问的一部分的访问,所述数据存储器的一部分应被包括在所述数据存储器的所述部分中。

26.如权利要求25所述的数据集成管理器,其特征在于,还包括:一许可模块,设置对数据存储器的许可以仅允许访问所述数据存储器的一部分,所述数据存储器的一部分排除了所述数据存储器的不应被所述一个或多个操作访问的另一部分。

27.如权利要求25所述的数据集成管理器,其特征在于,所述抽点模块是要在仅当所述请求为要更改所述数据存储器的请求时,检查是否对所述部分作了任何非期望改变。

28.如权利要求25所述的数据集成管理器,其特征在于,所述锁定设置模块是要在仅当所述请求为要从所述数据存储器检索数据的请求时,才锁定对所述数据存储器的一部分的访问。

29.如权利要求25所述的数据集成管理器,其特征在于,所述抽点模块要检查是否对所述部分作了任何非期望改变是要:在执行一个或多个操作之前捕捉所述部分的第一部分的第一抽点;

在执行一个或多个操作之后捕捉所述部分的第一部分的第二抽点;

比较所述第一抽点和所述第二抽点;

当所述第一抽点和所述第二抽点不相同时,确定已对所述部分作了非期望改变;以及当所述第一抽点和所述第二抽点相同时,确定未对所述部分作非期望改变。

30.如权利要求25所述的数据集成管理器,其特征在于,所述抽点模块要检查是否对所述部分作了任何非期望改变是要:请求由所述数据存储器在对所述数据存储器的所述部分作了任何改变时发送通知;以及分析从所述数据存储器接收的任何通知以确定为执行所述请求是否有不应发生的对所述部分中数据的任何添加、删除或更改发生。

31.如权利要求25所述的数据集成管理器,其特征在于,所述锁定设置模块要锁定对所述数据存储器的不应由所述一个或多个操作访问的一部分的访问是要:对所述数据存储器的一部分数据开始一个或多个更新处理,但直到执行了所述一个或多个操作之后才会完成所述一个或多个更新处理。

32.一种确定对数据存储器的动态生成操作是否正确的系统,其特征在于,包括:一装置,用于执行用于访问数据存储器的设置动作,所述设置动作至少部分地基于对将产生的动态生成操作的请求,所述用于执行的装置包括一装置,用于对部分数据存储器设置许可以建立数据存储器的受限制部分和数据存储器的未受限制部分,所述用于执行的装置还包括一装置,用于锁定对未受限制部分中一部分的访问或一装置,用于允许随后检查是否对未受限制部分作了任何非期望改变;

一装置,用于在执行动态生成操作之后,校验非期望工作未由动态生成操作执行;

一装置,用于在非期望工作未由动态生成操作执行时,确定操作对于该请求正确;以及一装置,用于在非期望工作已由动态生成操作执行时,确定操作对于该请求不正确。

33.如权利要求32所述的系统,其特征在于,所述允许随后检查是否对未受限制部分作了任何非期望改变的装置包括:一装置,用于在执行所述动态生成操作之前捕捉所述未受限制部分的第一部分的第一抽点。

34.如权利要求33所述的系统,其特征在于,还包括:

一装置,用于在执行所述动态生成操作之后捕捉所述未受限制部分的第一部分的第二抽点;

一装置,用于比较所述第一抽点和所述第二抽点;

一装置,用于在所述第一抽点和所述第二抽点不相同时,确定非期望工作已由动态生成操作执行;以及一装置,用于在所述第一抽点和所述第二抽点相同时,确定非期望工作未由动态生成操作执行。

35.如权利要求32所述的系统,其特征在于,所述用于允许随后检查是否对所述未受限制部分作了任何非期望改变的装置包括:一装置,用于请求由所述数据存储器发送对所述数据存储器的未受限制部分作了任何改变的通知;以及一装置,用于分析从所述数据存储器接收的任何通知以确定为执行所述请求是否有不应发生的对所述未受限制部分中数据的任何添加、删除或更改发生。

36.如权利要求32所述的系统,其特征在于,所述用于锁定对所述未受限制部分中的一部分的访问的装置包括:一装置,用于对所述未受限制部分中的一部分数据开始一个或多个更新处理,但直到执行了所述动态生成操作之后才会完成所述一个或多个更新处理。

说明书 :

技术领域

本发明涉及测试和校验,尤其涉及对数据存储器校验动态生成操作。

背景技术

随着计算机技术的进步,存储装置的容量增大。一个或多个这种存储装置可被视为数据存储器,且不同的技术已被开发来维护和访问包括在数据存储器中的大量数据。由于用来访问数据的技术随着时间可细化和变化,正在开发抽象访问数据的细节的产品。然后这种抽象产品可由应用程序开发者利用以便访问已存储的数据。因而,应用程序开发者可与抽象产品的更便于使用接口交互,并依赖于该抽象产品来理解访问存储装置的细节。
通常,这些抽象产品将从应用程序接收的请求或指令从一种格式转换成数据存储器理解的另一种格式。例如,来自应用程序的对改变特定数据值的请求(例如以一编程语言)可由抽象产品转换成查找数据存储器一部分然后将新数据写在数据存储器的那部分的一系列操作(例如一系列SQL语句)。
这种抽象产品可遇到的一个问题是必须小心以确保该转换正确地进行。如果转换未正确进行,则应用程序请求的结果可能不准确,且不能依赖于抽象产品作准确操作。可解决该问题的一种方法是通过在给定抽象产品所接收的请求时分析由该抽象产品生成的操作或指令,并确定那些操作或指令是否准确来测试该抽象产品。然而,这样的分析和确定非常困难,特别是考虑到抽象产品所生成的操作或指令的格式,以及特定的操作和指令本身在持续地变化的事实。因而,具有一种更好的校验抽象产品正确转换所接收请求和命令的方法将是有益的。

发明内容

在此描述校验对数据存储器的动态生成操作。
根据某些方面,对数据存储器设置许可以允许仅访问数据存储器的未受限制部分。数据存储器的未受限制部分排除了不应由因请求而动态生成的对数据存储器的一个或多个操作访问的数据存储器的第一部分。在执行对数据存储器的一个或多个操作之后,检查对该未受限制部分是否有任何非预期改变。
根据其它方面,对数据存储器设置许可以允许仅访问数据存储器的未受限制部分。数据存储器的未受限制部分排除了不应由因请求而动态生成的对数据存储器的一个或多个操作访问的数据存储器的第一部分。此外,锁定对不应由一个或多个操作访问的数据存储器一部分的访问,该数据存储器部分被包括在未受限制部分中。

附图说明

在本文档中使用相同标号来标示类似组件和/或特征。
图1是示出可执行对数据存储器的动态生成操作的校验的示例环境的框图。
图2是示出用于对数据存储器校验动态生成操作的示例过程的流程图。
图3更详细地示出一示例数据集成管理器。
图4是示出用于校验动态生成操作未执行非预期工作的示例过程的流程图。
图5是示出用于校验动态生成操作未执行非预期工作的另一示例过程的流程图。
图6是示出用于校验不应由动态生成操作访问的数据存储器的各部分未被动态生成操作访问的示例过程的流程图。
图7示出可被用来实现在此所述技术的一通用计算机环境。

具体实施方式

在此描述校验对数据存储器的动态生成操作。当作出涉及对数据存储器的访问的请求时,一个或多个操作以请求者名义动态生成,且该一个或多个操作被发送给执行这些操作的数据存储器。检查是否已执行了根据请求期望在数据存储器上执行的工作,并检查是否未执行根据请求不期望在数据存储器上执行的工作。如果这些检查指示执行了期望工作且未执行非期望工作,则这些因请求而动态生成的操作被证实是准确的。可使用各种不同技术来校验未对数据存储器执行非期望工作。
图1是示出可执行对数据存储器的动态生成操作的校验的示例环境100的框图。环境100包括数据集成管理器102、操作发生器104、数据存储器106和应用程序108。
数据存储器106可以是任何存储数据的系统。例如,数据存储器106可以是诸如微软SQL服务器数据库的数据库(例如关系数据库或非关系数据库)。数据存储器106可有选择地是任何其它类型的结构化和持久存储器,通过它应用程序可使用该存储器来查询、插入、更新、或删除其数据内容,诸如可扩展标记语言(XML)文档、文件系统等。
操作发生器104是作为应用程序108和数据存储器106之间一中间体操作的抽象组件。对访问数据存储器106的请求可由应用程序108对操作发生器104作出,而该操作发生器104随后动态生成对数据存储器106执行的一个或多个操作。由于这些操作由操作发生器基于从应用程序108接收的特定请求而生成,这些操作被视为是动态生成的。由应用程序108作出的请求可包括,例如从数据存储器106检索数据的请求、更改数据存储器106中数据的请求、将数据添加到数据存储器106的请求、以及从数据存储器106删除数据的请求。由操作发生器108动态生成的操作可用各种常规方法的任一种生成,且将至少部分地依赖于从应用程序108接收的特定请求以及由数据存储器106提供的存储器本性或类型。由操作发生器108动态生成的操作可以是查询、数据处理语句、请求、命令、指令等。例如,由操作发生器108动态生成的操作可包括从数据存储器106读取数据的操作、将数据写入数据存储器106的操作、在数据存储器106中创建数据新条目的操作(例如在数据库表格中创建新行)、以及在数据存储器106中删除数据条目的操作(例如从数据库表格中删除行)。
应用程序108可以是访问数据存储器106的各种不同应用程序的任一种(例如计算机程序)。此外,尽管在图1仅示出单个应用程序108,应注意多个应用程序可通过操作发生器104访问数据存储器106。在某些实施例中,应用程序108是被设计成测试操作发生器104的一测试应用程序,它向操作发生器104发送各种请求从而可校验发生器104在动态生成操作中的行为。在其它实施例中,应用程序108可以是非测试应用程序,但使用数据集成管理器102来校验操作发生器104在正常工作。
在某些实施例中,访问数据存储器106的每个组件或模块,诸如操作发生器104或数据集成管理器102,通过连接进行访问。该组件或模块通过连接登录数据存储器106。操作发生器104作为一特定用户(可指人类用户或仅是某标识符)登录数据存储器106,并可并发多次地登录数据存储器106。该连接具有一个与其相关联的权限或许可集,它们标识使用该连接的组件被允许在数据存储器106上动作。例如,某一组件可被允许访问数据存储器106的某些部分,或可被允许从数据存储器106读取但不允许写入。组件或模块通过该连接与数据存储器106通信,但仅有满足连接限制的操作才能由数据存储器106执行。
数据集成管理器102使用到数据存储器106的未受限制连接110。数据集成管理器102未被禁止对数据存储器106执行任何操作。另一方面,操作发生器104使用到数据存储器106的受限制连接112。基于已由应用程序108发出的特定请求,操作发生器104被禁止对数据存储器106执行某些操作。数据集成管理器102对受限制连接112设置这些限制,如下进行更详细讨论。
图2是示出用于校验对数据存储器的动态生成操作的示例过程200的流程图。过程200可用软件、固件、硬件或其组合执行。图2参照图1环境100的组件进行讨论。对由应用程序108发送给操作发生器104的多个请求(例如所有请求)的每一个重复过程200。
开始时,执行对数据存储器106的访问的设置动作(动作202)。如果受限制连接112尚未存在,则在动作202创建。如下将要更详细讨论地,这些设置动作可包括例如,准予或拒绝特定的许可并在受限制连接112上设置这种许可、允许对数据存储器的非期望改变的随后检查(例如通过取数据存储器106某些部分的抽点(snapshot))、锁定数据存储器106的一部分等等。要执行的特定设置动作由应用程序108向数据集成管理器102标识。应用程序108知道要向操作发生器104发送的特定请求,并因而能够标识由发生器104在访问数据库106时要执行的特定设置动作以执行该请求。例如,如果应用程序108是要校验数据集成管理器102行为的测试程序,则应用程序108通常将被设计为知道应由发生器104执行的设置动作。作为另一示例,如果应用程序108不是测试程序,则应用程序108可能仍然知道一些发生器104应执行的设置动作(例如,如果应用程序108包括用户可将物品添加到其购物车中的一个部分,以及用户可为购物车中物品付款的另一部分,则应用程序108知道,诸如数据存储器106中的信用卡号码的任何帐单信息不应被涉及将物品添加到购物车或从中删除物品的请求访问)。
可任选地,在已执行了所需设置动作之后,数据集成管理器102可向应用程序108返回已执行设置动作的指示,从而通知应用程序108它可将其请求发送给操作发生器104。
一旦执行了设置动作,操作发生器104基于从应用程序接收的请求动态生成适当的操作(动作204),并执行对数据存储器106的动态生成操作(动作206)。
然后应用程序108校验被执行的期望工作(动作208)。动作208中的该校验可用各种常规方法的任一种执行。应用程序108知道请求是什么,并因而在数据存储器106中应改变什么(如果有),因此它可发送附加请求以校验所要求的改变。例如,如果请求是向数据存储器106添加数据,则应用程序108可尝试检索应当已被添加的数据,且如果它检索到该数据则应用程序108知道期望工作已被执行。
数据集成管理器102还校验未执行非期望工作(动作210)。如下将要更详细讨论地,该校验可基于对数据存储器106所作改变、是否尝试访问锁定数据、是否尝试访问拒绝访问的数据等的分析。该校验的结果可任选地被返回到应用程序108。或者,由数据集成管理器102收集的信息(例如以下将要更详细讨论的抽点)可被返回到应用程序108以用于由应用程序108校验未执行非期望工作。
动态生成操作是否被校验为正确取决于在动作208和210中的校验(动作212)。如果期望工作被执行得到证实,且非期望工作未被执行也得到证实,则动态生成操作被证实是正确的(动作214)。然而,如果期望工作被执行未得到证实,和/或非期望工作未被执行也未得到证实,则动态生成操作未被证实为正确的(动作216)。
图3更详细地示出一示例数据集成管理器102。数据集成管理器102包括抽点模块302、许可模块304、以及锁定设置模块306。许可模块304设置许可从而仅可访问数据存储器106的某部分。基于这些许可,数据存储器106的那些可访问部分被称为数据存储器106的未受限制部分,而数据存储器的那些不可访问部分被称为数据存储器106的受限制部分。抽点模块302检查是否对数据存储器106的未受限制部分作了任何非期望改变。锁定设置模块306锁定数据存储器106的未受限制部分的某些部分从而那些被锁定部分不能由操作发生器104访问。模块302、304和306的行为进行更详细讨论如下。
应注意某些实施例并不包括抽点模块302、许可模块304、以及锁定设置模块306的每一个。哪些模块被包括在特定数据集成管理器102中可基于管理器102设计者的需要,以及由数据存储器106所支持的功能而变化。例如,如果数据存储器106不支持使数据存储器106的一部分被锁定或以其它方式变成暂时不可访问的机制,则锁定设置模块306可不被包括在数据集成管理器102中。作为另一示例,如果管理器102的设计者不需要使用由数据存储器106支持的任何许可(或者如果数据存储器106不支持许可),则许可模块304不需被包括在数据集成管理器102中。
许可模块304设置对访问数据存储器106的许可。数据存储器106使对数据存储器106不同部分的许可被准予和/或拒绝,且这些许可与一特定连接相关联。因此,数据集成管理器102可设置对受限制连接112的许可以限制可由操作发生器104经受限制连接112访问的数据存储器106部分。操作发生器104可访问未受限制部分,但不能访问受限制部分。不同的许可可对与数据存储器106的不同连接设置(例如多个受限制连接112可由操作发生器104使用以与数据存储器106通信,且该多个受限制连接的每一个可具有不同的许可设置)。
可用来定义数据存储器106的受限制和不受限制部分的许可上的粒度可基于特定数据存储器而变化。许可可在例如表格级别、列级别、行级别、页面级别、线级别等上设置。在某些实施例中,其中数据存储器106是微软SQL服务器数据库,数据存储器106允许许可在列级别或表格级别上设置。微软SQL服务器数据库通常由多个表格组成,每个表格可具有多个行和多个列。如果许可在表格级别上设置,则数据存储器106使访问特定表格的许可被准予或拒绝。如果许可在列级别上设置,则数据存储器106使访问特定表格特定列的许可被准予或拒绝。在微软SQL服务器数据库中,在表格中创建行的操作和从表格中删除行的操作在表格级别上设置,而更新表格中数据的操作以及从表格中读取数据的操作则在列级别上设置。
如果由操作发生器104动态生成的操作尝试访问数据存储器106的受限制部分,则数据存储器106可向操作发生器104(或数据集成管理器102)返回已作访问受限制部分的尝试的指示。或者,数据存储器106可干脆不执行该操作,且在一定时间之后(称为超时期),操作发生器104将假设对该操作有问题发生。基于从数据存储器106接收的指示,或超时期已过,已作访问受限制部分的尝试的指示被报告回应用程序108,从而通知应用程序108由操作发生器104动态生成的一个或多个操作有问题。
许可模块304的行为可从以下示例观察。假设数据存储器106包括三个表格:存储有关客户信息的客户表格、存储有关己下订单信息的订单表格、以及存储付款信息(例如信用卡号码)的付款表格。还假设应用程序108将要向操作发生器104发送将一客户(例如名字、地址、电话号码等)添加到客户表格中的请求,且应用程序108通知数据集成管理器102(例如作为图2创建动作202的一部分)将客户添加到客户表格的请求将无需访问订单表格或付款表格。数据集成管理器102因而可对受限制连接112设置许可使对订单表格和付款表格的访问被拒绝,但对客户表格的访问被准予。因而,当操作发生器104动态生成(各)操作以添加如请求中所指客户来由应用程序108改变名字时,如果由发生器104生成的任意操作尝试访问订单表格或付款表格,数据存储器106将不允许该访问执行。数据存储器106可向发生器104(或数据集成管理器102)返回已尝试访问拒绝访问表格的一指示,或者数据存储器106可不执行该操作,且在超时期已过后操作发生器104将假设对该操作有问题发生。
然而,许可的准予和拒绝并不总能检测出不恰当的操作。例如,继续上例,假设由操作发生器104动态生成的操作还从客户表格中删除一客户。由于操作发生器104具有访问客户表格的许可,该许可将不禁止这种不正确删除的发生。
抽点模块302检查是否对数据存储器106的未受限制部分作了任何非期望改变。抽点模块302不需要检查是否对数据存储器106的受限制部分作了任何非期望改变,因为它依赖已设置的许可来防止对数据存储器106的受限制部分作任何改变。或者,抽点模块302可检查是否对数据存储器106的其它区域而非仅仅未受限制部分作了任何非期望改变。此外,应注意数据存储器106的未受限制部分可以是数据存储器106的全部(例如在无许可模块304的实施例中,整个数据存储器106可被视为是未受限制部分)。
应用程序108通知数据集成管理器102所期望的对数据存储器106的改变,允许抽点模块302检查对未受限制部分所作的任何非期望改变。或者,对未受限制部分所作改变的指示可由抽点模块302返回到应用程序108,从而应用程序108可确定是否对未受限制部分作了任何非期望改变。
抽点模块302可用各种不同方法检查对数据存储器106的未受限制部分是否作了任何非期望改变。在某些实施例中,抽点模块采取对不期望由动态生成操作改变的数据存储器106的全部未受限制部分的抽点。该抽点可被视为例如图2动作202中创建的一部分。该抽点还可被称为“执行前”或“之前”抽点,因为它是在执行动态生成操作前进行的。不期望由动态生成操作改变的数据存储器106的那些未受限制部分由例如应用程序108标识。因为应用程序108知道将要发送的请求是什么,应用程序108还知道在数据存储器106中应发生什么和不应发生什么,并将其传递给数据集成管理器102。例如,如果要创建表格中的新行(例如客户表格中的新客户),则不应有表格中现有的行被动态生成操作改变。作为另一示例,如果要删除表格中的行(例如从客户表格中移除一客户),则除了要删除的行不应有其它行被动态生成操作改变。应注意,应用程序108所知道的有关什么应当和不应在数据存储器106中发生的通常根据特定请求所不需要的来特征化。例如,如果应用程序108知道请求应当仅影响表格中的两行,则应用程序108可列举这两行并表示不应改变其它行,而不列举不应改变的可能成千上万行。
不期望由动态生成操作改变的数据存储器106的未受限制部分的各部分上的抽点可用不同方法取得。在某些实施例中,抽点通过复制或以其它方式捕捉不期望由动态生成操作改变的数据存储器106的未受限制部分的各部分中的所有数据取得。在其它实施例中,抽点通过计算在不期望由动态生成操作改变的数据存储器106的未受限制部分的各部分上的散列值(使用常规散列函数)来取得。
在其它实施例中,抽点通过复制或以其它方式捕捉数据存储器106的未受限制部分的不同部分的版本号来取得。例如,在数据存储器106是具有一个或多个表格的数据库的实施例中,可在表格中包括一列版本值。数据库特定行的版本值由数据库在每当特定行中的数据有变化时改变。版本值可以是例如期望在数据库中唯一的值,诸如全局唯一标识符(GUID)、日期和时间标记(例如用纳秒来测量时间)、由将散列函数应用于行中数据导致的散列值等。如果这样的一列版本值未在表格中,则数据集成管理器102可在该表格中创建该列(例如,作为图2创建动作的一部分)。
除了复制或以其它方式捕捉数据存储器106的未受限制部分的不同部分的版本号之外,在某些实施例中也可复制或以其它方式捕捉指示该版本号是对哪一部分的指示符。例如,在数据存储器106包括具有一列版本值的表格的实施例中,另一列可包括唯一标识表格的各行的标识符(例如主键值)。抽点因而可维护版本号和表格特定行之间的关联。通过具有这些使版本号与表格特定行之间关联的附加标识符,更准确地标识任何被检测改变的本质是可能的,如下进行更详细的讨论。
在已取得对不期望由动态生成操作改变的数据存储器106的未受限制部分的各部分的抽点之后,可执行动态生成操作。在执行动态生成操作之后,可取不期望由动态生成操作改变的数据存储器106的未受限制部分的各部分的另一次抽点。该第二抽点以上述执行前抽点的同样方式取得。该第二抽点被视为例如图2动作210中校验的一部分。该第二抽点还可被称为“执行后”或“之后”抽点,因为它是在执行动态生成操作之后取得的。应注意,该第二抽点所取的是不期望由动态生成操作改变的数据存储器106的未受限制部分的各部分,且不必是执行前抽点所取的相同部分。因而,例如,如果任何不同于期望由动态生成操作添加的行的新行被添加到未受限制部分中的表格,则所取得的执行后抽点将包括这些新行。
如果对不期望由动态生成操作改变的数据存储器106的未受限制部分的各部分有任何改变,则那些改变应被反映在抽点中。例如,被添加到不期望改变的数据存储器的未受限制部分的任何数据(例如表格的行)、从不期望改变的数据存储器的未受限制部分删除的任何数据、以及在不期望改变的数据存储器的未受限制部分中被更改的任何数据,将被反映在抽点中。因此,如果执行前抽点和执行后抽点是相同的(即恒等值,不管该值是不期望由动态生成操作改变的数据存储器106的未受限制部分的各部分中的所有数据、还是散列值或版本值等),则未对不期望由动态生成操作改变的数据存储器106的未受限制部分的各部分作任何改变。
取决于取抽点的方法,可标识不期望由动态生成操作改变但确实改变了的数据存储器106的未受限制部分的特定部分。例如,如果诸如主键值的标识符作为为抽点的一部分被复制或以其它方式捕捉,则当特定版本号在执行前和执行后抽点中不同时,抽点模块302知道表格的哪一行(基于标识符)被改变。
由于具有使版本号和表格特定行之间关联的附加标识符,就可能更准确地标识所检测的任何变化的实质了。例如,如果版本号改变而行的标识符保持不变,则对行中的数据有一更改。作为另一示例,如果未在执行后抽点中出现的行标识符出现在执行前抽点中,则由该行标识符标识的行是从该表格中被删除的一行。
在其它实施例中,不对数据存储器106的各部分取抽点,抽点模块302使用触发器来确定是否对数据存储器106的未受限制部分作了任何非预期改变。触发器是由某些数据存储器106支持的一种机制,它使抽点模块302要求它获得来自数据存储器106的对数据存储器106的特定表格(或其它单元)所作每次改变的通知。这种改变可包括,例如,被添加到特定表格的数据、从特定表格删除的数据、以及在特定表格中被更新的数据。抽点模块302维护它从数据存储器106获知的这些改变的记录(例如列出这些改变的表格),然后在执行动态生成操作之后估算该记录(例如作为图2检验动作210的一部分)。或者,改变的记录(例如列出改变的表格)可由数据存储器106维护,且该记录可由抽点模块302访问。
如果不是所期望的应用程序108通知数据集成管理器102的改变的任何改变被包括在该改变记录中,则抽点模块302知道动态生成操作对数据存储器106的未受限制部分作了非期望改变。如果包括在该记录中的仅有改变是所期望的应用程序108通知数据集成管理器102的改变,则抽点模块302知道动态生成操作对数据存储器106的未受限制部分未作非期望改变。
在某些实施例中,许可模块304和抽点模块302被用来校验未因来自应用程序108的涉及更改数据存储器106的请求而执行非期望工作,诸如在数据存储器106中创建条目(例如行、列、表格、页面、线、框等)、更新数据存储器106中的条目、和/或删除数据存储器中的条目。许可模块304和锁定设置模块306被用来校验未因来自应用程序108的涉及从数据存储器106读取条目的请求而执行非期望工作,如下进行更详细描述。
图4是示出用于校验未由动态生成操作执行非期望工作的示例过程400的流程图。过程400是可被执行为实现图2的设置动作202和/或校验动作210的过程的示例。过程400可用软件、固件、硬件、或其组合来执行。
开始时,使用许可来拒绝对不应被访问的数据存储器部分的访问(动作402)。这些许可可由例如上述图3的许可模块304设置。在执行动态生成操作之后,检查动态生成操作是否对数据存储器的未受限制部分作了非期望改变(动作404)。该检查由例如上述图3的抽点模块302进行。检查结果可被返回到例如应用程序108。
然后过程400基于动态生成操作是否对数据存储器的未受限制部分作了任何非期望改变,或是否访问了数据存储器的受限制部分而继续(动作406)。对数据存储器的未受限制部分是否作了任何非期望改变从动作404中的检查结果确定。是否尝试对数据存储器的受限制部分的任何访问则基于由所述许可模块304设置的许可来执行。
如果动态生成操作对数据存储器的未受限制部分作了任何非期望改变和/或访问了数据存储器的受限制部分,则动态生成操作执行了非期望工作(动作408)。可任选地,对什么工作已执行的指示可被返回到图1的应用程序108,或者某些非期望工作已被执行的指示可被返回到应用程序108。然而,如果动态生成操作对数据存储器的未受限制部分未作任何非期望改变且未访问数据存储器的受限制部分,则动态生成操作未执行非期望工作得到证实(动作410)。该校验可任选地被返回到应用程序108。
图5是示出用于校验未由动态生成操作执行非期望工作的另一示例过程500的流程图。过程500是可被执行为实现图2的设置动作202和/或校验动作210的过程的示例。过程500可用软件、固件、硬件、或其组合来执行。
开始时,使用许可来拒绝对不应被访问的数据存储器部分的访问(动作502)。这些许可可由例如上述图3的许可模块304设置。然后取得数据存储器的未受限制部分的第一抽点(动作504)。该抽点可用各种方法的任一种取得,如上参照抽点模块302的讨论。在执行动态生成操作之后,取得数据存储器的未受限制部分的第二抽点(动作506)。该第二抽点以与在动作504中取得第一抽点的相同方式取得。
然后比较第一抽点和第二抽点(动作508),且过程500基于该两次抽点是否相同而继续(动作510)。如果两次抽点相同(即恒等值,不管该值是不期望由动态生成操作改变的数据存储器106的未受限制部分的各部分中的所有数据、还是散列值或版本值等),则动态生成操作未执行非期望工作得到证实(动作512)。该证实可被任选地返回给应用程序108。然而,如果两次抽点不相同,则动态生成操作执行了非期望工作(动作514)。可任选地,对什么工作已执行的指示(例如基于抽点中已改变的值)可被返回到图1的应用程序108,或者某些非期望工作已被执行的指示可被返回到应用程序108。
再看图3,锁定设置模块306锁定数据存储器106的未受限制部分使得那些被锁定部分不能被操作发生器104访问。或者,锁定设置模块306可锁定数据存储器106的其它部分而非仅仅未受限制部分的各部分。此外,应注意,数据存储器106的未受限制部分可以是数据存储器106的全部(例如在没有许可模块304的实施例中,整个数据存储器106可被视为未受限制部分)。锁定设置模块306通常被用于来自应用程序108的涉及从数据存储器106读取数据值的请求。
如上所述,数据存储器106所支持的许可粒度不会使数据存储器106的所有所要求部分受到限制(例如许可可使对整个表格的访问受到拒绝,但不允许逐行基础上的对许可的准予或拒绝)。锁定设置模块306以比数据存储器106支持的许可所允许的粒度更细的粒度来允许对数据存储器106部分的锁定。锁定设置模块306标识数据存储器106的未受限制部分中不应被动态生成操作访问的那些部分。应用程序108向数据集成管理器102通知正在从数据存储器106请求什么数据,允许锁定设置模块306确定数据存储器106的未受限制部分中的那些部分不应被动态生成操作访问并锁定之。
数据存储器106的未受限制部分中不应被动态生成操作访问的那些部分可部分地取决于数据存储器106的本质而用不同方法标识。在数据存储器106是微软SQL服务器的某些实施例中,数据存储器106的未受限制部分中不应被动态生成操作访问的那些部分可通过锁定设置模块306在数据存储器106的未受限制部分中选择不满足来自应用程序108的请求的表格的每一行(例如通过诸如主键的标识符)来标识。这些行(及其标识符)可通过例如锁定设置模块306向数据存储器106发送操作以标识不满足来自应用程序108的请求的行来确定。对于这些行的每一个,锁定设置模块306开始对该行的更新处理,但不完成该更新处理。处理指确保全部执行或全部不执行的操作的集合。处理通常由提交集合中所有操作的结果,或重新运行该处理使得集合中没有一个操作的结果被完成。更新处理是更新或更改数据存储器106的一特定部分(例如特定行)的处理。在对每一行开始一更新处理之后,锁定设置模块306通知应用程序108其锁定过程结束且请求可被发送到操作发生器104使发生器104可动态生成各操作。
对这些行的每一个开始一单独更新处理,以便于避免升级存储器106中被称为“锁定升级”的一种情形。锁定升级在数据存储器106接收访问表格中足够多行的处理而使数据存储器106断定它将锁定整个表格而不尝试锁定处理请求的各个行时发生。然而,如果要锁定整个表格,则应由动态生成操作访问的表格部分将对动态生成操作不可访问。因此,为避免锁定升级并使应由动态生成操作访问的表格部分将对动态生成操作可访问,开始对每一行的单独更新处理。数据存储器106分别进行这些单独更新处理,且不会发生锁定升级。应注意,在不展现锁定升级的各实施例中,不需使用这种单独的更新处理,并可使用标识不应由动态生成操作访问的所有行的单独更新处理。
通过对每个不满足来自应用程序108的请求的行开始(但不完成)一更新处理,数据存储器106相信锁定设置模块306处于对那些行作改变的过程中。因而,当执行动态生成操作时,如果有任一操作尝试访问(或读取)数据存储器106的锁定部分,数据存储器106将不执行该操作,因为数据存储器106的该部分由于未完成的更新处理已被锁定。数据存储器106知道另一组件(锁定设置模块306)处于更新数据存储器106的该部分的过程中,因此数据存储器106将不执行该操作,因为它无法确定该操作的适当值直到已完成该更新处理。数据存储器106在一定时间之后通常会超时,并向操作发生器104返回该操作超时并不能执行的指示。然后操作发生器104向应用程序108返回指示请求未能实现的一响应,而应用程序108可推断动态生成操作有问题。
应用程序108在已执行动态生成操作时通知数据集成管理器102,此时锁定设置模块306可释放它在行上设立的锁。锁的释放可例如通过锁定设置模块306通知数据存储器106释放各锁并回滚更新处理来执行。通过回滚各处理,没有数据更新真正响应于这些更新处理而由数据存储器106执行。各锁的释放和更新处理的回滚作为更新处理的完成(即使这些更新处理中没有一个被提交给数据存储器106)。
在某些情形中,多个不同的锁定设置可由锁定设置模块306并发建立。这些不同的锁定设置可被单独建立和释放,而建立这些锁的更新处理通常会在与数据存储器106的不同连接上执行(例如类似于图1未受限制连接110的不同未受限制连接)。
图6是示出用于校验不应由动态生成操作访问的数据存储器的各部分未被动态生成操作访问的示例过程600的流程图。过程600是可被执行为实现图2的设置动作202和/或校验动作210的过程的示例。过程600可用软件、固件、硬件、或其组合来执行。
开始时,使用许可来拒绝对不应被访问的数据存储器部分的访问(动作602)。这些许可可由例如上述图3的许可模块304设置。然后锁定数据存储器的未受限制部分中不应被读取的部分(动作604)。该锁定可例如参照上述图3的锁定设置模块306而执行。
在执行动态生成操作之后(或可选地与执行动态生成操作同步),过程600基于数据存储器的任一锁定部分是否可由动态生成操作访问继续(动作606)。如果数据存储器的任一锁定部分可由动态生成操作访问,则动态生成操作尝试访问不应已被访问的数据存储器部分(动作608)。可任选地,对动态生成操作尝试访问不应已被访问的数据存储器部分的指示可被返回给图1的应用程序108。然而,如果数据存储器的锁定部分未由动态生成操作访问,则动态生成操作不尝试访问不应已被访问的数据存储器部分(动作610)。该校验可被任选地返回给应用程序108。
图7示出了可用来实现在此所述各技术的通用计算机环境700。该计算机环境700仅是适当计算环境的一个示例,并非旨在提出对本发明使用或功能性范围作任何限制。计算环境700也不应被解释为对示例性操作环境700中所示的任一组件或其组合有任何依赖性或任何需求。
计算机环境700包括以计算机720形式的通用计算装置。计算机702可以是例如在其上可实现图1的应用程序108、操作发生器104、数据集成管理器102、和/或数据存储器106的装置。计算机720的组件可包括,但不限于,一个或多个处理器或处理单元704、系统存储器706以及把包括处理器704在内的各种系统组件耦合到系统存储器706的系统总线708。
系统总线708代表任一若干总线结构类型中的一种或多种,包括存储器总线或存储器控制器、外围总线、加速图形端口、以及使用各种总线架构的任一种的处理器或本地总线。作为示例,这些架构可包括工业标准架构(ISA)总线、微信道架构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)局部总线和也称为Mezzanine总线的外围部件互连(PCI)总线。
计算机702通常包括各种计算机可读介质。计算机可读介质可以是能被计算机702访问的任何可用介质,并包括易失性和非易失性介质、可移动和不可移动介质。
系统存储器706包括诸如只读存储器(ROM)712和随机存取存储器(RAM)710的易失性和/或非易失性存储器形式的计算机可读介质。包含有助于如起动时在计算机702内元件间传送信息的基本例程的基本输入/输出系统(BIOS)714通常存储在ROM712中。RAM710通常包含可被处理单元704立即访问和/或当时正被操作的数据和/或程序模块。
计算机702还可包括其它可移动/不可移动、易失/非易失计算机存储介质。作为示例,图7示出了读取和写入不可移动、非易失性介质(未示出)的硬盘驱动器716,读取和写入可移动、非易失磁盘720(例如“磁盘”)的磁盘驱动器732,读取和写入可移动、非易失光盘724,诸如CD-ROM、DVD-ROM、或其它光学介质的光盘驱动器722。硬盘驱动器716、磁盘驱动器732和光盘驱动器722分别通过一个或多个数据介质接口726与系统总线708连接。或者,硬盘驱动器716、磁盘驱动器732和光盘驱动器722分别通过一个或多个接口与系统总线708连接。
盘驱动器及其相关联的计算机可读介质为计算机702提供计算机可读指令、数据结构、程序模块、和其它数据的非易失性存储。尽管示例示出硬盘716、可移动磁盘720和可移动光盘724,可以理解可利用其它类型的可存储数据可由计算机访问的计算机可读介质来实现示例性计算系统和环境,诸如磁卡或或其它磁性存储装置、闪存卡、CD-ROM、数字多功能盘(DVD)或其它光学存储、随机存取存储器(RAM)、只读存储器(ROM)、电可擦除只读存储器(EEPROM)等。
包括作为示例的操作系统726、一个或多个应用程序728、其它程序模块730和程序数据732的任何数量的程序模块可被存储在硬盘716、磁盘720、光盘724、ROM712、和/或RAM710中。这种操作系统726、一个或多个应用程序728、其它程序模块730和程序数据732的每一个(或其某些组合)可实现支持分布式文件系统的驻留组件的全部或部分。
用户可通过输入装置如键盘734和定位装置736(例如“鼠标”)向计算机702输入命令和信息。其它输入装置738(未具体示出)可包括话筒、游戏杆、游戏垫、卫星接收器、扫描仪等等。这些和其它输入装置常常通过与系统总线708耦合的输入/输出接口740与处理单元704相连,但也可通过诸如并行端口、游戏端口或通用串行总线(USB)的其它接口和总线结构连接。
监视器742或其它类型的显示装置也可通过诸如视频接口744的接口与系统总线708相连。除了监视器742,其它输出外围装置还可包括通过输入/输出接口740与计算机702相连的诸如扬声器(未示出)和打印机746的组件。
计算机702可以在使用与一台或多台远程计算机,诸如远程计算装置748的逻辑连接的网络化环境中运行。作为示例,远程计算装置748可以是个人计算机、服务器、路由器、网络计算机、对等装置或其它公共网络节点等。远程计算装置748被示为包括在此所述与计算机702相关的许多或全部元件的便携式计算机。
计算机702和远程计算机748之间的逻辑连接被示为局域网(LAN)750和广域网(WAN)752。这样的网络化环境在家庭、办公室、企业范围计算机网络、企业内部互联网和因特网上是常见的。
当用于LAN网络化环境中时,计算机702通过网络接口或适配器754与局域网750连接。当在WAN网络化环境中实现时,计算机702通常包括调制解调器756或其它用于在广域网752上建立通信的装置。可以在计算机702内部或外部的调制解调器756与系统总线708通过输入/输出接口740或其它适当机制连接。应当理解,所示网络连接是示例性的,且也可以使用其它在计算机702和748之间建立通信链接的技术。
在诸如计算环境700所示的网络化环境中,所示与计算机702相关的程序模块或其一部分可被存储在远程存储器存储装置中。作为示例,远程应用程序758驻留于远程计算机748的存储装置上。为进行说明,应用程序和诸如操作系统的其它可执行程序组件在此被示为分散框,尽管可以理解这种程序和组件在不同时间驻留在计算装置702的不同存储组件上,并由该计算机的数据处理器执行。
各种模块和技术可在由一个或多个计算机或其它装置执行的诸如程序模块的计算机可执行指令的一般环境中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。通常,程序模块的功能可在各个实施例中按需组合或分布。
这些模块和技术的实现可被存储于某些形式的计算机可读介质上或在其上传输。计算机可读介质可以是计算机可访问的任何可用介质。作为示例,且非限制,计算机可读介质可包括“计算机存储介质”和“通信介质”。
“计算机存储介质”包括以任何方法或技术实现的用于存储诸如计算机可读指令、数据结构、程序模块、或其它数据的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光学存储、磁卡、磁带、磁盘存储或其它磁性存储装置、或任何其它可用来存储所需信息并可由计算机访问的介质。
“通信介质”通常包括计算机可读指令、程序模块、或在诸如载波或其它传输介质的已调制数据信号中的其它数据。通信介质还包括任何信息传送介质。术语“已调制数据信号”指其特征的一个或多个以在信号中编码信息的方式设置或改变的信号。作为示例,而非限制,通信介质包括诸如有线网络或直接接线连接的有线介质,以及诸如声学、RF、红外线或其它无线介质的无线介质。以上的任意组合也被包括在计算机可读介质的范围内。
尽管上述描述使用了结构化特征和/或方法论动作的专用语言,可以理解在所附权利要求中定义的本发明并不限于所述特定特征或动作。相反,特定特征和动作被揭示为实现本发明的示例性形式。