(57)【要約】【課題】  データストアに対して動的に生成されるオペレーションを検証することを実現すること。【解決手段】  オペレーションの検証は、データストアにアクセスするためのセットアップアクションを実行することを含む。セットアップアクションは、動的に生成されるオペレーションが生成されることになる対象の要求に少なくとも部分的に基づく。セットアップアクションの実行は、データストアの制限された部分、および制限のない部分を確立するためにデータストアの一部分について設定されるパーミッションを使用して、予想外の任意の変更が制限のない部分に対して行われたか検査すること、または制限のない部分の一部分に対するアクセスをロックすることを含む。動的に生成されるオペレーションが実行された後に、予想外の操作が実行されなかったか検証する。予想外の操作が実行された場合には、オペレーションは、要求にとって正しくないものと決定される。【選択図】  図７
2006072986.tif 000002
【特許請求の範囲】
【請求項１】
デバイスの１つまたは複数のプロセッサに、
データストアに対してパーミッションを設定して、前記データストアに対して、要求について動的に生成される１つまたは複数のオペレーションがアクセスすべきでない、前記データストアの第１の部分を除外した前記データストアの制限のない部分だけに対するアクセスを可能にさせ、
前記１つまたは複数のオペレーションが実行された後に、予想外の任意の変更が前記制限のない部分に対して行われたかどうかを検査させる
複数の命令を記憶していることを特徴とする１つまたは複数のコンピュータ読取り可能媒体。
【請求項２】
前記予想外の変更は、前記要求を実行するために変更されるべきでない前記制限のない部分におけるデータの任意の追加、削除、または修正を含むことを特徴とする請求項１に記載の１つまたは複数のコンピュータ読取り可能媒体。
【請求項３】
前記複数の命令は、さらに前記１つまたは複数のプロセッサに、
前記１つまたは複数のオペレーションが実行される前に、前記制限のない部分のうちの一部分の第１のスナップショットをキャプチャーさせ、
前記１つまたは複数のオペレーションが実行された後に、前記制限のない部分のうちの前記一部分の第２のスナップショットをキャプチャーさせ、
予想外の任意の変更が前記制限のない部分に対して行われたかどうかを検査させることは、前記第１のスナップショットと前記第２のスナップショットを比較することであることを特徴とする請求項１に記載の１つまたは複数のコンピュータ読取り可能媒体。
【請求項４】
前記制限のない部分のうちの前記一部分は、前記要求を実行するために変更されるべきでない、前記制限のない部分のうちの一部分を含むことを特徴とする請求項３に記載の１つまたは複数のコンピュータ読取り可能媒体。
【請求項５】
前記複数の命令は、さらに前記１つまたは複数のプロセッサに、
前記第１のスナップショットと前記第２のスナップショットが同じでない場合に、予想外の変更が前記制限のない部分に対して行われたことを決定させることを特徴とする請求項３に記載の１つまたは複数のコンピュータ読取り可能媒体。
【請求項６】
前記複数の命令は、さらに前記１つまたは複数のプロセッサに、
前記第１のスナップショットと前記第２のスナップショットが同じである場合には、予想外の変更が前記制限のない部分に対して行われなかったと決定させることを特徴とする請求項３に記載の１つまたは複数のコンピュータ読取り可能媒体。
【請求項７】
前記制限のない部分のうちの前記一部分は、データベース中の１つまたは複数のテーブルの１つまたは複数の行からのデータであることを特徴とする請求項３に記載の１つまたは複数のコンピュータ読取り可能媒体。
【請求項８】
前記第１のスナップショットをキャプチャーすることは、前記１つまたは複数のオペレーションが実行される前に、前記１つまたは複数の行からのバージョン値の列をコピーすることであり、前記第２のスナップショットをキャプチャーすることは、前記１つまたは複数のオペレーションが実行された後に、前記１つまたは複数の行からのバージョン値の前記列をコピーすることであることを特徴とする請求項７に記載の１つまたは複数のコンピュータ読取り可能媒体。
【請求項９】
前記第１のスナップショットをキャプチャーすることは、前記１つまたは複数のオペレーションが実行される前に、前記１つまたは複数の行からのバージョン値の列および一次キー値の列をコピーすることであり、前記第２のスナップショットをキャプチャーすることは、前記１つまたは複数のオペレーションが実行された後に、前記１つまたは複数の行からのバージョン値の前記列および一次キー値の前記列をコピーすることであることを特徴とする請求項７に記載の１つまたは複数のコンピュータ読取り可能媒体。
【請求項１０】
予想外の任意の変更が前記制限のない部分に対して行われたかどうかを検査することは、
前記データストアの前記制限のない部分に対して行われた任意の変更についての通知が前記データストアによって送られることを要求し、
前記データストアから受け取った任意の通知を解析して、前記要求を実行するために行われているべきでない、前記制限のない部分におけるデータの任意の追加、削除、または修正が行われたかどうかを決定する
ことであることを特徴とする請求項１に記載の１つまたは複数のコンピュータ読取り可能媒体。
【請求項１１】
デバイスの１つまたは複数のプロセッサに、
データストアに対してパーミッションを設定して、前記データストアに対して、要求について動的に生成される１つまたは複数のオペレーションがアクセスすべきでない、前記データストアの第１の部分を除外した前記データストアの制限のない部分だけに対するアクセスを可能にさせ、
前記制限のない部分に含まれている、前記１つまたは複数のオペレーションがアクセスすべきでない前記データストアのうちの一部分に対するアクセスをロックさせる
複数の命令を記憶していることを特徴とする１つまたは複数のコンピュータ読取り可能媒体。
【請求項１２】
前記データストアは、複数のテーブルを有するデータベースを含み、前記データストアの前記制限のない部分は、前記複数のテーブルのうちの１つまたは複数のテーブルを含み、前記データストアのうちの前記一部分は、前記制限のない部分における前記複数のテーブルのうちの少なくとも１つのテーブルの１つまたは複数の行を含むことを特徴とする請求項１１に記載の１つまたは複数のコンピュータ読取り可能媒体。
【請求項１３】
前記データストアのうちの前記一部分に対するアクセスをロックすることは、前記１つまたは複数のオペレーションが前記データストアのうちの前記一部分にアクセスすることを防止することであることを特徴とする請求項１１に記載の１つまたは複数のコンピュータ読取り可能媒体。
【請求項１４】
前記データストアのうちの前記一部分に対するアクセスをロックすることは、前記データストアの前記一部分における前記データに対して１つまたは複数のアップデートトランザクションを開始し、前記１つまたは複数のオペレーションが実行された後まで、前記１つまたは複数のアップデートトランザクションを完了しないことを特徴とする請求項１１に記載の１つまたは複数のコンピュータ読取り可能媒体。
【請求項１５】
前記要求は、前記データストアからデータを検索する要求を含むことを特徴とする請求項１１に記載の１つまたは複数のコンピュータ読取り可能媒体。
【請求項１６】
データストアに対して動的に生成されるオペレーションが正しいかどうかを決定する方法であって、
前記データストアにアクセスするために、前記動的に生成されるオペレーションが生成されることになる対象の要求に少なくとも部分的に基づいているセットアップアクションを実行するステップであって、前記実行するステップは、前記データストアの一部分についてパーミッションを設定して、前記データストアの制限された部分および前記データストアの制限のない部分を確立するステップを含み、前記実行するステップはさらに、前記制限のない部分のうちの一部分に対するアクセスをロックするステップ、または予想外の任意の変更が、前記制限のない部分に対して行われたかどうかについての後続の検査を可能にするステップを含むステップと、
前記動的に生成されるオペレーションが実行された後に、予想外の操作が、前記動的に生成されるオペレーションによって実行されなかったことを検証するステップと、
予想外の操作が、前記動的に生成されるオペレーションによって実行されなかった場合に、前記動的に生成されるオペレーションは、前記要求について正しいと決定するステップと、
予想外の任意の操作が前記動的に生成されるオペレーションによって実行された場合には、前記動的に生成されるオペレーションは、前記要求について正しくないと決定するステップと
を含むことを特徴とする方法。
【請求項１７】
予想外の任意の変更が、前記制限のない部分に対して行われたかどうかについての後続の検査を可能にする前記ステップは、
前記動的に生成されるオペレーションが実行される前に、前記制限のない部分のうちの第１の部分の第１のスナップショットをキャプチャーするステップを含むことを特徴とする請求項１６に記載の方法。
【請求項１８】
前記動的に生成されるオペレーションが実行された後に、前記制限のない部分のうちの前記第１の部分の第２のスナップショットをキャプチャーするステップと、
前記第１のスナップショットと前記第２のスナップショットとを比較するステップと、
前記第１のスナップショットと前記第２のスナップショットが同じでない場合に、予想外の操作が、前記動的に生成されるオペレーションによって実行されたと決定するステップと、
前記第１のスナップショットと前記第２のスナップショットが同じである場合には、予想外の操作が、前記動的に生成されるオペレーションによって実行されなかったと決定するステップと
をさらに含むことを特徴とする請求項１７に記載の方法。
【請求項１９】
前記制限のない部分のうちの前記第１の部分は、前記要求を実行するために変更されるべきでない、前記制限のない部分のうちの一部分を含むことを特徴とする請求項１７に記載の方法。
【請求項２０】
前記制限のない部分のうちの前記第１の部分は、データベース中の１つまたは複数のテーブルの１つまたは複数の行からのデータであることを特徴とする請求項１７に記載の方法。
【請求項２１】
予想外の任意の変更が、前記制限のない部分に対して行われたかどうかについての後続の検査を可能にする前記ステップは、
前記データストアの前記制限のない部分に対して行われた任意の変更についての通知が前記データストアによって送られることを要求するステップと、
前記データストアから受け取った任意の通知を解析して、前記要求を実行するために行われているべきでない、前記制限のない部分におけるデータの任意の追加、削除、または修正が行われたかどうかを決定するステップと
を含むことを特徴とする請求項１６に記載の方法。
【請求項２２】
前記制限のない部分のうちの一部分に対するアクセスをロックする前記ステップは、
前記データストアのうちの前記一部分における前記データに対して１つまたは複数のアップデートトランザクションを開始するが、前記動的に生成されるオペレーションが実行された後まで、前記１つまたは複数のアップデートトランザクションを完了しないステップを含むことを特徴とする請求項１６に記載の方法。
【請求項２３】
前記要求が前記データストアを修正する要求である場合にのみ、予想外の任意の変更が前記制限のない部分に対して行われたかどうかについての後続の検査を可能にするステップをさらに含むことを特徴とする請求項１６に記載の方法。
【請求項２４】
前記要求が前記データストアからのデータを検索する要求である場合にのみ、前記制限のない部分のうちの一部分に対するアクセスをロックするステップをさらに含むことを特徴とする請求項１６に記載の方法。
【請求項２５】
データストアに対しての、要求について動的に生成される１つまたは複数のオペレーションが実行された後に、予想外の任意の変更が前記データストアの一部分に対して行われたかどうかを検査するスナップショットモジュールと、
前記１つまたは複数のオペレーションによってアクセスされるべきでない、前記データストアの前記一部分に含まれている前記データストアのうちの一部分に対するアクセスをロックするロックセットモジュールと
を含むことを特徴とするシステム。
【請求項２６】
前記データストアに対してパーミッションを設定して、前記１つまたは複数のオペレーションがアクセスすべきでない、前記データストアの別の部分を除外した、前記データストアの前記部分だけに対するアクセスを可能にするパーミッションモジュールを
さらに含むことを特徴とする請求項２５に記載のシステム。
【請求項２７】
前記要求が前記データストアを修正する要求である場合にのみ、前記スナップショットモジュールは、予想外の任意の変更が前記部分に対して行われたかどうかを検査することを特徴とする請求項２５に記載のシステム。
【請求項２８】
前記要求が前記データストアからのデータを検索する要求である場合にのみ、前記ロックセットモジュールは、前記データストアのうちの前記一部分に対するアクセスをロックすることを特徴とする請求項２５に記載のシステム。
【請求項２９】
予想外の任意の変更が前記一部分に対して行われたかどうかを検査する前記スナップショットモジュールは、
前記１つまたは複数のオペレーションが実行される前に、前記一部分のうちの第１の部分の第１のスナップショットをキャプチャーし、
前記１つまたは複数のオペレーションが実行された後に、前記一部分のうちの前記第１の部分の第２のスナップショットをキャプチャーし、
前記第１のスナップショットと前記第２のスナップショットとを比較し、
前記第１のスナップショットと前記第２のスナップショットが同じでない場合に、予想外の変更が、前記一部分に対して行われたと決定し、
前記第１のスナップショットと前記第２のスナップショットが同じである場合には、予想外の変更が、前記一部分に対して行われなかったと決定することを特徴とする請求項２５に記載のシステム。
【請求項３０】
予想外の任意の変更が前記一部分に対して行われたかどうかを検査する前記スナップショットモジュールは、
任意の変更が、前記データストアの前記一部分に対して行われるときに、通知が前記データストアによって送られることを要求し、
前記データストアから受け取った任意の通知を解析して、前記要求を実行するために行われているべきでない、前記一部分におけるデータの任意の追加、削除、または修正が行われたかどうかを決定することを特徴とする請求項２５に記載のシステム。
【請求項３１】
前記１つまたは複数のオペレーションによってアクセスされるべきでない、前記データストアのうちの一部分に対するアクセスをロックする前記ロックセットモジュールは、
前記データストアのうちの前記一部分における前記データに対して１つまたは複数のアップデートトランザクションを開始し、前記１つまたは複数のオペレーションが実行された後まで、前記１つまたは複数のアップデートトランザクションを完了しないことを特徴とする請求項２５に記載のシステム。
【請求項３２】
データストアにアクセスするために、動的に生成されるオペレーションが生成されることになる対象の要求に少なくとも部分的に基づいているセットアップアクションを実行する手段であって、前記実行する手段は、前記データストアの一部分についてパーミッションを設定して、前記データストアの制限された部分および前記データストアの制限のない部分を確立する手段を含み、前記実行する手段はさらに、前記制限のない部分のうちの一部分に対するアクセスをロックする手段、または予想外の任意の変更が、前記制限のない部分に対して行われたかどうかについての後続の検査を可能にする手段を含む手段と、
前記動的に生成されるオペレーションが実行された後に、予想外の操作が、前記動的に生成されるオペレーションによって実行されなかったことを検証する手段と、
予想外の操作が、前記動的に生成されるオペレーションによって実行されなかった場合に、前記動的に生成されるオペレーションは、前記要求について正しいと決定する手段と、
予想外の任意の操作が前記動的に生成されるオペレーションによって実行された場合には、前記動的に生成されるオペレーションは、前記要求について正しくないと決定する手段と
を備えることを特徴とするシステム。
【請求項３３】
予想外の任意の変更が、前記制限のない部分に対して行われたかどうかについての後続の検査を可能にする前記手段は、
前記動的に生成されるオペレーションが実行される前に、前記制限のない部分のうちの第１の部分の第１のスナップショットをキャプチャーする手段を備えることを特徴とする請求項３２に記載のシステム。
【請求項３４】
前記動的に生成されるオペレーションが実行された後に、前記制限のない部分のうちの前記第１の部分の第２のスナップショットをキャプチャーする手段と、
前記第１のスナップショットと前記第２のスナップショットとを比較する手段と、
前記第１のスナップショットと前記第２のスナップショットが同じでない場合に、予想外の操作が、前記動的に生成されるオペレーションによって実行されたと決定する手段と、
前記第１のスナップショットと前記第２のスナップショットが同じである場合には、予想外の操作が、前記動的に生成されるオペレーションによって実行されなかったと決定する手段と
をさらに備えることを特徴とする請求項３３に記載のシステム。
【請求項３５】
予想外の任意の変更が、前記制限のない部分に対して行われたかどうかについての後続の検査を可能にする前記手段は、
前記データストアの前記制限のない部分に対して行われた任意の変更についての通知が前記データストアによって送られることを要求する手段と、
前記データストアから受け取った任意の通知を解析して、前記要求を実行するために行われているべきでない、前記制限のない部分におけるデータの任意の追加、削除、または修正が行われたかどうかを決定する手段と
を備えることを特徴とする請求項３２に記載のシステム。
【請求項３６】
前記制限のない部分のうちの一部分に対するアクセスをロックする前記手段は、
前記データストアのうちの前記一部分における前記データに対して１つまたは複数のアップデートトランザクションを開始するが、前記動的に生成されるオペレーションが実行された後まで、前記１つまたは複数のアップデートトランザクションを完了しない手段を備えることを特徴とする請求項３２に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テストおよび検証に関し、詳細にはデータストア（ｄａｔａ  ｓｔｏｒｅ）に対して動的に生成されるオペレーションを検証することに関する。
【背景技術】
【０００２】
コンピュータ技術が進歩するにつれて、ストレージデバイスの容量が増大してきている。かかる１つまたは複数のストレージデバイスは、データストアとして見なすことができ、データストアに含めることができる大量のデータを保持し、それにアクセスするための異なる技法が開発されてきている。このデータにアクセスするために使用される技法については、かなり詳細に説明することができ、長い間に変化し得るので、このデータへのアクセスの詳細を抽象する製品が開発されている。この場合には、かかる抽象化製品（ａｂｓｔｒａｃｔｉｏｎ  ｐｒｏｄｕｃｔ）については、アプリケーション開発者がそれを活用してこの記憶されたデータにアクセスすることができる。したがって、このアプリケーション開発者は、この抽象化製品の使いやすいインターフェースを用いて対話することができ、この抽象化製品を利用してこのストレージデバイスへのアクセスの詳細を理解することができる。
【０００３】
一般的に、これらの抽象化製品は、アプリケーションから受け取ったあるフォーマットの要求または命令をこのデータストアが理解する別のフォーマットへと変換する。例えば、（あるプログラミング言語で記述された）アプリケーションからの特定のデータ値を変更する要求を、データストアの一部分の位置を突き止め、次いでデータストアのその部分に新しいデータを書き込む一連のオペレーション（例えば、一連のＳＱＬステートメント）へと、抽象化製品によって変換することができる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
かかる抽象化製品が有する可能性のある１つの問題は、変換が正しく行われるように注意する必要があることである。この変換が間違って行われる場合には、このアプリケーションの要求の結果は、正確でない可能性があり、この抽象化製品は、正確なオペレーションのために利用することができない。この問題を解決することができる一方法は、この抽象化製品が生成するオペレーションまたは命令を解析し、この抽象化製品が受け取るこの要求を仮定して、これらのオペレーションまたは命令が正確であるかどうかを決定することにより、この抽象化製品をテストすることである。しかし、実際には、かかる解析および決定は、特に抽象化製品が生成するこれらのオペレーションまたは命令のフォーマット、ならびに特定のオペレーションまたは命令それ自体が、絶えず変化している可能性があることを考慮に入れると、非常に難しい可能性がある。したがって、抽象化製品が受け取った要求およびコマンドを正しく変換していることを検証するためのさらに良好な方法があれば有利なはずである。
【課題を解決するための手段】
【０００５】
本明細書中では、データストアに対して動的に生成されるオペレーションを検証することについて説明する。
【０００６】
ある態様によれば、データストアに対してパーミッションを設定して、このデータストアの制限のない部分に対してのみアクセスを可能にする。このデータストアの制限のない部分により、データストアに対するある要求について動的に生成される１つまたは複数のオペレーションがアクセスすべきでないデータストアの第１の部分が除外される。このデータストアに対して１つまたは複数のオペレーションが実行された後に、何らかの予想外の変更がこの制限のない部分に対して行われたかどうかについての検査が行われる。
【０００７】
他の態様によれば、データストアに対してパーミッションを設定して、このデータストアの制限のない部分に対してのみアクセスを可能にする。このデータストアの制限のない部分により、データストアに対するある要求について動的に生成される１つまたは複数のオペレーションがアクセスすべきでないデータストアの第１の部分が除外される。加えて、該１つまたは複数のオペレーションがアクセスすべきでない、この制限のない部分に含まれているデータストアの一部分に対するアクセスがロックされる。
【発明を実施するための最良の形態】
【０００８】
以下、図面を参照して本発明の実施形態を説明する。同様なコンポーネントおよび／または特徴を参照するために、この文書全体を通して同じ番号を使用する。
【０００９】
本明細書中では、データストアに対して動的に生成されるオペレーションを検証することについて説明している。データストアに対するアクセスに関与する要求が行われるときに、このリクエスタ（ｒｅｑｕｅｓｔｏｒ）について１つまたは複数のオペレーションが動的に生成され、これらの１つまたは複数のオペレーションは、これらのオペレーションを実行するデータストアに対して送られる。この要求を考慮してこのデータストアに対して行われると予想された操作が行われているかどうかについて、更にこの要求を考慮してこのデータストアに対して行われると予想されなかった操作が行われていないことについての検査が行われる。これらの検査が、この予想された操作が行われたことを、また予想外の操作が行われなかったことを示す場合には、これらの動的に生成されるオペレーションは、この要求について正確であるものとして検証される。様々な異なる技法を使用して、予想外の操作がこのデータストアに対して行われなかったことを検証することができる。
【００１０】
図１は、データストアに対して動的に生成されるオペレーションの検証を実施することができる一実施例の環境１００を示すブロック図である。環境１００は、データ完全性マネージャ（ｄａｔａ  ｉｎｔｅｇｒｉｔｙ  ｍａｎａｇｅｒ）１０２、オペレーションジェネレータ（ｏｐｅｒａｔｉｏｎ  ｇｅｎｅｒａｔｏｒ）１０４、データストア１０６、およびアプリケーション１０８を含んでいる。
【００１１】
データストア１０６は、データを記憶する任意のシステムとすることができる。例えば、データストア１０６は、マイクロソフト（登録商標）ＳＱＬサーバデータベースなどのデータベース（例えば、リレーショナルデータベースまたは非リレーショナルデータベース）とすることができる。あるいは、データストア１０６は、ＸＭＬ（ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ拡張マークアップ言語）ドキュメントやファイルシステムなどを記憶し、アプリケーションがそのデータ内容を問い合わせ、挿入し、アップデートし、または削除することができる他の任意タイプの構造化メモリおよび永続性メモリ（ｐｅｒｓｉｓｔｅｄ  ｍｅｍｏｒｙ）とすることができる。
【００１２】
オペレーションジェネレータ１０４は、アプリケーション１０８とデータストア１０６の間の仲介手段として動作する抽象化コンポーネント（ａｂｓｔｒａｃｔｉｏｎ  ｃｏｍｐｏｎｅｎｔ）である。データストア１０６にアクセスする要求は、アプリケーション１０８によってオペレーションジェネレータ１０４に対して行われ、このオペレーションジェネレータ１０４は、次にデータストア１０６に対して実行すべき１つまたは複数のオペレーションを動的に生成する。これらのオペレーションは、アプリケーション１０８から受け取られる個々の要求に基づいてオペレーションジェネレータ１０４によって生成されるので、これらのオペレーションは、動的に生成されるものと見なされる。アプリケーション１０８によって行われる要求は、例えば、データストア１０６からデータを検索する要求、データストア１０６中のデータを修正する要求、データストア１０６にデータを追加する要求、およびデータストア１０６からデータを削除する要求を含むことができる。オペレーションジェネレータ１０４によって動的に生成されるこれらのオペレーションは、従来の様々な方法のうちの任意の方法で生成することができ、アプリケーション１０８から受け取る特定の要求と、データストア１０６が提供するストレージの性質またはタイプに少なくとも部分的に依存することになる。オペレーションジェネレータ１０４が動的に生成するこれらのオペレーションは、クエリ、データ操作ステートメント、要求、コマンド、命令などとすることができる。例えば、オペレーションジェネレータ１０４が動的に生成するこれらのオペレーションは、データストア１０６からデータを読み取るオペレーションと、データストア１０６にデータを書き込むオペレーションと、データストア１０６中においてデータについての新しいエントリを作成する（例えば、データベースのテーブル中で新しい行を作成する）オペレーションと、データストア１０６中においてデータについてのエントリを削除する（例えば、データベースのテーブルから行を削除する）オペレーションとを含むことができる。
【００１３】
アプリケーション１０８は、データストア１０６にアクセスする様々な異なるアプリケーション（例えば、コンピュータプログラム）のうちの任意のものとすることもできる。さらに、１つのアプリケーション１０８しか図１に示していないが、複数のアプリケーションがオペレーションジェネレータ１０４を介してデータストア１０６にアクセスすることもできることに留意されたい。ある実施形態においては、アプリケーション１０８は、オペレーションジェネレータ１０４をテストするように設計されたテストアプリケーションであり、オペレーションジェネレータ１０４に様々な要求をサブミットし、その結果、オペレーションを動的に生成する際におけるジェネレータ１０４の振舞いを検証することができる。他の実施形態においては、アプリケーション１０８は、非テストアプリケーションとすることができるが、データ完全性マネージャ１０２を使用してオペレーションジェネレータ１０４が適切に機能していることを検証することができる。
【００１４】
ある実施形態においては、オペレーションジェネレータ１０４やデータ完全性マネージャ１０２などの各コンポーネントまたは各モジュールは、コネクションを介してデータストア１０６にアクセスする。このコンポーネントまたはモジュールは、このコネクション上でデータストア１０６にログインする。オペレーションジェネレータ１０４は、データストア１０６に特定のユーザ（これは、人間のユーザ、または単に何らかの識別子を意味することもある）としてログインし、並行して複数回、データストア１０６にログインすることができる。このコネクションはそれに関連づけられた１組の権限またはパーミッションを有する。１組の権限またはパーミッションは、そのコネクションを使用するコンポーネントがデータストア１０６において何を行うことが許可されるかを識別する。例えば、あるコンポーネントは、データストア１０６のある種の部分だけにアクセスすることしか許可されないこともあり、あるいはデータストア１０６から読み取ることは許可されるが書き込むことは許可されないこともある。このコンポーネントまたはモジュールは、このコネクション上でデータストア１０６と情報をやりとりするが、このコネクションの制限を満たすオペレーションしかデータストア１０６によって実行されないことになる。
【００１５】
データ完全性マネージャ１０２は、データストア１０６に対する制限のないコネクション１１０を使用する。データ完全性マネージャ１０２は、データストア１０６に対してどのようなオペレーションを実施することも禁止されていない。他方、オペレーションジェネレータ１０４は、データストア１０６に対する制限されたコネクション１１２を使用する。アプリケーション１０８がサブミットしている特定の要求に基づく、オペレーションジェネレータ１０４による、データストア１０６に対するある種のオペレーションの実行が禁止される。データ完全性マネージャ１０２は、以下でさらに詳細に説明するように制限されたコネクション１１２上のこれらの制限を設定する。
【００１６】
図２は、データストアに対して動的に生成されるオペレーションを検証するための一実施例のプロセス２００を示すフローチャートである。プロセス２００は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組合せの形で実施することができる。図２は、図１の環境１００のコンポーネントを参照して説明される。プロセス２００は、アプリケーション１０８によってオペレーションジェネレータ１０４に対してサブミットされる複数の要求（例えば、すべての要求）のそれぞれについて反復される。
【００１７】
最初に、データストア１０６にアクセスするためのセットアップアクション（ｓｅｔｕｐ  ａｃｔｉｏｎ）が実行される（動作２０２）。制限されたコネクション１１２がまだ存在しない場合には、この制限されたコネクションが動作２０２において生成される。以下でより詳細に説明するように、これらのセットアップアクションは、例えば個々のパーミッションを認可または拒否し、制限されたコネクション１１２上でかかるパーミッションを設定すること、（例えば、データストア１０６の一部分のスナップショットを取得することにより）このデータストアに対する予想外の変更について後続の検査を可能にすること、データストア１０６の一部分をロックすることなどを含むことができる。実行すべき個々のセットアップアクションが、アプリケーション１０８によってデータ完全性マネージャ１０２に対して識別される。アプリケーション１０８は、オペレーションジェネレータ１０４にサブミットされようとしている特定の要求について知っており、したがってデータストア１０６にアクセスしてこの要求を実行する際に、ジェネレータ１０４が実行すべき個々のセットアップアクションを識別することが可能である。例えば、アプリケーション１０８が、データ完全性マネージャ１０２の振舞いを検証するテストプログラムである場合、アプリケーション１０８は、一般的にどのセットアップアクションがジェネレータ１０４によって実行されるべきであるかについての知識を有するように設計されることになる。別の実施例では、アプリケーション１０８がテストプログラムでない場合にも、アプリケーション１０８は、依然としてどのセットアップアクションがジェネレータ１０４によって実行されるべきであるかについての何らかの知識を有することができる（例えば、アプリケーション１０８が、ユーザがこのユーザのショッピングカートにアイテムを追加することができる一部分と、このユーザがこのショッピングカート中のアイテムについての支払いができる別の部分を含んでいる場合に、アプリケーション１０８は、データストア１０６中のクレジットカード番号など、請求書作成情報のいずれにも、このショッピングカートにアイテムを追加し、それからアイテムを削除することに関与する要求によってはアクセスされるべきではないことを知ることが可能である）。
【００１８】
オプションとして、これら所望のセットアップアクションが実行された後に、データ完全性マネージャ１０２は、このセットアップアクションが実行されていることを示す指示をアプリケーション１０８に対して返すことができ、それによってアプリケーションに、アプリケーションがその要求をオペレーションジェネレータ１０４に対してサブミットすることができることを通知することができる。
【００１９】
このセットアップアクションが実行された後に、このオペレーションジェネレータ１０４は、アプリケーション１０８から受け取った要求に基づいて１つ（または複数）の適切なオペレーションを動的に生成し（動作２０４）、データストア１０６に対して１つ（または複数）のこの動的に生成されたオペレーションを実行（動作２０６）。
【００２０】
次いで、アプリケーション１０８は、この予想された操作が行われたことを検証する（動作２０８）。動作２０８におけるこの検証は、従来の様々な方法のうちのどれにおいても実施することができる。アプリケーション１０８は、この要求がどのようなものあったかを、したがって（もし何かある場合には）何がデータストア１０６中で変更されているべきであるかを知っており、それ故、アプリケーション１０８は、追加の１つ（または複数）の要求をサブミットして、この所望の変更が行われていることを検証することができる。例えば、この要求がデータストア１０６にデータを追加することであった場合には、アプリケーション１０８は、追加されているはずのデータを検索しようと試みることができ、アプリケーション１０８がこのデータを検索する場合には、アプリケーション１０８は、この予想された操作がおこなわれたことを知る。
【００２１】
データ完全性マネージャ１０２はまた、予想外の操作が行われなかったことも検証する（動作２１０）。以下でより詳細に説明するように、この検証は、どのような変更がデータストア１０６に対して行われたか、ある試みがロックされたデータにアクセスするために行われたかどうか、ある試みが、パーミッションが拒否されたデータにアクセスするために行われたかどうかなどについての解析に基づいたものとすることが可能である。この検証の結果は、オプションとしてアプリケーション１０８に対して返すことができる。あるいは、データ完全性マネージャ１０２によって収集された情報（例えば、以下でさらに詳細に説明しているスナップショット）は、アプリケーション１０８に対して返して、アプリケーション１０８が予想外の操作が行われなかったことを検証することができる。
【００２２】
この動的に生成される１つ（または複数）のオペレーションが正しいものとして検証されるかどうかは、動作２０８および２１０における検証に依存している（動作２１２）。この予想された操作が行われたことが検証される場合、また予想外の操作が行われなかったことが検証される場合には、この動的に生成される１つ（または複数）のオペレーションは、正しいものとして検証される（動作２１４）。しかし、この予想された操作が行われたことが検証されない場合、および／または予想外の操作が行われなかったことが検証されない場合には、この動的に生成される１つ（または複数）のオペレーションは、正しいものとして検証されない（動作２１６）。
【００２３】
図３は、一実施例のデータ完全性マネージャ１０２をさらに詳細に示している。データ完全性マネージャ１０２は、スナップショットモジュール（ｓｎａｐｓｈｏｔ  ｍｏｄｕｌｅ）３０２、パーミッションモジュール（ｐｅｒｍｉｓｓｉｏｎｓ  ｍｏｄｕｌｅ）３０４、およびロックセットモジュール（ｌｏｃｋｓｅｔ  ｍｏｄｕｌｅ）３０６を含んでいる。パーミッションモジュール３０４は、データストア１０６のある部分しかアクセスすることができないようにパーミッションを設定する。これらのパーミッションに基づいて、アクセスすることができるデータストア１０６のこれらの部分を、データストア１０６の制限のない部分と呼び、アクセスすることができないデータストアのこれらの部分を、データストア１０６の制限された部分と呼ぶ。スナップショットモジュール３０２は、予想外の任意の変更がデータストア１０６の制限のない部分に対して行われるかどうかを検査する。ロックセットモジュール３０６は、これらのロックされた部分をオペレーションジェネレータ１０４がアクセスすることができないようにデータストア１０６の制限のない部分のうちの一部分をロックする。モジュール３０２、３０４および３０６の振舞いについては、以下でより詳細に説明する。
【００２４】
ある実施形態は、スナップショットモジュール３０２、パーミッションモジュール３０４、およびロックセットモジュール３０６のそれぞれを含まないこともあることに留意されたい。これらのモジュールのうちのいずれを特定のデータ完全性マネージャ１０２中に含ませるかは、マネージャ１０２の設計者の要望、ならびにデータストア１０６がサポートする機能に基づいて変化する可能性がある。例えば、データストア１０６が、データストア１０６の一部分をロックし、または別の方法で一時的にアクセス不能にすることを可能にするメカニズムをサポートしない場合には、ロックセットモジュール３０６は、データ完全性マネージャ１０２中に含めなくてもよい。別の実施例では、マネージャ１０２の設計者が、データストア１０６によってサポートされるどのようなパーミッションを使用することも望まない場合（またはデータストア１０６がパーミッションをサポートしない場合）には、パーミッションモジュール３０４は、データ完全性マネージャ１０２中に含める必要がない。
【００２５】
パーミッションモジュール３０４は、データストア１０６にアクセスするためのパーミッションを設定する。データストア１０６は、パーミッションがデータストア１０６の異なる部分に対して認可および／または拒否されるようにすることができ、これらのパーミッションは、特定のコネクションに関連している。したがって、データ完全性マネージャ１０２は、制限されたコネクション１１２についてのパーミッションを設定して、制限されたコネクション１１２上でデータストア１０６のどの部分に対してオペレーションジェネレータ１０４がアクセスすることができるかを制限することができる。オペレーションジェネレータ１０４は、この制限のない部分にアクセスすることができるが、この制限された部分にはアクセスすることができない。データストア１０６に対する異なるコネクションについて異なるパーミッションを設定することができる（例えば、複数の制限されたコネクション１１２をオペレーションジェネレータ１０４が使用して、データストア１０６と情報をやりとりすることができ、これらの複数の制限されたコネクションのそれぞれは、異なるパーミッション設定を有することができる）。
【００２６】
パーミッションを使用してデータストア１０６の制限された部分および制限のない部分を定義することができる細分性（ｇｒａｎｕｌａｒｉｔｙ）は、特定のデータストアに基づいて変化する可能性がある。これらのパーミッションは、例えばテーブルレベル、列レベル、行レベル、ページレベル、ラインレベルなどに対して設定することができる。データストア１０６がマイクロソフト（登録商標）ＳＱＬサーバデータベースである実施形態においては、データストア１０６により、パーミッションを列レベルまたはテーブルレベルで設定することが可能になる。マイクロソフト（登録商標）ＳＱＬサーバデータベースは、一般的に複数のテーブルからなり、各テーブルは、複数の行および複数の列を有することが可能である。これらのパーミッションが、テーブルレベルで設定される場合には、データストア１０６により、特定のテーブルにアクセスするパーミッションを認可または拒否することが可能になる。これらのパーミッションが列レベルで設定される場合には、データストア１０６により、特定のテーブルの特定の列にアクセスするパーミッションを認可または拒否することが可能になる。マイクロソフト（登録商標）ＳＱＬサーバデータベースにおいては、テーブル中で行を作成するオペレーションと、テーブルから行を削除するオペレーションは、このテーブルレベルで設定され、デーブル中でデータをアップデートするオペレーションと、テーブルからデータを読み取るオペレーションは、列レベルで設定される。
【００２７】
オペレーションジェネレータ１０４によって動的に生成されるオペレーションが、データストア１０６の制限された部分にアクセスしようと試みる場合、データストア１０６は、この制限された部分にアクセスするある試みが行われたことを示す指示をオペレーションジェネレータ１０４（または、代わりにデータ完全性マネージャ１０２）に返すことができる。代わりに、データストア１０６は、このオペレーションを単に実施しないこともあり、（タイムアウト期間と呼ばれる）特定の時間の後に、オペレーションジェネレータ１０４は、ある問題がこのオペレーションに伴って発生したことを想定することにもなる。データストア１０６から受け取ったこの指示、または経過するタイムアウト期間に基づいて、この制限された部分にアクセスする試みが行われたことを示す指示を、アプリケーション１０８に対して報告して返すことができ、それによってオペレーションジェネレータ１０４によって動的に生成される１つまたは複数のオペレーションに伴う問題が存在することをアプリケーション１０８に通知することができる。
【００２８】
パーミッションモジュール３０４の振舞いについては、以下の実施例から理解することができる。データストア１０６が、３つのテーブル、すなわち顧客に関する情報を記憶する顧客テーブルと、発行されている注文に関する情報を記憶する注文テーブルと、支払い情報（例えば、クレジットカード番号）を記憶する支払いテーブルを含んでいるものと想定する。さらに、アプリケーション１０８が、オペレーションジェネレータ１０４に対して要求を送って、この顧客テーブルに顧客（例えば、名前、住所、電話番号など）を追加しようとしていることを、またアプリケーション１０８が、この顧客テーブルにこの顧客を追加するこの要求がこの注文テーブルまたはこの支払いテーブルへのアクセスを必要としないはずであることについて（例えば、図２の動作２０２を確立する一部分として）データ完全性マネージャ１０２に通知することを想定する。したがって、データ完全性マネージャ１０２は、この注文テーブルおよびこの支払いテーブルに対するアクセスが拒否されるが、この顧客テーブルに対するアクセスは認可されるように制限されたコネクション１１２上でパーミッションを設定することができる。したがって、オペレーションジェネレータ１０４が、１つ（または複数）のオペレーションを動的に生成してアプリケーション１０８によるこの名前を変更する要求中で示されるような顧客を追加するときに、ジェネレータ１０４によって生成されるオペレーションのうちのどれかが、この注文テーブルまたはこの支払いテーブルにアクセスしようと試みる場合に、データストア１０６は、このアクセスの実行を許可しないことになる。データストア１０６は、パーミッションを拒否されたテーブルにアクセスする試みが行われたことを示す指示をオペレーションジェネレータ１０４（または、代わりにデータ完全性マネージャ１０２）に対して返すことができ、あるいは、データストア１０６は、単にこのオペレーションを実施しないこともあり、あるタイムアウト期間が経過した後に、オペレーションジェネレータ１０４は、ある問題がこのオペレーションに伴って発生したことを想定することになる。
【００２９】
しかし、パーミッションを認可することおよび拒否することにより、必ずしも不適切なオペレーションを検出できるとは限らない。例えば、先に述べた実施例を続けて用いると、オペレーションジェネレータ１０４によって動的に生成されるこれらのオペレーションが、顧客テーブルから顧客を削除することもあることを想定する。オペレーションジェネレータ１０４は、この顧客テーブルにアクセスするパーミッションを有するので、このパーミッションにより、この間違った削除が発生することが禁止されないことになる。
【００３０】
スナップショットモジュール３０２は、予想外の任意の変更がデータストア１０６のこの制限のない部分に対して行われるかどうかを検査する。スナップショットモジュール３０２は、データストア１０６の制限された部分に対して予想外の任意の変更が行われるかどうかについて検査する必要がない。なぜなら、データストア１０６の制限された部分に対してどのような変更も行われることがないようにすることは、すでに設定されているパーミッションに依存する可能性があるからである。代わりに、スナップショットモジュール３０２は、予想外の任意の変更が制限のない部分ではなくてデータストア１０６の追加の区域に対して行われるかどうかを検査することもできる。さらに、データストア１０６の制限のない部分は、データストア１０６のすべてであってもよいことに留意されたい（例えば、パーミッションモジュール３０４が存在しない実施形態においては、データストア１０６全体を制限のない部分と見なすことができる）。
【００３１】
アプリケーション１０８は、データストア１０６に対するどのような変更が予想されるかについてデータ完全性マネージャ１０２に通知し、スナップショットモジュール３０２は、予想外の任意の変更がこの制限のない部分に対して行われるかどうかを検査することができるようになる。代わりに、この制限のない部分に対してどのような変更が行われるかについての指示をスナップショットモジュール３０２によってアプリケーション１０８に対して返すこともでき、その結果、アプリケーション１０８は、予想外の任意の変更がこの制限のない部分に対して行われるかどうかを決定することができる。
【００３２】
スナップショットモジュール３０２は、予想外の任意の変更がデータストア１０６の制限のない部分に対して行われるかどうかを様々な異なる方法で検査することができる。ある種の実施形態においては、スナップショットモジュール３０２は、動的に生成されるオペレーションによって変更されることが予想されないデータストア１０６の制限のない部分のすべての部分のスナップショットを取得する。このスナップショットは、例えば図２の動作２０２において確立する部分として取得される。スナップショットは、これらの動的に生成されるオペレーションが実行される以前に取得されるので、「実行以前の」スナップショット、または「以前の」スナップショットと呼ぶこともできる。これらの動的に生成されるオペレーションによって変更されることが予想されないデータストア１０６の制限のない部分のうちのこれらの部分は、例えばアプリケーション１０８によって識別される。アプリケーション１０８は、どのような要求がサブミットされることになるかを知っているので、データストア１０６中において、何が起こるはずで何が起こらないはずであるかについての知識も有しており、この知識を、データ完全性マネージャ１０２に対して渡すことができる。例えば、テーブル中において（例えば、顧客テーブルにおける新しい顧客についての）新しい行が作成される場合には、このテーブル中における既存の行は、この動的に生成されるオペレーションによって変更されるはずはない。別の実施例では、テーブル中の行が削除される（例えば、顧客テーブルから顧客を取り除く）場合には、削除すべき行以外の行は、この動的に生成されるオペレーションによって変更されるはずはない。アプリケーション１０８が、データストア１０６中で何が起こるはずで何が起こるはずでないかについて有する知識は、一般的に特定の要求について何が必要とされないかという観点から特徴づけられる。例えば、アプリケーション１０８が、この要求がテーブル中の２行に対してしか影響を及ぼさないはずであることを知っている場合には、アプリケーション１０８は、変更されないはずのもしかすると数千行もある行を列挙する代わりに、これらの２行を列挙し、他の行が変更されないはずであることを示すことができる。
【００３３】
動的に生成されるオペレーションによって変更されることが予想されないデータストア１０６の制限のない部分のうちの一部分のスナップショットは、異なる方法で取得することができる。ある実装においては、スナップショットは、動的に生成されるオペレーションによって変更されることが予想されないデータストア１０６の制限のない部分のうちの一部分におけるすべてのデータをコピーし、あるいはキャプチャーすることによって取得される。他の実装においては、このスナップショットは、これらの動的に生成されるオペレーションによって変更されることが予想されないデータストア１０６の制限のない部分のうちの一部分に対して（従来のハッシュファンクションを使用して）ハッシュ値を計算することによって取得される。
【００３４】
他の実装においては、スナップショットは、データストア１０６の制限のない部分のうちの異なる部分についてのバージョン番号をコピーし、あるいはキャプチャーすることによって取得される。例えば、データストア１０６が１つまたは複数のテーブルを有するデータベースである実施形態においては、バージョン値の列をこのテーブル中に含めることができる。このデータベースの特定の行についてのバージョン値は、この特定の行のデータが変更されるたびにこのデータベースによって変更される。このバージョン値は、例えば、ＧＵＩＤ（Ｇｌｏｂａｌｌｙ  Ｕｎｉｑｕｅ  Ｉｄｅｎｔｉｆｉｅｒグローバル一意識別子）、（例えば、ナノ秒で時間を測定した）日付およびタイムスタンプ、この行におけるデータにハッシュファンクションを適用する結果もたらされるハッシュ値など、このデータベース中で一意であることが予想される値にすることができる。かかるバージョン値の列がこのテーブル中にまだ存在していない場合には、データ完全性マネージャ１０２は、（例えば、図２の動作２０２を確立する一部分として）このテーブル中のこの列を作成することができる。
【００３５】
データストア１０６の制限のない部分のうちの異なる部分についてのバージョン番号をコピーし、あるいはキャプチャーすることに加えて、ある実施形態においては、バージョン番号がどの部分についてであるかを示すインジケータもまたコピーし、あるいはキャプチャーすることができる。例えば、データストア１０６が、バージョン値の列を有するテーブルを含んでいる実施形態においては、別の列がこのテーブルの行を一意に識別する識別子（例えば、一次キー値）を含むことができる。したがって、このスナップショットは、このテーブルのバージョン番号と個々の行との間の関連付けを保持することができる。このテーブルのバージョン番号と個々の行の間の関連付けを可能にするこれらの追加の識別子を有することにより、以下でより詳細に説明するように、検出される任意の変更の性質をより正確に識別することが可能になる。
【００３６】
動的に生成されるオペレーションによって変更されることが予想されないデータストア１０６の制限のない部分のうちの一部分のスナップショットが取得された後に、動的に生成されるオペレーションを実施することができる。動的に生成されるオペレーションが実行された後に、動的に生成されるオペレーションによって変更されることが予想されないデータストア１０６の制限のない部分のうちの一部分の別のスナップショットが取得される。この第２のスナップショットは、前述のような実行以前のスナップショットと同じ方法で取得される。この第２のスナップショットは、例えば図２の動作２１０において検証の一部分として取得される。第２のスナップショットは、動的に生成されるオペレーションが実行された後に取得されるので、「実行以後の」スナップショットまたは「以後の」スナップショットと呼ぶこともできる。第２のスナップショットは、これらの動的に生成されるオペレーションによって変更されることが予想されないデータストア１０６の制限のない部分のうちの一部分について取得され、必ずしもこの実行以前のスナップショットと同じ部分が取得されるとは限らないことに留意されたい。したがって、例えば、新しい任意の行が、これらの動的に生成されるオペレーションによって追加されることが予想された行以外の制限のない部分においてテーブルに追加された場合には、取得される実行以後のスナップショットは、これらの新しい行を含むはずである。
【００３７】
動的に生成されるオペレーションによって変更されることが予想されないデータストア１０６の制限のない部分のうちの一部分に対するどのような変更がある場合にも、これらの変更は、これらのスナップショット中に反映されるはずである。例えば、変更されることが予想されないデータストアの制限のない部分に追加された任意のデータ（例えば、テーブルの行）と、変更されることが予想されないデータストアの制限のない部分から削除された任意のデータと、変更されることが予想されないデータストアの制限のない部分において修正された任意のデータは、これらのスナップショット中に反映されるはずである。したがって、この実行以前のスナップショットとこの実行以後のスナップショットの両者が同じ（すなわち、これらの値が、動的に生成されるオペレーションによって変更されることが予想されないデータストア１０６の制限のない部分のうちの一部分におけるすべてのデータ、あるいはハッシュ値、またはバージョン値などであろうとなかろうと同一の値）である場合には、動的に生成されるオペレーションによって変更されることが予想されないデータストア１０６の制限のない部分のうちの一部分に対して変更は行われていない。
【００３８】
スナップショットが取得される方法によっては、動的に生成されるオペレーションによって変更されることが予想されないが、変更されるデータストア１０６の制限のない部分のうちの特定の一部分を識別することができる。例えば、一次キー値などの識別子がこのスナップショットの一部分としてコピーされ、あるいはキャプチャーされる場合に、そのときに特定のバージョン番号が、この実行以前のスナップショットと実行以後のスナップショットで異なる場合には、スナップショットモジュール３０２は、テーブルの（これらの識別子に基づいた）どの行が変更されたかについて知っている。
【００３９】
テーブルのバージョン番号と個々の行の間の関連付けを可能にする追加の識別子（例えば、一次キー値）を有することによって、検出される任意の変更の性質をより正確に識別することが可能である。例えば、バージョン値が変化したが、行の識別子が同じままである場合には、この行のデータに対する修正が存在したことになる。別の実施例として、新しい行識別子が、実行以後のスナップショット中には存在するが、実行以前のスナップショット中に存在しなかった場合には、新しい行識別子によって識別される行は、テーブルに追加された新しい行である。さらに他の実施例として、行識別子が実行以前のスナップショットには存在するが、実行以後のスナップショット中には存在していない場合には、行識別子によって識別される行は、テーブルから削除された行である。
【００４０】
他の実施形態においては、データストア１０６の一部分のスナップショットを取得するのではなくて、スナップショットモジュール３０２が、トリガを使用して、予想外の任意の変更がデータストア１０６の制限のない部分に対して行われるかどうかを決定する。トリガは、スナップショットモジュール３０２が、データストア１０６の特定のテーブル（または他のユニット）に対して行われた各変更についてデータストア１０６が通知することを要求できるようにする、一部のデータストア１０６によってサポートされるメカニズムである。かかる変更は、例えば特定のテーブルに追加されるデータ、特定のテーブルから削除されるデータ、および特定のテーブル中でアップデートされるデータを含む可能性がある。スナップショットモジュール３０２は、データストア１０６によって通知されるこれらの変更のレコード（例えば、これらの変更をリストアップするテーブル）を保持し、次いで動的に生成されるオペレーションが（例えば、図２の検証動作２１０の一部分として）実行された後に、このレコードを評価する。代わりに、この変更のレコード（例えば、これらの変更をリストアップしたテーブル）は、データストア１０６によって保持することができ、このレコードは、スナップショットモジュール３０２によってアクセスすることができる。
【００４１】
いずれかの変更が、アプリケーション１０８がデータ完全性マネージャ１０２に通知したものではないと予想された変更のレコード中に含まれる場合にも、スナップショットモジュール３０２は、予想外の１つ（または複数）の変更が、これらの動的に生成されるオペレーションによってデータストア１０６の制限のない部分に対して行われたことを知っている。このレコード中に含まれる変更が、アプリケーション１０８がデータ完全性マネージャ１０２に通知したと予想された変更だけでしかない場合には、スナップショットモジュール３０２は、予想外の変更が、これらの動的に生成されるオペレーションによってデータストア１０６の制限のない部分に対して行われなかったことを知っている。
【００４２】
ある実施形態においては、パーミッションモジュール３０４およびスナップショットモジュール３０２を使用して、データストア１０６中のエントリ（例えば、行、列、テーブル、ページ、ライン、ブロックなど）の作成、データストア１０６中のエントリのアップデート、および／またはデータストア１０６中のエントリの削除を行うなど、データストア１０６を修正することに関与するアプリケーション１０８からの要求について予想外の操作が実行されなかったことを検証する。以下でより詳細に説明するように、パーミッションモジュール３０４およびロックセットモジュール３０６を使用して、データストア１０６からのエントリを読み取ることに関与するアプリケーション１０８からの要求について、予想外の操作が実行されなかったことを検証する。
【００４３】
図４は、予想外の操作が、動的に生成されるオペレーションによって実行されなかったことを検証するための一実施例のプロセス４００を示すフローチャートである。プロセス４００は、図２のセットアップアクション動作２０２および／または検証動作２１０の実行として実施することができるプロセスの実施例である。プロセス４００は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組合せの形で実施することができる。
【００４４】
最初に、パーミッションを使用して、アクセスすべきではないこのデータストアの一部分に対するアクセスを拒否する（動作４０２）。これらのパーミッションは、例えば前述のように図３のパーミッションモジュール３０４によって設定される。動的に生成される１つ（または複数）のオペレーションが実行された後に、動的に生成される１つ（または複数）のオペレーションによって予想外の任意の変更がこのデータストアの制限のない部分に対して行われたかどうかについての検査が行われる（動作４０４）。この検査は、例えば前述のように図３のスナップショットモジュール３０２によって行われる。この検査の結果は、例えばアプリケーション１０８に返すことができる。
【００４５】
次いで、プロセス４００は、データストアの制限のない部分に対して動的に生成される１つ（または複数）のオペレーションが予想外の任意の変更を行ったかどうか、またはデータストアの制限された部分にアクセスしたかどうかに基づいて進行する（動作４０６）。データストアの制限のない部分に対して予想外の任意の変更が行われたかどうかについては、動作４０４における検査結果から決定される。データストアの制限された部分への任意のアクセスが試みられたかどうかについては、前述のようにパーミッションモジュール３０４が設定するパーミッションに基づいて実施される。
【００４６】
動的に生成される１つ（または複数）のオペレーションが、データストアの制限のない部分に対して予想外の任意の変更を行い、またはデータストアの制限された部分にアクセスし、あるいはその両方を行う場合には、予想外の操作が、動的に生成される１つ（または複数）のオペレーションによって実行されている（動作４０８）。オプションとして、どのような操作が行われたかについての指示を図１のアプリケーション１０８に返すことができ、あるいは代わりに、予想外の何らかの操作が行われたことを示す指示を単にアプリケーション１０８に返すこともできる。しかし、動的に生成される１つ（または複数）のオペレーションが、データストアの制限のない部分に対して予想外のどのような変更も行わなかった場合、またデータストアの制限された部分にアクセスしなかった場合には、予想外の操作が動的に生成される１つ（または複数）のオペレーションによって実行されなかったことが検証される（動作４１０）。この検証結果については、オプションとしてアプリケーション１０８に返すこともできる。
【００４７】
図５は、予想外の操作が動的に生成されるオペレーションによって実行されなかったことを検証する別の実施例のプロセス５００を示すフローチャートである。プロセス５００は、図２のセットアップアクション動作２０２および／または検証動作２１０の実行として実施することができるプロセスの一実施例である。プロセス５００は、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組合せの形で実施することができる。
【００４８】
最初に、パーミッションを使用して、アクセスすべきでないデータストアの一部分に対するアクセスを拒否する（動作５０２）。これらのパーミッションは、例えば、前述のように図３のパーミッションモジュール３０４によって設定される。次いで、データストアの制限のない部分の第１のスナップショットが取得される（動作５０４）。このスナップショットは、スナップショットモジュール３０２に関して前述したように様々な方法で取得することもできる。動的に生成される１つ（または複数）のオペレーションが実行された後に、データストアの制限のない部分の第２のスナップショットが取得される（動作５０６）。第２のスナップショットは、第１のスナップショットが動作５０４で取得されたのと同様な方法で取得される。
【００４９】
次いで、この第１および第２のスナップショットが比較され（動作５０８）、プロセス５００は、これらの２つのスナップショットが同じであるかどうかに基づいて進行する（動作５１０）。これらの２つのスナップショットが同じ（例えば、これらの値が、動的に生成されるオペレーションによって変更されることが予想されないデータストアの制限のない部分のうちの一部分におけるすべてのデータ、あるいはハッシュ値、またはバージョン値などであろうとなかろうと同一の値）である場合には、予想外の操作が動的に生成される１つ（または複数）のオペレーションによって実行されたことが検証される（動作５１２）。この検証結果は、オプションとしてアプリケーション１０８に返すことができる。しかし、これらの２つのスナップショットが同じでない場合には、予想外の操作が、動的に生成される１つ（または複数）のオペレーションによって実行されている（動作５１４）。オプションとして、（例えば、変更されるこのスナップショット中のどの値に基づいて）どの操作が行われたかを示す指示を、図１のアプリケーション１０８に対して返すことができ、あるいは代わりに予想外の何らかの操作が行われたことを示す指示を単にアプリケーション１０８に対して返すこともできる。
【００５０】
図３に戻ると、ロックセットモジュール３０６は、データストア１０６の制限のない部分のうちの一部分をロックし、その結果、これらのロックされた部分には、オペレーションジェネレータ１０４がアクセスすることができなくなる。代わりに、ロックセットモジュール３０６は、制限のない部分のうちの一部分だけでなく、データストア１０６の追加の一部分をロックすることもできる。さらに、データストア１０６の制限のない部分は、データストア１０６のすべてとすることもできる（例えば、パーミッションモジュール３０４が存在しない実施形態においては、データストア１０６全体を制限のない部分と見なすこともできる）ことに留意されたい。ロックセットモジュール３０６は、一般的にデータストア１０６からのデータ値を読み取ることに関与するアプリケーション１０８からの要求について使用される。
【００５１】
前述のように、データストア１０６がサポートするパーミッションの細分性により、データストア１０６のすべての所望の部分を制限することができるようにならないこともある（例えば、パーミッションにより、テーブル全体へのアクセスを拒否することはできるが、行ごとにはパーミッションの認可または拒否ができないこともある）。ロックセットモジュール３０６により、データストア１０６がサポートするパーミッションにより可能になるよりも細かい細分性に基づいてデータストア１０６の一部分をロックすることが可能になる。ロックセットモジュール３０６は、動的に生成されるオペレーションがアクセスすべきでないデータストア１０６の制限のない部分のうちのこれらの部分を識別する。アプリケーション１０８は、どのデータがデータストア１０６から要求されているかについてデータ完全性マネージャ１０２に通知し、これにより、ロックセットモジュール３０６は、データストア１０６の制限のない部分のうちのどの部分が、動的に生成されるオペレーションによってアクセスされるべきでないかを決定し、これらの部分をロックすることができるようになる。
【００５２】
動的に生成されるオペレーションがアクセスすべきでないデータストア１０６の制限のない部分のうちの一部分は、データストア１０６の性質に少なくとも部分的に応じて、異なる方法で識別することができる。データストア１０６がマイクロソフト（登録商標）ＳＱＬサーバである、ある実施形態においては、動的に生成されるオペレーションがアクセスすべきでないデータストア１０６の制限のない部分のうちの一部分は、アプリケーション１０８からの要求を満たさないデータストア１０６の制限のない部分中のこの１つ（または複数）のテーブルの各行を（例えば、一次キーなどの識別子によって）選択するロックセットモジュール３０６によって識別される。これらの行（およびこれらの識別子）は、例えば、どの行がアプリケーション１０８からの要求を満たさないことになるかを識別するためにオペレーションをデータストア１０６に対してサブミットするロックセットモジュール３０６によって決定することができる。行ごとに、ロックセットモジュール３０６は、行に対するアップデートトランザクションを開始するが、このアップデートトランザクションをまだ完了してはいない。トランザクションは、すべてが実行されているか、何も実行されていないことが保証されるオペレーションの集合を意味している。１つのトランザクションは、一般的に集合におけるすべてのオペレーションの結果をコミットするか、または集合中のオペレーションの結果のうちのどれもコミットされないようにするためにこのトランザクションをロールバックするオペレーションによって完了される。アップデートトランザクションは、データストア１０６の特定の一部分（例えば、特定の１つ（または複数）の行）をアップデートし、または修正するトランザクションである。アップデートトランザクションが行ごとに開始された後に、ロックセットモジュール３０６は、そのロッキングプロセスが行われること、およびジェネレータ１０４がオペレーションを動的に生成することができるようにオペレーションジェネレータ１０４に対して要求をサブミットすることができることをアプリケーション１０８に通知する。
【００５３】
各行ごとに別のアップデートトランザクションを開始して、データストア１０６中における「ロックエスカレーション（ｌｏｃｋ  ｅｓｃａｌａｔｉｏｎ）」と呼ばれる状況を回避する。ロックエスカレーションは、トランザクションが要求するようにデータストア１０６が個別の行をロックしようとするのではなくて、ただテーブル全体をロックすることを結論づける、テーブル中における十分な行にアクセスするトランザクションを、データストア１０６が、受け取るときに発生する。しかし、テーブル全体がロックされることになる場合には、動的に生成されるオペレーションがアクセスすべきこのテーブルの一部分は、動的に生成されるオペレーションにとってアクセス可能でないことになる。したがって、ロックエスカレーションを回避し、動的に生成されるオペレーションがアクセスすべきこのテーブルの一部分を動的に生成されるオペレーションにとってアクセス可能なままにしておくために、行ごとの個別のアップデートトランザクションが開始される。データストア１０６は、個別のアップデートトランザクションを別々に取り扱い、ロックエスカレーションは、発生しないことになる。データストア１０６がロックエスカレーションを示さない実施形態においては、かかる個別のアップデートトランザクションを使用する必要がなく、動的に生成されるオペレーションがアクセスすべきでないすべての行を識別する１つのアップデートトランザクションを使用することができることに留意されたい。
【００５４】
アプリケーション１０８からの要求を満たさないこれらの各行に対するアップデートトランザクションを開始するが、まだ完了しないことにより、データストア１０６は、ロックセットモジュール３０６がこれらの行に対して変更を行うプロセス中にあるものと思う。したがって、動的に生成されるオペレーションが実行されるときに、これらのオペレーションのいずれかがデータストア１０６のロックされた部分にアクセスを行う（例えば、読み取る）ことを試みるとすると、データストア１０６の一部分がこの完了していない１つ（または複数）のアップデートトランザクションに起因してロックされるので、データストア１０６は、このオペレーションを実行しないことになる。データストア１０６は、別のコンポーネント（ロックセットモジュール３０６）が、データストア１０６のこの一部分をアップデートするプロセス中にあることを知っており、したがって、そのオペレーションについてその適切な１つ（または複数）の値が何であるかが、完了していない１つ（または複数）のアップデートトランザクションが完了してしまうまで確実でないので、データストア１０６は、このオペレーションを実行しないことになる。データストア１０６は、一般的に特定の時間後にタイムアウトし、オペレーションがタイムアウトされ、実行することができなかったことを示す指示をオペレーションジェネレータ１０４に対して返すことになる。次いで、オペレーションジェネレータ１０４は、この要求を実行することができなかったことを示す応答をアプリケーション１０８に対して返し、アプリケーション１０８は、動的に生成される１つ（または複数）のオペレーションに伴う問題が存在したことを推論することができる。
【００５５】
アプリケーション１０８は、動的に生成されるオペレーションが実行されたときをデータ完全性マネージャ１０２に通知し、この時点で、ロックセットモジュール３０６は、この行に対してそれが確立したロックを解放することができる。ロックの解放は、例えばロックセットモジュール３０６により、データストア１０６に通知してロックを解放し、アップデートトランザクションをロールバックすることによって実施することができる。トランザクションをロールバックすることにより、データのアップデートは、実際にはこれらのアップデートトランザクションに応答してデータストア１０６が実施することはない。ロックの解放、およびアップデートトランザクションのロールバックは、（たとえこれらのアップデートトランザクションのうちのどれも、データストア１０６に対してコミットされなかったとしても）アップデートトランザクションの完了の役割を果たす。
【００５６】
一部の状況においては、複数の異なる組のロックをロックセットモジュール３０６によって並行して確立することができる。これらの異なる組のロックは、別々に確立し、解放することができ、これらのロックを確立するアップデートトランザクションは、一般的にデータストア１０６に対する異なるコネクション（例えば、図１の制限のないコネクション１１０に類似の異なる制限のないコネクション）上で実施されるはずである。
【００５７】
図６は、動的に生成されるオペレーションがアクセスすべきでないデータストアの一部分が、動的に生成されるオペレーションによってアクセスされないことを検証するための一実施例のプロセス６００を示すフローチャートである。プロセス６００は、図２のセットアップアクション動作２０２および／または検証動作２１０の実行として実施することができるプロセスの一実施例である。プロセス６００は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せの形で実施することができる。
【００５８】
最初に、パーミッションを使用して、アクセスすべきでないデータストアの一部分に対するアクセスを拒否する（動作６０２）。これらのパーミッションは、例えば前述のような図３のパーミッションモジュール３０４によって設定される。次いで、読み取るべきでないデータストアの制限のない部分のうちの一部分をロックする（動作６０４）。このロッキングについては、例えば図３のロックセットモジュール３０６を参照して前述したように実施することができる。
【００５９】
動的に生成される１つ（または複数）のオペレーションが実行された後に（あるいは、代わりに動的に生成される１つ（または複数）のオペレーションが実行されるのと並行して）、プロセス６００は、データストアのロックされた任意の部分が動的に生成される１つ（または複数）のオペレーションによってアクセスされたかどうかに基づいて進行する（動作６０６）。データストアのロックされた任意の部分が、動的に生成される１つ（または複数）のオペレーションによってアクセスされた場合には、動的に生成される１つ（または複数）のオペレーションは、アクセスされるべきでないデータストアの一部分にアクセスしようと試みたことになる（動作６０８）。オプションとして、動的に生成される１つ（または複数）のオペレーションがアクセスされるべきでないデータストアの一部分にアクセスしようと試みたことを示す指示を図１のアプリケーション１０８に返すことができる。しかし、データストアのロックされた部分が、動的に生成される１つ（または複数）のオペレーションによってアクセスされなかった場合には、動的に生成される１つ（または複数）のオペレーションは、アクセスされるべきでないデータストアの一部分にアクセスしようと試みなかったことになる（動作６１０）。この検証結果は、オプションとしてアプリケーション１０８に返すことができる。
【００６０】
図７は、本明細書中で説明している技法を実施するために使用することができる一般的なコンピュータ環境７００を示している。コンピュータ環境７００は、コンピューティング環境の一実施例にすぎず、このコンピュータアーキテクチャおよびネットワークアーキテクチャの用途および機能の範囲についてどのような限定を示唆することも意図してはいない。また、コンピュータ環境７００は、例示のコンピュータ環境７００中に示されるコンポーネントのうちのどの１つまたは組合せに関連したどのような依存性または要件を有するものとも解釈すべきでもない。
【００６１】
コンピュータ環境７００は、コンピュータ７０２の形態の汎用コンピューティングデバイスを含んでいる。コンピュータ７０２は、例えば、図１のアプリケーション１０８、オペレーションジェネレータ１０４、データ完全性マネージャ１０２、および／またはデータストア１０６を実装することができるデバイスとすることができる。コンピュータ７０２のコンポーネントは、それだけには限定されないが、１つまたは複数のプロセッサまたは処理装置７０４、システムメモリ７０６、およびプロセッサ７０４を含めて様々なシステムコンポーネントをシステムメモリ７０６に結合するシステムバス７０８を含むことができる。
【００６２】
システムバス７０８は、メモリバスまたはメモリコントローラ、ペリフェラルバス、アクセラレーティドグラフィックスポート、および様々なバスアーキテクチャのうちのどれかを使用したプロセッサバスまたはローカルバスを含めて、いくつかのタイプのバス構造のうちのどれかのうちの１つまたは複数を表す。実施例として、かかるアーキテクチャは、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ業界標準アーキテクチャ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅマイクロチャネルアーキテクチャ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ拡張ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎビデオエレクトロニクス規格協会）ローカルバス、およびメザニン（Ｍｅｚｚａｎｉｎｅ）バスとしても知られているＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔペリフェラルコンポーネント相互接続）バスを含むことができる。
【００６３】
コンピュータ７０２は、一般的に様々なコンピュータ読取り可能媒体を含んでいる。かかる媒体は、コンピュータ７０２によってアクセス可能な使用可能な任意の媒体とすることができ、揮発性媒体も不揮発性媒体も、着脱可能媒体も、着脱不能媒体も含んでいる。
【００６４】
システムメモリ７０６は、ＲＡＭ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙランダムアクセスメモリ）７１０などの揮発性メモリ、および／またはＲＯＭ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ読取り専用メモリ）７１２などの不揮発性メモリの形態のコンピュータ読取り可能媒体を含んでいる。起動中などコンピュータ７０２内のエレメント間で情報を転送する助けをする基本ルーチンを含むＢＩＯＳ（ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ基本入出力システム）７１４は、ＲＯＭ７１２に記憶される。ＲＡＭ７１０は一般的に、処理装置７０４にとって直接にアクセス可能であり、または処理装置７０４によって現在動作させられており、あるいはその両方が行われるデータおよび／またはプログラムモジュールを含んでいる。
【００６５】
コンピュータ７０２は、他の着脱可能／着脱不能な、揮発性／不揮発性のコンピュータストレージ媒体を含むこともできる。実施例として、図７は、着脱不能な不揮発性磁気媒体（図示せず）から情報を読み取り、それに情報を書き込むハードディスクドライブ７１６、着脱可能な不揮発性磁気ディスク７２０（例えば、「フロッピー（登録商標）ディスク」）から情報を読み取り、それに情報を書き込む磁気ディスクドライブ７３２、ならびにＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭや他の光媒体など着脱可能な不揮発性光ディスク７２４から情報を読み取り、またはそれに情報を書き込み、あるいはその両方を行う光ディスクドライブ７２２を示している。ハードディスクドライブ７１６、磁気ディスクドライブ７３２、および光ディスクドライブ７２２は、それぞれ１つまたは複数のデータ媒体インターフェース７２５によってシステムバス７０８に接続される。代わりに、ハードディスクドライブ７１６、磁気ディスクドライブ７３２、および光ディスクドライブ７２２は、１つまたは複数のインターフェース（図示せず）によってシステムバス７０８に接続することもできる。
【００６６】
これらのディスクドライブおよびこれらに関連するコンピュータ読取り可能媒体は、コンピュータ７０２のためのコンピュータ読取り可能命令、データ構造、プログラムモジュール、および他のデータの不揮発性ストレージを提供する。この実施例は、ハードディスク７１６、着脱可能磁気ディスク７２０、および着脱可能光ディスク７２４を示しているが、磁気カセットまたは他の磁気ストレージデバイス、フラッシュメモリカード、ＣＤ−ＲＯＭ、ＤＶＤ（ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋデジタル多用途ディスク）または他の光ストレージ、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、ＥＥＰＲＯＭ（electrically erasable programmable read-only memory電気的消去可能プログラマブル読取り専用メモリ）など、コンピュータによってアクセス可能なデータを記憶することができる他のタイプのコンピュータ読取り可能媒体を利用して、例示のコンピューティングシステムおよびコンピューティング環境を実装することもできることを理解されたい。
【００６７】
実施例としてオペレーティングシステム７２６、１つまたは複数のアプリケーションプログラム７２８、他のプログラムモジュール７３０、およびプログラムデータ７３２を含めて、任意数のプログラムモジュールをハードディスク７１６、磁気ディスク７２０、光ディスク７２４、ＲＯＭ７１２、および／またはＲＡＭ７１０に記憶することができる。かかるオペレーティングシステム７２６、１つまたは複数のアプリケーションプログラム７２８、他のプログラムモジュール７３０、およびプログラムデータ７３２（または、これらの組合せ）のそれぞれは、この分散ファイルシステムをサポートする常駐コンポーネントのすべてまたは一部分を実装することができる。
【００６８】
ユーザは、キーボード７３４やポインティングデバイス７３６（例えば、「マウス」）などの入力デバイスを介してコンピュータ７０２にコマンドおよび情報を入力することができる。他の入力デバイス７３８（詳細には図示せず）は、マイクロフォン、ジョイスティック、ゲームパッド、サテライトディッシュ、シリアルポート、スキャナおよび／またはその他同種類のものなどを含むことができる。これらおよび他の入力デバイスは、このシステムバス７０８に結合される入出力インターフェース７４０を介して処理装置７０４に接続されるが、これらは、パラレルポート、ゲームポート、ＵＳＢ（ｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓユニバーサルシリアルバス）など他のインターフェースおよびバス構造によって接続することもできる。
【００６９】
モニタ７４２または他のタイプのディスプレイデバイスもまた、ビデオアダプタ７４４などのインターフェースを介してシステムバス７０８に接続することができる。モニタ７４２に追加して、他の出力ペリフェラルデバイスは、入出力インターフェース７４０を介してコンピュータ７０２に接続することができる、スピーカ（図示せず）やプリンタ７４６などのコンポーネントを含むこともできる。
【００７０】
コンピュータ７０２は、リモートコンピューティングデバイス７４８など１つまたは複数のリモートコンピュータに対する論理接続を使用してネットワーク環境中で動作することが可能である。実施例として、リモートコンピューティングデバイス７４８は、パーソナルコンピュータ、ポータブルコンピュータ、サーバ、ルータ、ネットワークコンピュータ、ピアデバイス、または他の共通ネットワークノードなどとすることができる。リモートコンピューティングデバイス７４８は、コンピュータ７０２に対して本明細書中で説明しているエレメントおよび機能の多くまたはすべてを含むことができるポータブルコンピュータとして示されている。
【００７１】
コンピュータ７０２とリモートコンピュータ７４８の間の論理接続は、ＬＡＮ（ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋローカルエリアネットワーク）７５０および一般的なＷＡＮ（ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋワイドエリアネットワーク）７５２として示されている。かかるネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネットおよびインターネットにおいて、一般的なものである。
【００７２】
ＬＡＮネットワーキング環境中で実装されるときには、コンピュータ７０２は、ネットワークインターフェースまたはアダプタ７５４を介してローカルネットワーク７５０に接続される。ＷＡＮネットワーキング環境中で実装されるときには、コンピュータ７０２は、一般的にワイドネットワーク７５２上で通信を確立するためのモデム７５６または他の手段を含んでいる。モデム７５６は、コンピュータ７０２にとって内蔵または外付けとすることが可能であるが、入出力インターフェース７４０または他の適切なメカニズムを介してシステムバス７０８に接続することができる。図に示すこれらのネットワーク接続は、例示的であり、コンピュータ７０２と７４８の間で１つ（または複数）の通信リンクを確立する他の手段を使用することもできることを理解されたい。
【００７３】
コンピューティング環境７００を用いて示される環境などのネットワーク環境においては、コンピュータ７０２に関連して示されるプログラムモジュール、またはその一部分は、リモートメモリストレージデバイスに記憶することができる。実施例として、リモートアプリケーションプログラム７５８は、リモートコンピュータ７４８のメモリデバイス上に存在する。例示の目的で、アプリケーションプログラム、およびこのオペレーティングシステムなどの他の実行可能プログラムコンポーネントは、本明細書中では個別のブロックとして示されているが、かかるプログラムおよびコンポーネントは、様々な時刻にコンピューティングデバイス７０２の異なるストレージコンポーネントの形で存在し、このコンピュータの１つ（または複数）のデータプロセッサによって実行されることが理解されよう。
【００７４】
様々なモジュールおよび技法は、本明細書中では、１台または複数台のコンピュータまたは他のデバイスによって実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的な文脈で説明することができる。一般的に、プログラムモジュールは、特定のタスクを実施し、特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含んでいる。一般的に、このプログラムモジュールの機能は、様々な実施形態において必要に応じて結合し、または分散することができる。
【００７５】
これらのモジュールおよび技法の実装形態は、コンピュータ読取り可能媒体の何らかの形態で記憶し、それらの形態間で伝送することができる。コンピュータ読取り可能媒体は、コンピュータによってアクセスすることができる使用可能な任意の媒体とすることができる。実施例として、限定するものではないが、コンピュータ読取り可能媒体は、「コンピュータストレージ媒体」および「通信媒体」を含むことができる。
【００７６】
「コンピュータストレージ媒体」は、コンピュータ読取り可能命令、データ構造、プログラムモジュール、他のデータなどの情報のストレージのための任意の方法または技術で実装される揮発性媒体および不揮発性媒体、着脱可能媒体および着脱不能媒体を含んでいる。コンピュータストレージ媒体は、それだけには限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気ストレージデバイス、あるいは所望の情報を記憶するために使用することができ、コンピュータによってアクセスすることができる他の任意の媒体を含んでいる。
【００７７】
「通信媒体」は、一般的に搬送波や他の搬送メカニズムなどの被変調データ信号の形のコンピュータ読取り可能命令、データ構造、プログラムモジュールまたは他のデータを実施する。通信媒体は、任意の情報配信媒体も含んでいる。この用語「被変調データ信号」は、その１つまたは複数の特性がその信号中の情報を符号化するようにして設定または変更された信号を意味する。実施例として、限定するものではないが、通信媒体は、有線ネットワークや直接配線接続などの有線媒体と、音響、ＲＦ、赤外線、他の無線媒体などの無線媒体とを含んでいる。以上のうちの任意の組合せもまた、コンピュータ読取り可能媒体の範囲内に含められる。
【００７８】
以上の説明では、構造的機能および／または方法動作に特有の言語が使用されているが、添付の特許請求の範囲で定義される本発明は、説明している特定の機能または動作だけに限定されないことを理解されたい。そうではなくて、これらの特定の機能および動作は、本発明を実装する例示の形態として開示されている。
【図面の簡単な説明】
【００７９】
【図１】データストアに対して動的に生成されるオペレーションの検証を実施することができる環境の一実施例を示すブロック図である。
【図２】データストアに対して動的に生成されるオペレーションを検証するためのプロセスの一実施例を示すフローチャートである。
【図３】データ完全性マネージャの一実施例をさらに詳細に示す図である。
【図４】予想外の操作が、動的に生成されるオペレーションによって実行されなかったことを検証するためのプロセスの一実施例を示すフローチャートである。
【図５】予想外の操作が、動的に生成されるオペレーションによって実行されなかったことを検証するためのプロセスの別の実施例を示すフローチャートである。
【図６】これらの動的に生成されるオペレーションがアクセスすべきでない、データストアのうちの一部分が、これらの動的に生成されるオペレーションによってアクセスされないことを検証するためのプロセスの一実施例を示すフローチャートである。
【図７】本明細書中で説明されるこれらの技法を実装するために使用することができる一般的なコンピュータ環境を示す図である。
【符号の説明】
【００８０】
１０２  データ完全性マネージャ
１０４  オペレーションジェネレータ
１０６  データストア
１０８  アプリケーション
１１０  制限のないコネクション
１１２  制限されたコネクション
３０２  スナップショットモジュール
３０４  パーミッションモジュール
３０６  ロックセットモジュール
【図１】
2006072986.tif 000003
【図２】
2006072986.tif 000004
【図３】
2006072986.tif 000005
【図４】
2006072986.tif 000006
【図５】
2006072986.tif 000007
【図６】
2006072986.tif 000008
【図７】
2006072986.tif 000009