(57)【要約】  ＳＲＳレジストリトランザクションデータを検証するための方法は、第１のデータベースからＯＬＴＰトランザクションデータを受信することと、ＯＬＴＰトランザクションデータをパースすることと、パースされたＯＬＴＰトランザクションデータを１組のプロファイルのうちの１つ以上と比較することと、を含む。１組のプロファイルのうちの１つ以上の各々が、ＸＭＬファイルの中のメタデータを含む。本方法はまた、パースされたＯＬＴＰトランザクションデータを第１のデータキャッシュにキャッシュすることと、ＯＬＴＰトランザクションデータに関連するログデータを受信することと、ログデータを第２のデータキャッシュにキャッシュすることと、を含む。本方法はさらに、第１のデータキャッシュにキャッシュされているパースされたトランザクションデータを第２のデータキャッシュにキャッシュされているログデータと相関させることを含む。
2012530288.tif 000002
【特許請求の範囲】
【請求項１】
ＳＲＳレジストリトランザクションデータを検証するための方法であって、
第１のデータベースからＯＬＴＰトランザクションデータを受信することと、
前記ＯＬＴＰトランザクションデータをパースすることと、
前記パースされたＯＬＴＰトランザクションデータを１組のプロファイルのうちの１つ以上と比較することであって、前記１組のプロファイルのうちの前記１つ以上の各々が、ＸＭＬファイルのメタデータを含む、比較することと、
前記パースされたＯＬＴＰトランザクションデータを第１のデータキャッシュにキャッシュすることと、
前記ＯＬＴＰトランザクションデータに関連するログデータを受信することと、
前記ログデータを第２のデータキャッシュにキャッシュすることと、
前記第１のデータキャッシュにキャッシュされている前記パースされたトランザクションデータを、前記第２のデータキャッシュにキャッシュされている前記ログデータと相関させることと、を含む、方法。
【請求項２】
検証エラーを判定することと、
前記検証エラーに関係する警告を生成することと、をさらに含む、
請求項１に記載の方法。
【請求項３】
警告を生成することは、前記検証エラーを含む、少なくとも１つのレポートを生成することを含む、請求項２に記載の方法。
【請求項４】
前記少なくとも１つのレポートは、詳細レポートを含む、請求項３に記載の方法。
【請求項５】
前記第１のデータベースは、ＳＲＳレジストリデータベースを含む、請求項１に記載の方法。
【請求項６】
前記ＯＬＴＰトランザクションデータは、ドメイン名を追加すること、ドメイン名を削除すること、またはドメイン名を更新することのうちの少なくとも１つに関連するトランザクションデータを含む、請求項１に記載の方法。
【請求項７】
前記１組のプロファイルは、ドメイン名を追加すること、ドメイン名を削除すること、またはドメイン名を更新することのうちの少なくとも１つのためのプロファイルを含む、請求項６に記載の方法。
【請求項８】
前記ＯＬＴＰトランザクションデータは、ドメインネームサーバを追加すること、ドメインネームサーバを削除すること、またはドメインネームサーバを変更することのうちの少なくとも１つに関連するトランザクションデータを含む、請求項１に記載の方法。
【請求項９】
前記１組のプロファイルは、ドメインネームサーバを追加すること、ドメインネームサーバを削除すること、またはドメインネームサーバを変更することのうちの少なくとも１つのためのプロファイルを含む、請求項８に記載の方法。
【請求項１０】
トランザクションデータを検証するための方法であって、
第１のデータベースから前記トランザクションデータを受信することと、
前記トランザクションデータをパースすることと、
前記パースされたトランザクションデータを１組のプロファイルのうちの１つ以上と比較することと、
前記トランザクションデータに関連するログデータを受信することと、
前記パースされたトランザクションデータを前記ログデータと相関させることと、を含む、方法。
【請求項１１】
前記トランザクションデータは、オンライントランザクション処理データを含む、請求項１０に記載の方法。
【請求項１２】
前記１組のプロファイルのうちの各々が、メタデータを含む、請求項１０に記載の方法。
【請求項１３】
前記メタデータは、ＸＭＬファイルの中に提供される、請求項１２に記載の方法。
【請求項１４】
前記パースされたトランザクションデータを前記ログデータと相関させる前に、前記パースされたトランザクションデータをキャッシュすることをさらに含む、請求項１０に記載の方法。
【請求項１５】
前記パースされたトランザクションデータを前記ログデータと相関させる前に、前記ログデータをキャッシュすることをさらに含む、請求項１０に記載の方法。
【請求項１６】
検証エラーを判定することをさらに含む、請求項１０に記載の方法。
【請求項１７】
前記検証エラーに基づいて少なくとも１つのレポートを提供することをさらに含む、請求項１６に記載の方法。
【請求項１８】
トランザクションログデータベースに記憶されたトランザクションログファイルを有するＳＲＳレジストリデータベースに関連するトランザクションデータを検証するためのシステムであって、
前記ＳＲＳレジストリデータベースからＯＬＴＰトランザクションデータを受信し、前記ＯＬＴＰトランザクションデータをパースするように動作可能なデータベースリーダと、
前記データベースリーダに結合され、前記パースされたＯＬＴＰトランザクションデータを１組のプロファイルのうちの１つ以上と比較するように動作可能なデータベースデータバリデータと、
前記トランザクションログデータベースからトランザクションログファイルを受信するように動作可能なトランザクションログファイルリーダと、
前記データベースデータバリデータおよび前記トランザクションログファイルリーダに結合され、前記パースされたトランザクションデータを前記トランザクションログファイルと相関させるように動作可能なデータコリレータと、を備える、システム。
【請求項１９】
前記１組のプロファイルのうちの前記１つ以上の各々が、ＸＭＬファイルの中のメタデータを含む、請求項１８に記載のシステム。
【請求項２０】
前記データベースデータバリデータに結合される第１のデータキャッシュをさらに含む、請求項１８に記載のシステム。
【請求項２１】
前記トランザクションログファイルリーダに結合される第２のデータキャッシュをさらに含む、請求項１８に記載のシステム。
【請求項２２】
前記データコリレータに結合されるレポートジェネレータをさらに含む、請求項１８に記載のシステム。
【請求項２３】
トランザクションデータを検証するようにデータプロセッサを制御するための複数の命令を記憶するコンピュータ可読媒体であって、前記複数の命令は、
前記データプロセッサに、第１のデータベースから前記トランザクションデータを受信させる命令と、
前記データプロセッサに、前記トランザクションデータをパースさせる命令と、
前記データプロセッサに、前記パースされたトランザクションデータを１組のプロファイルのうちの１つ以上と比較させる命令と、
前記データプロセッサに、前記トランザクションデータに関連するログデータを受信させる命令と、
前記データプロセッサに、前記パースされたトランザクションデータを前記ログデータと相関させる命令と、を含む、コンピュータ可読媒体。
【請求項２４】
前記トランザクションデータは、オンライントランザクション処理データを含む、請求項２３に記載のコンピュータ可読媒体。
【請求項２５】
前記１組のプロファイルのうちの各々が、メタデータを含む、請求項２３に記載のコンピュータ可読媒体。
【請求項２６】
前記メタデータは、ＸＭＬファイルの中に提供される、請求項２５に記載のコンピュータ可読媒体。
【請求項２７】
前記パースされたトランザクションデータを前記ログデータと相関させる前に、前記データプロセッサに、前記パースされたトランザクションデータをキャッシュさせる命令をさらに含む、請求項２３に記載のコンピュータ可読媒体。
【請求項２８】
前記パースされたトランザクションデータを前記ログデータと相関させる前に、前記データプロセッサに、前記ログデータをキャッシュさせる命令をさらに含む、請求項２３に記載のコンピュータ可読媒体。
【請求項２９】
前記データプロセッサに、検証エラーを判定させる命令をさらに含む、請求項２３に記載のコンピュータ可読媒体。
【請求項３０】
前記データプロセッサに、前記検証エラーに基づいて少なくとも１つのレポートを提供させる命令をさらに含む、請求項２９に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース操作からのトランザクションデータを監査するための方法およびシステムに関する。
【背景技術】
【０００２】
インターネットは、多様な形態およびレベルの通信をサポートするますます国際的なコンピュータのネットワークとなっている。例えば、ワールドワイドウェブ（ＷＷＷ）上では、情報を、ウェブサイトとして一般的に知られる世界共通で使用可能なページ上に提示することができる。インターネットはまた、電子メールおよび／またはインターネット掲示板サービスを介して、エンドユーザ間の１対１の通信をサポートする。しかしながら、インターネット上での通信のあらゆる形態の共通項は、接続されるコンピュータを特定するためにドメイン名を使用することである。インターネットプロトコル（ＩＰ）番号と呼ばれるドメイン名は、実際には、小数点によって区切られる数字の一意の組み合わせである。
ＩＰ番号は、インターネットユーザが記憶または使用するには面倒かつ難解であり得るため、ＩＰ付番システムは、より使いやすいドメイン名システムと置き換えられてきた。このシステムにより、インターネットアドレスが、割り当てられるＩＰ番号と直接相関する英数字表示またはドメイン名を割り当てられることが可能になる。ドメインネームサーバとして知られる特殊なコンピュータが、ドメイン名をそれらのそれぞれのＩＰ番号に連結する表を維持する。
【０００３】
ドメイン名の構造は、ピリオド（ドットと呼ばれる）によって区切られ、ドメインレベルと呼ばれる３つ以上の部分から構成される。インターネットゾーン表示、「．ｃｏｍ」、または「．ｇｏｖ」、「．ｕｋ」等によって参照される、トップレベルドメイン（ＴＬＤ）レベルが、ドットの右側に見出される。特定の国を表すＴＬＤは、国別コードＴＬＤ、またはｃｃＴＬＤと呼ばれる。一般的にドメイン名と呼ばれる、セカンドレベルドメイン（ＳＬＤ）またはサードレベルドメインは、ドットのすぐ左側に位置する文字（文字、数字、およびハイフンを含む）から構成される。
【０００４】
ドメイン名アドレスシステムが適切に動作するためには、特定のＴＬＤ内の各ドメイン名は、別のドメインからたとえ１文字の違いであっても、一意でなければならない。重複する「ドメイン名」が割り当てられることを防止するために、一般的にはレジストリと呼ばれる単一の機関が、各特定のＴＬＤのドメイン名全ての完全なデータベースを維持することに最終的な責任を負う。このデータベースは、レジストリデータベースと呼ばれる。大部分のジェネリック（例えば、．ｃｏｍ、．ｎｅｔ、．ｏｒｇ）ドメイン名登録では、登録過程にはほとんど、または全く人間が介在しない。レジストリによって維持されるレジストリデータベースは、より容易に記憶されるドメイン名とその対応するＩＰ番号（全てのＩＰ番号を割り当てることが課せられた国際機関から受信される）との間に割り当てられた関係を電子的に記録し、全てのドメイン名のマスタデータベースに記録するために、この情報をＴＬＤレジストリに報告する。登録機関はまた、各登録者との登録合意（契約）を締結し、重要な登録者の連絡および請求情報を記録し、保持する。
【０００５】
インターネット通信においてドメイン名が果たす重要な役割から、インターネットの急速な成長の継続には、容易、迅速、安全、確実なドメイン名の登録および保守が必要である。このため、当技術分野において、レジストリデータベースに関連するトランザクションの監査および検証に関する方法およびシステムの向上に対する必要が存在する。
【発明の概要】
【課題を解決するための手段】
【０００６】
本発明は、概して、データベースシステムに関する。より具体的には、本発明は、レジストリデータベースで実施されるトランザクションを監査するための方法およびシステムに関する。例に過ぎないが、本発明は、レジストリ操作を記述するプロファイルを使用してトランザクションデータを検証し、検証されたトランザクションデータをトランザクションログファイルと比較するシステムに適用されている。本方法および技法は、データの整合性を検証するために、他の高価値データベースシステムに適用することができる。
【０００７】
本発明の実施形態に従い、ＳＲＳレジストリトランザクションデータを検証するための方法が提供される。本方法は、第１のデータベースからＯＬＴＰトランザクションデータを受信することと、ＯＬＴＰトランザクションデータをパースすることと、パースされたＯＬＴＰトランザクションデータを１組のプロファイルのうちの１つ以上と比較することと、を含む。１組のプロファイルのうちの１つ以上の各々が、ＸＭＬファイルの中のメタデータを含む。本方法はまた、パースされたＯＬＴＰトランザクションデータを第１のデータキャッシュにキャッシュすることと、ＯＬＴＰトランザクションデータに関連するログデータを受信することと、を含む。本方法はさらに、ログデータを第２のデータキャッシュにキャッシュすることと、第１のデータキャッチュにキャッシュされているパースされたトランザクションデータを第２のデータキャッシュにキャッシュされているログデータと相関させることと、を含む。
【０００８】
本発明の別の実施形態に従い、トランザクションデータを検証するための方法が提供される。本方法は、第１のデータベースからトランザクションデータを受信することと、トランザクションデータをパースすることと、を含む。本方法はまた、パースされたトランザクションデータを１組のプロファイルのうちの１つ以上と比較することと、トランザクションデータに関連するログデータを受信することと、を含む。本方法はさらに、パースされたトランザクションデータをログデータと相関させることを含む。
【０００９】
本発明の特定の実施形態に従い、トランザクションログデータベースに記憶されたトランザクションログファイルを用いて、ＳＲＳレジストリデータベースに関連するトランザクションデータを検証するためのシステムが提供される。システムは、ＳＲＳレジストリデータベースからＯＬＴＰトランザクションデータを受信し、ＯＬＴＰトランザクションデータをパースするように動作可能なデータベースリーダと、データベースリーダに結合され、パースされたＯＬＴＰトランザクションデータを１組のプロファイルのうちの１つ以上と比較するように動作可能なデータベースデータバリデータとを含む。システムはまた、トランザクションログデータベースからトランザクションログファイルを受信するように動作可能なトランザクションログファイルリーダと、データベースデータバリデータおよびトランザクションログファイルリーダに結合され、パースされたトランザクションデータをトランザクションログファイルと相関させるように動作可能なデータコリレータとを含む。
【００１０】
本発明の別の特定の実施形態に従い、トランザクションデータを検証するようにデータプロセッサを制御するための複数の命令を記憶するコンピュータ可読媒体が提供される。複数の命令は、データプロセッサに、第１のデータベースからトランザクションデータを受信させる命令と、データプロセッサに、トランザクションデータをパースさせる命令とを含む。複数の命令はまた、データプロセッサに、パースされたトランザクションデータを１組のプロファイルのうちの１つ以上と比較させる命令と、データプロセッサに、トランザクションデータに関連するログデータを受信させる命令とを含む。複数の命令はさらに、データプロセッサに、パースされたトランザクションデータをログデータと相関させる命令を含む。
【００１１】
本発明によって、従来の技術に優る多数の利点が達成される。例えば、本発明の実施形態は、既知のアプリケーション外でＳＲＳレジストリデータベースに対して何らかの変更が実施されると、運用担当者に警告を提供する。このように、本明細書に説明される実施形態によって、レジストリデータベースに関連する悪意のある行為に関する情報が提供される。さらに、本発明の実施形態は、レジストリデータの検証がデータの整合性を強化するので、レジストリデータベース運用者に競合他社に対する競争上の優位性を提供する。本明細書に説明される方法およびシステムを利用することによって、システム運用者は、侵入者および悪意のある行為をより容易かつ迅速に検出することができ、それにより、レジストリデータベースに対する潜在的な損害を限定する。さらに、本発明の実施形態を利用して、運用担当者は、データベース内のデータを操作するあらゆるトランザクションの発生源を特定することが可能であり、したがって、セキュリティオーディタは、アプリケーションとデータベースとの間に信頼の連鎖を確立する。加えて、本発明の実施形態は、データベースにコミットされるあらゆるトランザクションが既知の情報源からであることを確実にする。本発明のこれらおよび他の実施形態は、その利点および特徴の多くとともに、以下の記載および添付の図面を参照して詳細に説明する。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施形態に従い、トランザクションデータを検証するためのシステムの簡略化したブロック図である。
【図２】本発明の実施形態に従い、トランザクションデータを検証するためのハイレベル実行フローチャートである。
【図３】本発明の実施形態に従い、トランザクションデータを検証するための方法を示す簡易フローチャートである。
【図４】本発明の実施形態に従い、トランザクションデータ検証中の実行フローを示す簡易図である。
【図５】本発明の実施形態に従い、レジストリ操作のためのメタデータを示す簡易図である。
【図６】本発明の実施形態に従い、ＯｐｅｒａｔｉｏｎＩｎｆｏのメタデータを示す簡易図である。
【図７】本発明の実施形態に従い、ＤａｔａｂａｓｅＩｎｆｏのメタデータを示す簡易図である。
【図８】本発明の実施形態に従い、検証基準を示す簡易図である。
【図９】本発明の実施形態に従い、トランザクションログ検証を示す簡易図である。
【図１０】本発明の実施形態に従い、データベース検証規則を示す簡易図である。
【図１１】本発明の実施形態に従い、参照検証を示す簡易図である。
【図１２】本発明の実施形態に従い、ルックアップ検証を示す簡易図である。
【図１３】本発明の実施形態に従い、正規表現検証を示す簡易図である。
【図１４】本発明の実施形態に従い、条件付き検証を示す簡易図である。
【図１５】本発明の実施形態に従い、表内存在検証を示す簡易図である。
【図１６】本発明の実施形態に従い、日付検証を示す簡易図である。
【図１７】本発明の実施形態に従い、カスタム検証を示す簡易図である。
【図１８】本発明の実施形態に従い、ドメイン追加操作のプロセスフローを示す簡略化されたフローチャートである。
【図１９】本発明の実施形態に従い、構成情報を示す画面図である。
【図２０】本発明の実施形態に従い、セキュリティオーディタによる結果を報告するためのシステムの簡略化されたブロック図である。
【発明を実施するための形態】
【００１３】
図１は、本発明の実施形態に従い、トランザクションデータを検証するためのシステムの簡略化されたブロック図である。本明細書に説明されるシステムおよび方法は、データに対する全ての変更が既知の情報源からであること、顧客とデータとの間の保管の連鎖を検証し、監査できること、顧客のトランザクションの目的がデータベース内で正しく持続されたこと、業務規則が適切に徹底されていることを確実にし、データベースに関する悪意のある行動を迅速に特定し、システム運用者に警告するために、データベース（例えば、ＳＲＳレジストリデータベース）を監査する。
【００１４】
システムは、オンライントランザクション処理（ＯＬＴＰ）データを含む、レジストリデータベース１１０を含む。本発明の実施形態は、他のデータベースに適用可能であるが、本明細書において、代表的なデータ源としてＯＬＴＰデータを説明する。データベースリーダ１１２は、データベース１１０からデータを引き出し、データベースバリデータ１２０へデータを送信するために利用される。データベースリーダ１１２は典型的に、例えば、ＯＬＴＰデータ等のデータをパースする。データベースバリデータ１２０は、プロファイルデータベース１２２からプロファイルデータを受信し、データベースリーダからのデータを、プロファイルデータベースからの１つ以上のマッチングプロファイルに対して検証する。例えば、ドメイン追加操作に関係するデータがＯＬＴＰデータの中にある場合、データベースバリデータ１２０は、正しいデータベース操作が、ドメイン追加操作の一部として実施されたかどうかを判定するために、このＯＬＴＰデータをドメイン追加のプロファイルと比較することができる。プロファイルを使用してデータを検証することに関する追加の検討は、本明細書全体で提供され、以下に具体的に提供する。検証後、データを、データキャッシュ１３０にキャッシュすることができる。
【００１５】
システムはまた、トランザクションログファイル１５０からデータを受信する、トランザクションログファイルリーダ１５２を含む。トランザクションログデータは、トランザクションログデータキャッシュ１６０にキャッシュするか、データコリレータ１４０へ直接渡すことができる。図１に示されるように、データコリレータ１４０は、データベースバリデータ１２０、トランザクションログファイルリーダ１５２、ならびに／またはデータキャッシュ１３０およびトランザクションログデータキャッシュ１６０から入力を受信する。データコリレータ１４０は、データベースバリデータからの検証されたデータおよびトランザクションログデータを比較して、これらの２つのデータ源の間に整合性が存在するかどうかを判定する。これらのデータ源の相関に関する追加の検討は、本明細書全体で提供され、以下に具体的に提供する。任意選択のレポートジェネレータ１７０は、データ相関プロセスの結果を受信し、システム運用者等にレポートを提供するように適合される。
【００１６】
図１に図示されるデータベースリーダ１１２、データベースバリデータ１２０、トランザクションログファイルリーダ１５２、データコリレータ１４０、および任意選択のレポートジェネレータ１７０を含む、本明細書においてシステム、プロセッサ、エンジン等他の名称で称される多様な機能ブロックが、命令およびデータを実行するように構成される１つ以上の汎用プロセッサの中に含まれる場合があることが理解される。このため、図１に図示される多様なプロセスが、多様なタスクに適合され、プロセッサによって実行されるように適合される命令を記憶する１つ以上のメモリに結合されるプロセッサによって実施することができる。プロセッサは、Ｃａｌｉｆｏｒｎｉａ州Ｓａｎｔａ  ＣｌａｒａのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎによって製造されるＰｅｎｔｉｕｍ（登録商標）プロセッサ等、命令およびデータを実行するように構成される汎用マイクロプロセッサとすることができる。また、本発明に従って方法を実施するための命令の少なくとも一部をソフトウェア、ファームウェア、および／またはハードウェアに具現化する、特定用途集積回路（ＡＳＩＣ）とすることもできる。例えば、そのようなプロセッサとして、専用回路、ＡＳＩＣ、組み合わせ論理、他のプログラマブルプロセッサ、これらの組み合わせ等が挙げられる。メモリは、ＲＡＭ、フラッシュメモリ、ハードディスク、ＣＤ等、デジタル情報を記憶することが可能な任意のデバイスとすることができる。プロセッサは、例えば、ＯＬＴＰデータの情報源、プロファイルデータ、トランザクションログファイルデータ、データキャッシュ１３０、トランザクションログデータキャッシュ１６０、または他の関連情報を記憶することができる他のデータベース等、多様なデータベースに結合することができる。このように、本明細書に提供されるプロセッサは広義に定義され、データ検証、相関等を実施するプロセッサを含むが、これらに限定されない。したがって、これらのプロセスは、本発明の範囲内に含まれる方法の少なくとも一部を実施するための複数の命令を記憶する、コンピュータ可読媒体を使用して実装することができる。
【００１７】
本明細書全体により完全に説明されるように、本発明の実施形態は、データベーストランザクションを既知のトランザクションプロファイルと比較する。アプリケーションは、有限のコードパスを有するため、これらを、トランザクションが承認されたかどうかを判定するために、データベーストランザクションに対して比較することができる。加えて、データベーストランザクションをアプリケーションサーバログと相関させることによって、システム間に信頼の連鎖が作成され、それによってシステムの信頼性を向上する。
【００１８】
図２は、本発明の実施形態に従う、トランザクションデータを検証するためのハイレベル実行フローチャートである。トランザクションデータは、ＯＬＴＰデータストリーム２１０によって表されるデータベースに記憶される。図２に図示される実施形態において、トランザクションデータは、オンライントランザクション処理（ＯＬＴＰ）データであるが、本発明はこの特定のデータセットに限定されない。データベースリーダ２３０は、トランザクションデータストリームからトランザクション（例えば、ＯＬＴＰトランザクション）を読み出し、次いで、データをパースする。データベースリーダの制御は、より大型のセキュリティオーディタシステムの一部を表す、セキュリティオーディタ制御２２０によって提供される。本明細書において、データベースリーダ２３０、セキュリティオーディタ制御２２０、トランザクションログファイルリーダ２６０、データベースバリデータ２４０、プロファイルリスト２５０、データコリレータ２７０、およびレポートジェネレータ２８０の構成要素を含むセキュリティオーディタが参照され、本明細書全体でより完全に説明され、以下に具体的に説明する。したがって、セキュリティオーディタへの参照は、本明細書に説明される方法を実施するように適合されるシステムへの参照として理解されるべきである。
【００１９】
トランザクションデータがパースされた後、パースされたトランザクションデータは、プロファイルリスト２５０に記憶された既存のプロファイルとの比較によって検証される。ＳＲＳレジストリデータベースにおいて、各アプリケーションは、コード自体に基づいて有限のコードパスを有する。このため、アプリケーション全体で発生する各トランザクションは、既知のプロファイルに一致するはずである。プロファイルは、監査可能なレジストリ操作を記述するメタデータ（ＸＭＬファイル内に表現）である。以下により詳細に検討するように、システムは、１つのレジストリ操作あたり１つのプロファイルを提供する。プロファイルを使用してＳＲＳレジストリデータベースへの全ての成功した書き込み可能操作を監査することによって、データベースの中のトランザクションは、承認されたと検証することができる。例に過ぎないが、プロファイルは、レジストリ操作（例えば、特定の表への挿入（ＩＮＳＥＲＴ））中に実施された操作、レジストリ操作中に適用される業務論理規則等に関係するメタデータを含有する場合がある。
【００２０】
本発明の実施形態は、各トランザクションがプロファイルに一致するかどうかを判定するために、データベースがマイニングされ、トランザクションが全ての既知のプロファイルと比較される、方法およびシステムを提供する。トランザクションが既知のプロファイルのうちの１つに一致しない場合、これは、異常が発生したという兆候を提供する。データを検証することによって、セキュリティオーディタは、顧客の意図がデータベースの中で正しく持続され、全ての業務規則が適切に徹底されていることを確実にする。検証後、検証されたトランザクションデータは、データベースデータキャッシュと呼ばれるキャッシュに記憶することができる。
【００２１】
トランザクションデータの検証に加えて、セキュリティオーディタは、アプリケーション側で作成されたトランザクションログを利用し、これらのトランザクションログを検証されたデータと相関させる。トランザクションログファイルリーダ２６０は、トランザクションログファイルデータベース２５５からトランザクションログを引き出す。トランザクションログファイルは、アプリケーションサーバによって作成される。トランザクションログファイルは、パースされ、任意選択のステップにおいて、トランザクションデータログデータキャッシュにキャッシュされる。データコリレータ２７０は、ＳＲＳレジストリデータベースに対して行われた変更が、既知の情報源からであったことを確実にするように、検証されたトランザクションデータを対応するトランザクションログデータと相関させるために使用される。異常の例として、トランザクションデータ（検証後）が、対応するトランザクションログに一致しない場合、それは、データベースに対する変更が既知の情報源からではなかったことの兆候を提供する。したがって、警告を発することができる。
【００２２】
レポートジェネレータ２８０は、データベースデータバリデータ２４０ならびにデータコリレータ２７０から情報を受信するために使用される。したがって、レポートは、データ検証エラー（すなわち、トランザクションデータが既知のプロファイルに一致していない）または相関エラーに基づいて生成することができる。レポートは、検証に失敗したトランザクションのリスト、個別の検証エラーの件数、監査されたトランザクションの合計数、トランザクションを検証するためにかかった時間等の情報を含むことができる。アプリケーションサーバ上のトランザクションログ内の識別子は、データベースのトランザクションと比較され、これらの要素が意図されたように一致することを確実にする。このように、トランザクションログ内の顧客の意図は、ＯＬＴＰデータストリーム２１０によって表現される、データベースに適切に持続される。
【００２３】
本発明の実施形態を利用して、レジストリデータベース内のデータを操作する全てのトランザクションは、既知の情報源からであり、既存のアプリケーションコードパスに関連する既知のプロファイルに一致することが検証される。トランザクションは、既知のアプリケーション論理フローがトランザクションを実施する際に利用されたかどうかを判定するために、データベースからのトランザクションデータをマイニングし、トランザクションをトランザクションに関連するプロファイルと比較することによって検証される。プロセスフローのプロファイルを使用してデータが検証されると、次いで、アプリケーショントランザクションログと比較される。これらの比較は、従来のシステムを使用して得ることができないレベルのデータの整合性を提供する。検証プロセスに基づいて、本明細書に説明される方法およびシステムは、悪意を示唆し得る、データがアプリケーション外で更新されたかどうかについて運用担当者に警告するという追加の利点を提供する。
【００２４】
本明細書に説明される方法およびシステムの例示的な使用事例は、ハッカーがレジストリデータベースへのアクセスを取得し、承認されたアプリケーション外で１日あたり所定の数のドメインを徐々に削除する場合である。本明細書に説明されるセキュリティオーディタは、変更がドメインの削除のために確立されたプロファイルに適合せず、既知の情報源からではないため、未承認の削除を検知することになる。変更の未承認の特性を特定すると、警告を発することができ、それによって、システム運用者が修正措置をとることが可能になる。
【００２５】
図３は、本発明の実施形態に従い、トランザクションデータを検証するための方法を示す簡単なフローチャートである。方法３００は、第１のデータベースからＯＬＴＰトランザクションデータを受信することを含む（３１０）。第１のデータベースは、ＳＲＳレジストリデータベースを含む場合がある。トランザクションデータは、ＣＡ州、Ｒｅｄｗｏｏｄ  ＳｈｏｒｅｓのＯｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＬｏｇＭｉｎｅｒ（商標）監査ツール、またはＣＡ州、Ｓａｎ  ＦｒａｎｃｉｓｃｏのＧｏｌｄｅｎＧａｔｅ  Ｓｏｆｔｗａｒｅから入手可能なＧｏｌｄｅｎＧａｔｅトランザクションデータ統合ソフトウェア等のデータベースリーダによって読み出すことができる。方法はまた、ＯＬＴＰトランザクションデータをパースすることも含む（３１２）。ＯＬＴＰトランザクションデータは、ドメイン名を追加すること、ドメイン名を削除すること、ドメイン名を更新すること等を含む、いくつかのＳＲＳデータベース操作に関係することができる。他の実施形態において、ＯＬＴＰトランザクションデータは、ドメインネームサーバを追加すること、ドメインネームサーバを削除すること、またはドメインネームサーバを変更することに関係してもよい。
【００２６】
パースされたＯＬＴＰトランザクションデータは１組のプロファイルのうちの１つ以上と比較される（３１４）。１組のプロファイルのうちの１つ以上の各々が、ＸＭＬファイルのメタデータを含む。受信されるトランザクションデータのタイプに応じて、プロファイルは、ドメイン名を追加すること、ドメイン名を削除すること、ドメイン名を更新すること等の操作に関係するプロファイルを含むことができる。他の実施形態において、プロファイルは、ドメインネームサーバを追加すること、ドメインネームサーバを削除すること、またはドメインネームサーバを変更することに関係することができる。
【００２７】
一実施形態において、方法は、パースされたＯＬＴＰトランザクションデータを第１のデータキャッシュにキャッシュすること（３１６）を任意選択的に含むが、これは本発明によって要求されない。方法はさらに、ＯＬＴＰトランザクションデータに関連するログデータを受信すること（３１８）と、パースされたＯＬＴＰトランザクションデータをログデータと相関させること（３２０）と、を含む。一実施形態において、ログデータは、第２のデータキャッシュにキャッシュすることができるが、これは本発明によって要求されない。キャッシュを利用する実施形態において、相関プロセスは、キャッシュされているパースされたデータおよびキャッシュされているログデータを利用することができる。
【００２８】
方法３００はまた、検証エラーを判定すること（３２２）と、検証エラーに関する警告を生成すること（３２４）と、を任意選択的に含むことができる。警告の例として、システム運用者または他者によって使用されるために、１つ以上のレポート（例えば、詳細レポートおよび要約レポート）を生成することができる。
【００２９】
図３に図示される特定のステップは、本発明の実施形態に従い、トランザクションデータを検証する特定の方法を提供することを理解されたい。代替の実施形態に従い、ステップを他のシーケンスで実施することもできる。例えば、本発明の代替実施形態は、上記に示したステップを異なる順序で実施する場合がある。さらに、図３に図示される個別のステップは、個別のステップに適した多様なシーケンスで実施される場合がある、複数のサブステップを含む場合がある。さらにまた、特定のアプリケーションに応じて、さらなるステップが追加または削除される場合がある。当業者は、多数の変形、変更、および代替を認識するであろう。
【００３０】
図４は、本発明の実施形態に従い、トランザクションデータ検証中の実行フローを示す簡単な図である。セキュリティオーディタ４００は、以下に説明されるいくつかの構成要素を含むように図示される。
【００３１】
本発明の実施形態に従い、セキュリティオーディタは、ＡＰＥ（非同期プロセスエンジン）フレームワークによってインスタンス化される。ＡＰＥフレームワークは、トランザクションログファイル（例えば、Ｇｏｌｄｅｎ  Ｇａｔｅのトレイルファイル）からＯＬＴＰトランザクションを読み出すことと、ダウンストリームアプリケーションによる消費のためにメモリキューの中でそれらを使用可能にすることの役割がある。セキュリティオーディタは、１つのそのようなダウンストリームアプリケーションである。セキュリティオーディタは、構成ファイルおよびトランザクションが監査される予定の開始時間でインスタンス化される。本明細書に説明される実装において、スタートアップ時にセキュリティオーディタは、次の構成要素をインスタンス化し、開始する。
・処理されるトランザクション数等の統計を表示するために、多様なｍｂｅａｎを登録するためのＭＢｅａｎサーバ。
・ＳＱＬキャッシュとも呼ばれる、有効なＳＱＬサマリキャッシュ４３０、およびトランザクションログサマリキャッシュ４２８を初期化する。有効なＳＱＬサマリキャッシュ４３０は、データストリームからメモリへロードされたＳＱＬ文のリストである。このキャッシュには、データベースで発生した挿入、更新、および削除が含まれ、したがって、ストリームのためのデータストアを提供する。
・例外マネージャ４５８を初期化する。
・監査対象のレジストリ操作のプロファイルを読み出し、パースし、キャッシュするためのプロファイルマネージャ４４０。プロファイルは、ＯＰＥＲＡＴＩＯＮＩＤおよび操作に関連する概念クラス名を使用してキャッシュされる。
・ＤＢＰｒｏｃｅｓｓｏｒ４０２は、ＡＰＥフレームワークからＯＬＴＰトランザクションを呼び出すことを開始できる状態であるように初期化される。
・トランザクションログファイルのための指定されたディレクトリをポールするように、トランザクションログファイルポーラ４２０を開始する。
・サマリコリレータマネージャ４５０は、それらのそれぞれのキャッシュからのＳＱＬおよびトランザクションログサマリを相関することを開始できる状態であるように初期化される。
・全てのトランザクションが監査された後、レポートを生成するように準備されるセキュリティオーディタレポートマネージャ４６０。セキュリティオーディタレポートマネージャ４６０は、次いで、セキュリティオーディタ詳細レポートスレッド４６６をインスタンス化し、開始する。
・セキュリティオーディタは、リセット可能な構成要素として、リセット可能ＳＡ構成要素マネージャ４７０を用いて自己を登録する。
【００３２】
以下は、セキュリティオーディタの実行ステップのハイレベルの説明である。
１．セキュリティオーディタは、トランザクションが監査されるべき開始日時で初期化される。トランザクションの監査が一時停止され、レポートが生成されるべき終了日時は、構成ファイルに指定されたレポートチャンクサイズ時間数を加えることによって計算される。この終了日時は次いで、ＤＢプロセッサスレッドおよびサマリコリレータクラスに渡される。
２．ＤＢプロセッサ構成要素４０２は、ＤＢプロセッサスレッドオブジェクト４１０のプールのスレッドを作成する。ＤＢプロセッサスレッドは、再開可能構成要素マネージャ４４２によって、ＡＰＥフレームワークからのＯＬＴＰトランザクションを呼び出すことを開始するように通知されることを待機している待機状態にある。
３．サマリコリレータマネージャ４５０構成要素は、サマリコリレータオブジェクトのプールのスレッドを作成する。サマリコリレータスレッドは、再開可能構成要素マネージャ４４２によって、ＳＱＬサマリをトランザクションログサマリと相関することを開始するように通知されることを待機している待機状態にある。
４．トランスログファイルポーラ４２０は、トランザクションログファイルが出現していないか、入力トランザクションログファイルフォルダをポーリングする。
５．トランザクションログファイルが、提供されたログコピー（ｌｏｇｃｏｐｙ．ｐｌ）Ｐｅｒｌスクリプトを使用するクローンジョブ（すなわち、スケジュールされたタスク）を介して、入力トランザクションログファイルフォルダにコピーされると、以下の一連のイベントが発生する。
ｏトランスログファイルポーラ４２０は、ファイルをトランスログファイルディスパッチャ４２４に送る。
ｏトランスログファイルディスパッチャ４２４は、セキュリティオーディタの中の開始日時を使用して日付別にトランザクションログファイルをソートし、グループ化する。
ｏ次いで、１日分のトランザクションログファイルがトランスログファイルプロセッサ４２６に渡され、次いで、これが、トランスログファイルプロセッサスレッドオブジェクトの数に均等にトランザクションログファイルを分散する。
■各トランスログファイルプロセッサスレッドは次いで、割り当てられたトランザクションログファイルの各々に対してトランスログファイルリーダをインスタンス化する。
■次いで、各トランスログファイルプロセッサスレッドは、トランザクションログファイルのチャンクを読み出す１組のトランスログファイルリーダオブジェクト全体をラウンドロビン方式で処理する。
■トランザクションログエントリは、トランスログサマリオブジェクトの中でパースされ、トランスログサマリキャッシュ４２８にキャッシュされる。
ｏトランスログファイルディスパッチャ４２４は次いで、他の待機している構成要素に監査を再開するように通知するように、再開可能構成要素マネージャ４４２に通知する。
ｏトランスログファイルディスパッチャ４２４は次いで、サマリコリレータマネージャ４５０によって、翌日のトランザクションログファイルの処理を開始するように通知されることを待機している待機状態になる。
６．再開可能構成要素マネージャ４４２は次いで、監査を再開するように、ＤＢプロセッサスレッドおよびサマリコリレータスレッドに通知する。
７．ＤＢプロセッサスレッドは、ＡＰＥフレームワークからＯＬＴＰトランザクションを呼び出しすることを開始する。レジストリ操作のための関連プロファイルの中の検証規則に合格したトランザクションは次いで、ＳＱＬサマリオブジェクトに変換され、ＳＱＬサマリキャッシュ４３０にキャッシュされる。
８．サマリコリレータスレッドは、ＳＱＬサマリキャッシュ４３０からＳＱＬサマリ、およびトランスログサマリキャッシュ４２８から対応するトランスログサマリを呼び出すことを開始する。トランザクションログ検証規則は、両方のサマリに適用される。任意の検証エラーは、ログに記録される。
９．ＤＢプロセッサスレッド４１０が、ＡＰＥフレームワークから、作成タイムスタンプがセキュリティオーディタに指定された終了日時よりも大きいＯＬＴＰトランザクションを呼び出すと、スレッドは、待機状態に入る。このスレッドは、次の日の分のトランザクションログファイルが受信されると、再開するように通知される。
１０．同様に、サマリコリレータスレッドが、作成タイムスタンプがセキュリティオーディタに指定された終了日時よりも大きいＳＱＬサマリを呼び出すと、スレッドは、待機状態に入る。このスレッドは、翌日分のトランザクションログファイルが受信されると、アクティビティを再開するように通知される。
１１．サマリコリレータマネージャ４５０は次いで、レポートを生成するように、セキュリティオーディタレポートマネージャ４６０に通知する。
１２．セキュリティオーディタレポートマネージャ４６０は、トランザクションログおよびＳＱＬサマリキャッシュをフラッシュし、エラーのタイプおよび件数のハイレベルのレポートを与える要約レポート４６８および詳細エラーレポート４６４の２つのレポートを生成する。特定のアプリケーションに応じて、他のレポートを生成することができる。
１３．セキュリティオーディタレポートマネージャ４６０は次いで、翌日のトランザクションログファイルを処理する準備ができている状態であるように、リセット可能な構成要素に対して、ｒｅｓｅｔ（）を指示するように、リセット可能ＳＡ構成要素マネージャ４７０に通知する。
１４．サマリコリレータマネージャ４５０は次いで、進行することができ、翌日のトランザクションログファイルを処理することを開始できることをトランスログファイルディスパッチャ４２４に通知する。
【００３３】
図４に図示される特定のステップは、本発明の実施形態に従い、セキュリティマネージャを操作する特定の方法を提供することを理解されたい。代替の実施形態に従い、ステップの他のシーケンスを実施することもできる。例えば、本発明の代替実施形態は、上記に示したステップを異なる順序で実施する場合がある。さらに、図４に図示される個別のステップは、個別のステップに適した多様なシーケンスで実施される場合がある、複数のサブステップを含む場合がある。さらにまた、特定のアプリケーションに応じて、さらなるステップが追加または削除される場合がある。当業者は、多数の変形、変更、および代替を認識するであろう。
【００３４】
本発明の実施形態に従い、セキュリティオーディタは、異なる構成要素を追加および削除できることを確実にするために、サービスプロバイダインターフェース（ＳＰＩ）モデルを利用する。例えば、１つのデータベースサービスアプリケーションから移動する（例えば、ＣＡ州Ｒｅｄｗｏｏｄ  ＳｈｏｒｅｓのＯｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎから入手可能なＬｏｇＭｉｎｅｒ（商標）監査ツールから、ＣＡ州Ｓａｎ  ＦｒａｎｃｉｓｃｏのＧｏｌｄｅｎＧａｔｅ  Ｓｏｆｔｗａｒｅから入手可能なＧｏｌｄｅｎＧａｔｅトランザクションデータ統合ソフトウェアへ）という決定が行われる場合、ＧｏｌｄｅｎＧａｔｅをパースするためのコードは、ＬｏｇＭｉｎｅｒ（商標）を使用して提供される場合と同じ情報を提供するように作成される。
【００３５】
特定の実施形態に従い、全てのプログラミングは、ＳＰＩによって公開されるインターフェースを使用して実行される。実施形態に応じて、以下の機能を提供するために、いくつかの異なるハイレベルのインターフェースを利用することができる。
・キャッシュマネージャによって実装されるインターフェース。
・ＳＱＬサマリの情報をトランザクションログサマリの情報と相関させる、Ｃｏｒｒｅｌａｔｏｒクラスのインターフェース。
・イベントを送るためのインターフェース（現在、トランザクションログファイルを送るために使用）
・セキュリティオーディタによって投げる、または発することができる、様々な種類の検証例外のサブクラスｊａｖａ．ｌａｎｇ．Ｅｘｃｅｐｔｉｏｎのクラス。
・レジストリ操作のプロファイル情報を公開するためのインターフェース。
・１単位のトランザクションログファイルを処理後、リセットすることが必要な構成要素によって実装されるインターフェース。
・１単位のトランザクションログファイルが使用可能である時、プロセスを再開することが必要な構成要素によって実装されるインターフェース。
・異なる構成要素の適切なシャットダウンを支援するためのインターフェース。
・ＳＱＬ文の中の情報を表現するためのインターフェース。
・ＳＱＬおよびトランザクションログサマリのためのインターフェース。
本発明は、これらの特定のインターフェースおよびそれらが提供する機能に限定されない。代替の実施形態において、当業者に明らかであるように、他のインターフェースが利用される。
【００３６】
非同期プロセスエンジン（ＡＰＥ）フレームワーク
【００３７】
上記のように、１つの実装は、セキュリティオーディタをＡＰＥフレームワークに統合する。ＡＰＥフレームワークは、次の２つの主な役割を有する。
・ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒＦａｃａｄｅをインスタンス化し、これによって、ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒエンジンをインスタンス化する。ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒＦａｃａｄｅは、ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒとＡＰＥフレームワークとの間の統合クラスである。ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒＦａｃａｄｅは、Ｓｐｒｉｎｇインジェクションを介してインスタンス化される場合がある。トランザクションが監査されることが必要な開始および終了日時が計算され、セキュリティオーディタに設定される。
・ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒＦａｃａｄｅを介して、ＯＬＴＰトランザクションをメモリキューの中で使用可能にする。
【００３８】
管理サーバ（ＪＭＸ）
【００３９】
セキュリティオーディタは、管理サーバをホストする。管理サーバに登録されるいくつかのＭＢｅａｎが存在し、以下のリストのＭＢｅａｎを含む場合がある。このＭＢｅａｎのリストは、例として提供されるに過ぎず、特定のアプリケーションに適切に、さらなるＭＢｅａｎを追加することができる。当業者は、多数の変形、変更、および代替を認識するであろう。
・ＥｘｃｅｐｔｉｏｎＭａｎａｇｅｒＭＢｅａｎ：検証例外の数およびタイプのカウントを提供する。
・ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒＣｏｎｆｉｇＭＢｅａｎ：構成ファイルの中の構成情報に関する詳細を提供する。
・ＳｅｃｕｒｉｔｙΑｕｄｉｔｏｒＭＢｅａｎ：セキュリティオーディタおよびその構成要素全てを順番にシャットダウンするための操作を提供する。
・ＳＱＬＳｕｍｍａｒｙＣａｃｈｅＭａｎａｇｅｒＭＢｅａｎ：キャッシュの中のＳＱＬサマリの数に関する情報を提供する。
・ＴｒａｎｓＬｏｇＳｕｍｍａｒｙＣａｃｈｅＭａｎａｇｅｒＭＢｅａｎ：キャッシュの中のトランザクションログサマリの数に関する情報を提供する。
・ＳｕｍｍａｒｙＣｏｒｒｅｌａｔｏｒＭａｎａｇｅｒＭＢｅａｎ：相関されたトランザクションの数、ならびに処理された最後のＳＱＬおよびトランザクションログサマリのタイムスタンプに関する情報を提供する。
【００４０】
プロファイルマネージャは、ＸＭＬフォーマットのプロファイルを読み出し、それらをメモリにキャッシュする、シングルトンクラスである。スタートアップ時、セキュリティオーディタは、プロファイルの場所でプロファイルマネージャを初期化する。一実装において、プロファイルは、ｊａｖａ．ｕｔｉｌ．ＴｒｅｅＭａｐにキャッシュされる。各プロファイルは、以下のキーで、メモリの中の２つのツリーマップにキャッシュされる場合がある。
・操作ＩＤ（整数）：プロファイルは、「ＩＮＳＥＲＴ  ＩＮＴＯ  ＴＲＡＮＳＡＣＴＩＯＮ」表のＳＱＬ文に指定された「ＯＰＥＲＡＴＩＯＮＩＤ」列の値に基づいて呼び出される。このモードのアクセスは、ＯＬＴＰトランザクションのデータを使用して、一致するプロファイル情報を発見するように、ＤＢプロセッサスレッドクラスによって実行される。
・概念クラス名（文字列）：プロファイルは、概念クラス名トランザクションログエントリの値に基づいて呼び出される。このモードのアクセスは、トランザクションログエントリのデータを使用して、一致するプロファイル情報を発見するように、トランスログプロセッサスレッドクラスによって実行される。
【００４１】
プロファイルの例として、レジストリ操作プロファイルは、以下のインターフェースによって表現される。
public interface RegistryOperationProfile extends Serializable {
Operationlnfo getOperationlnfo ();
DatabaseInfo getDatabaseInfo ();
Validator getValidator ();
}
【００４２】
ＳＱＬサマリキャッシュマネージャ（ＳＱＬＳｕｍｍａｒｙＣａｃｈｅＭａｎａｇｅｒ）は、ＳＱＬサマリのキャッシュである、シングルトンクラスである。ＳＱＬサマリは、ｊａｖａ．ｕｔｉｌ．ＬｉｎｋｅｄＢｌｏｃｋｉｎｇＱｕｅｕｅでキャッシュされる。ＤＢＰｒｏｃｅｓｓｏｒスレッドは、このキューに有効なＳＱＬサマリを追加する。全てのデータベース検証規則に合格していないデータベーストランザクションに関連するトランザクションＩＤは、ＨａｓｈＳｅｔにキャッシュされる。このように、対応するトランザクションログエントリの有効期限が切れると、そもそも無効なＳＱＬサマリに関連していたことがわかる。
【００４３】
ＳＱＬサマリのＳＣＮが、トランザクションログファイルの最大ＳＣＮ読み出し値からＳＣＮ閾値を差し引いたよりも小さい場合、エントリはキャッシュから削除され、ＳＱＬＳｕｍｍａｒｙＥｘｐｉｒｅｄ例外が投げられる。ＳＱＬサマリキャッシュの最大サイズは、「ｓａ．ｃｏｎｆｉｇ」構成ファイルの中のパラメータによって制御される。この値は、初期化段階の間にセキュリティオーディタによって、ＳＱＬＳｕｍｍａｒｙＣａｃｈｅＭａｎａｇｅｒに渡される。
【００４４】
トランスログサマリキャッシュマネージャ（ＴｒａｎｓＬｏｇＳｕｍｍａｒｙＣａｃｈｅＭａｎａｇｅｒ）は、トランザクションログサマリのキャッシュである、シングルトンクラスである。トランザクションログサマリは、ｊａｖａ．ｕｔｉｌ．ＬｉｎｋｅｄＨａｓｈＭａｐを拡張する、インナークラスＥｘｐｉｒｉｎｇＴｒａｎｓＳｕｍｍａｒｙＣａｃｈｅにキャッシュされる。トランスログプロセッサスレッドクラスは、有効なトランザクションログサマリをこのマップに追加する。
【００４５】
ＥｘｐｉｒｉｎｇＴｒａｎｓＳｕｍｍａｒｙＣａｃｈｅに追加されるそれぞれのトランザクションログサマリに対して、マップの中の最長時間未使用の（ＬＲＵ）エントリを用いてｒｅｍｏｖｅＥｌｄｅｓｔＥｎｔｒｙ（）メソッドが起動される。トランザクションログエントリのＳＣＮが、データベーストランザクションの最大ＳＣＮ読み出し値からＳＣＮ閾値を差し引いたよりも小さい場合、エントリはキャッシュから削除され、ＴｒａｎｓＬｏｇＳｕｍｍａｒｙＥｘｐｉｒｅｄ例外が投げられる。ＳＣＮ閾値は、「ｓａ．ｃｏｎｆｉｇ」構成ファイルの中のパラメータによって設定される。トランザクションログサマリキャッシュの最大サイズは、「ｓａ．ｃｏｎｆｉｇ」構成ファイルの中のパラメータによって制御される。この値は、初期化段階の間にセキュリティオーディタによって、トランスログサマリキャッシュマネージャに渡される。
【００４６】
例外マネージャ４５８は、図４に図示される。セキュリティオーディタで例外が投げられると必ず、基底のＳＡ例外クラスのコンストラクタは、次の２つの機能を実施する。
・提供されるロガーを使用して、ＥＲＲＯＲレベルで所与のエラーメッセージをログする。
・指定の例外のカウントを増分するために、例外マネージャクラスのメソッドを起動する。
【００４７】
シングルトンクラスのｃｏｍ．ｖｅｒｉｓｉｇｎ．ｓａ．ｓｐｉ．ｅｘｃｅｐｔｉｏｎ．ＥｘｃｅｐｔｉｏｎＭａｎａｇｅｒが提供され、キャッシュ（ＨａｓｈＭａｐ＜Ｓｔｒｉｎｇ  ｃｌａｓｓＮａｍｅ，ＡｔｏｍｉｃＩｎｔｅｇｅｒ＞）が使用されて、エラータイプに基づいて検証エラーの数を追跡する。セキュリティオーディタレポートクラスは、レポートを生成する時にこの情報を使用する。
【００４８】
本発明の実施形態は、トランスログファイルポーラによって監視されている入力トランザクションログフォルダに関連のトランザクションログファイル全てをコピーするために使用されるパールスクリプト（すなわち、ｌｏｇｃｏｐｙ．ｐｌ）である、ログコピー（Ｌｏｇ  Ｃｏｐｙ）スクリプトを提供する。スクリプトは次いで、入力トランザクションログフォルダにトランザクションログファイル全てを「ｓｃｐ」する。ファイル「ｂｕｉｌｄ．ｐｒｏｐｅｒｔｉｅｓ」は、トランザクションログファイルを有するサーバ全てのＩＰアドレスを含むように必要に応じて変更される。
【００４９】
パラメータ、ｌｏｇｃｏｐｙ．ｄａｔｅ．ｉｎｔｅｒｖａｌは、何日前までのトランザクションログファイルをコピーするかを指定する。「１」の値は、昨日からのトランザクションログファイルがコピーされることが必要であることを指定する。同様に、「２」の値は、一昨日および昨日のトランザクションログファイルをコピーする。全てのログファイルがコピーされた後、Ｌｏｇ  Ｃｏｐｙは、次いで、入力トランザクションログフォルダに「ｔｒｉｇｇｅｒ」という名前のファイルを作成する。これは、セキュリティオーディタが、全てのトランザクションログファイルがコピーされた後にのみ処理を開始することを確実にするためである。Ｌｏｇ  Ｃｏｐｙは、毎日午前２時に実行するようにクローンジョブとしてスケジュールされる。
【００５０】
図４に図示されるトランザクションログファイルポーラ（ＴｒａｎｓＬｏｇＦｉｌｅｓＰｏｌｌｅｒ）４２０は、「ｔｒｉｇｇｅｒ」という名前の特定のファイルに対して設定ファイルに指定されたディレクトリをポーリングするために使用される。トランザクションログファイルパラメータは、構成ファイルの中に指定される。
【００５１】
再び図４を参照すると、トランザクションログファイルは、提供されるログコピー（ｌｏｇｃｏｐｙ．ｐｌ）のパールスクリプトを使用するクローンジョブを介して、入力トランザクションログファイルフォルダにコピーされ、以下の一連のイベントが発生する。
・ＴｒａｎｓＬｏｇＦｉｌｅＰｏｌｌｅｒ４２０は、ｔｒｉｇｇｅｒファイルをトランスログファイルディスパッチャへ送る。
・トランスログファイルディスパッチャ４２４は、ｔｒｉｇｇｅｒファイルを削除する。入力トランザクションログフォルダの中の全てのトランザクションログファイルは、プロセス内トランザクションログフォルダに移動される。
・トランスログファイルディスパッチャ４２４は、セキュリティオーディタの中の開始日時を使用して日付別にトランザクションログファイルをソートし、グループ化する。
・次いで、１日分のトランザクションログファイルがトランスログファイルプロセッサ４２６に渡され、次いで、これが、トランスログファイルプロセッサスレッドオブジェクトの数で均等にトランザクションログファイルを分散する。作成されたトランスログファイルプロセッサスレッドの数は、構成ファイルの中で、次のように指定される：
ｓａ．ｔｒａｎｓｌｏｇｓｕｍｍａｒｙ．ｔｈｒｅａｄｐｏｏｌ．ｓｉｚｅ＝２
・トランザクション
■各トランスログファイルプロセッサスレッドは次いで、割り当てられたトランザクションログファイルの各々に対してトランスログファイルリーダをインスタンス化する。
■次いで、各トランスログファイルプロセッサスレッドは、トランザクションログファイルのチャンクを読み出す１組のトランスログファイルリーダオブジェクトをラウンドロビン方式で処理する。
■トランザクションログファイルの中の各エントリに対するトランスログファイルリーダオブジェクトは、次の操作を実施する。
・トランザクションログサマリを生成するために、トランザクションログエントリをデコードする。
・トランザクションログサマリのための作成タイムスタンプを取得するために、トランザクションログエントリのタイムスタンプをパースする。
・トランザクションＩＤによってキーされるＨａｓｈＭａｐにトランザクションログサマリをキャッシュする。
・トランザクションログファイルが完全に処理された後、トランスログファイルリーダオブジェクトは、ファイルを処理済みトランザクションログフォルダに移動する。
・トランスログファイルディスパッチャ４２４は次いで、監査を再開するように他の待機している構成要素に通知するように、再開可能構成要素マネージャ４４２に通知する。
・トランスログファイルディスパッチャ４２４は次いで、サマリコリレータマネージャ４５０によって次の日のトランザクションログファイル（使用可能である場合）を処理することを開始するように通知されることを待機している待機状態になる。
【００５２】
データベースプロセッサスレッドは、ＡＰＥフレームワークからデータベーストランザクションを呼び出すことを開始するために、再開可能構成要素マネージャ４４２によって通知されるように、最初は待機状態にある。ＯＬＴＰトランザクションが、ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒＦａｃａｄｅを介して、ＡＰＥフレームワークから読み出されると、次のステップが発生する。
１．ＡＰＥフレームワークから呼び出される各ＯＬＴＰトランザクションに対して：
■ＯＰＥＲＡＴＩＯＮＩＤ列の値が、「ＩＮＳＥＲＴ  ＩＮＴＯ  ＴＲＡＮＳＡＣＴＩＯＮ」のＳＱＬ文から呼び出される。
■ＯＰＥＲＡＴＩＯＮＩＤ列の値が、監査可能な操作のうちの１つでない場合、このトランザクション境界内の全てのＳＱＬ文は、破棄される。
■「ＩＮＳＥＲＴ  ＩＮＴＯ  ＴＲＡＮＳＡＣＴＩＯＮ」のＳＱＬ文が存在しない場合、トランザクション境界内の組全体のＳＱＬ文は、悪意のあるＳＱＬ文であると見なされる。
■トランザクアクションの１組のＳＱＬ文のための対応するプロファイルが、ＯＰＥＲＡＴＩＯＮＩＤの値を使用してプロファイルマネージャ４４０から呼び出される。
２．パースされたＳＱＬ文の関連情報（プロファイルの指定に応じて）は、ＳＱＬ文にコピーされる。これらのＳＱＬ文の集合体（他の情報を含む）は最終的に、ＳＱＬサマリを形成するために使用される。
３．参照検証、ルックアップ検証、正規表現検証等の関連データベース検証規則が適用される。これらの検証に不合格のＳＱＬ文は、エラーとして（例えば、直ちに）警告が与えられる。対応するトランザクションＩＤは、「無効なＳＱＬサマリ」キャッシュ４１２に持続され、例外マネージャ４５８に渡される。
４．ＳＱＬ文に対する全ての検証に合格すると、得られるＳＱＬサマリは、プロファイルのＸＭＬ属性「ｔｒａｎｓＬｏｇＥｎｔｒｙＥｘｉｓｔｓ＝ｔｒｕｅ／ｆａｌｓｅ」によって指定されるような対応するトランザクションログエントリを有する場合にのみキャッシュされる。ＳＱＬ文の集合体に関連するプロファイルはまた、ＳＱＬサマリと共に記憶される。
５．加えて、トランザクション日付は、キャッシュされるサマリの作成タイムスタンプとして使用される。プロセスの後の時点で、サマリがキャッシュから呼び出される時、キャッシュの作成タイムスタンプは、キャッシュエントリの有効期限が切れているか（すなわち、対応するトランザクションログサマリが、指定の時間内に発見されていない）を確認するために使用される。
６．セキュリティオーディタの終了日時以降であるトランザクション日付を有するトランザクションが発見されると、データベースプロセッサスレッドは、待機状態に入る。データベースプロセッサスレッドは、新しい組のトランザクションログファイルが受信されたことが、トランザクションログファイルディスパッチャ４２４によって通知されると、ＡＰＥフレームワークからトランザクションを呼び出すことを再開する。
【００５３】
本明細書全体で説明されるように、セキュリティオーディタで同時に実行される３つの組のスレッドが存在する。サマリコリレータ４５０（サマリコリレータマネージャとも呼ばれる）は、コリレータスレッドのスレッドプールの作成および管理に責任を持つ。セキュリティオーディタで同時に実行する３つの組のスレッドは、次の通りである。
・ＳＱＬサマリスレッドは、ＳＱＬ文をパースし、ＳＱＬサマリをキャッシュする。
・トランザクションログスレッドは、トランザクションログファイルをパースし、トランザクションログサマリをキャッシュする。
・コリレータスレッドは、ＳＱＬサマリおよび対応するトランザクションログサマリを両方のキャッシュから並行して（すなわち、同時に）呼び出す。この組のスレッドは、ＳＱＬサマリからの情報をトランザクションログサマリの情報と相関させるので、これらはコリレータスレッドと呼ばれる。
作成するスレッドの数は、構成ファイルの中に指定される。サマリコリレータマネージャ４５０は、ＳＱＬサマリとトランザクションログサマリとの間のトランザクションのユニットの相関が終了すると、トランスログファイルディスパッチャ４２４に通知する。
【００５４】
セキュリティオーディタレポートマネージャは、スタートアップ時にセキュリティオーディタによって初期化される。レポートマネージャ４６０によって生成されるレポートは、構成ファイルの中のパラメータによって指定されたフォルダに書き込まれる。
【００５５】
特定の実施形態において、レポートファイル名は、＜開始日時＞［ＭＭｄｄｙｙｙｙＨＨｍｍｓｓ］−ｔｏ−＜終了日時＞／ＭＭｄｄｙｙｙｙＨＨｍｍｓｓ］−＜レポートタイプ＞．ｔｘｔのフォーマットを有する。例として、レポートは、２００９年１１月１日の真夜中から開始し、２００９年１１月２日の真夜中に終了するトランザクションに対して生成されるレポートの場合、１１０１２００９００００００−ｔｏ−１１０２２００９００００００−Ｓｕｍｍａｒｙ．ｔｘｔという名前が可能である。
【００５６】
図４に図示されるように、２つのタイプのレポート、「要約」または「詳細」のいずれかが提供される。サマリおよび詳細レポートに関する追加の説明は、本明細書全体で提供され、以下に具体的に提供される。レポートを生成する前に、セキュリティオーディタレポートマネージャは次の操作を実施する。
・ＳＱＬサマリキャッシュをフラッシュする：
ｏキャッシュのＳＱＬサマリは、対応するトランザクションログサマリと相関することができる任意の追加のＳＱＬサマリが相関されることを確実にするように、最後にもう１回繰り返される。
ｏ対応するトランザクションログサマリが発見されず、ＳＱＬサマリの有効期限が切れていない場合は、キャッシュに戻される。
ｏ有効期限が切れた一切のＳＱＬサマリは、「ＳＱＬＳｕｍｍａｒｙＥｘｐｉｒｅｄＥｘｃｅｐｔｉｏｎ」で不合格となる。ＳＱＬサマリは、サマリの中のＳＣＮがトランザクションログファイルの中の最大ＳＣＮ読み出し値からＳＣＮ閾値を差し引いたよりも少ない場合、有効期限が切れたと見なされる。例として、ＳＣＮ閾値は、１０，０００に設定することができる。
・トランスログサマリキャッシュをフラッシュする：
ｏトランスログサマリキャッシュの中のトランザクションログサマリ全てで、以下の操作が実施される。
■このＴｒａｎｓＬｏｇＳｕｍｍａｒｙに対応するトランザクションＩＤが「無効なＳＱＬサマリ」の中に存在するかどうかを確認する。データベース検証規則に不合格だったデータベーストランザクションのトランザクションＩＤは、このキャッシュに存在することになる。トランザクションＩＤが「無効なＳＱＬサマリ」キャッシュに存在する場合、エントリはキャッシュから削除され、無視される。
■トランザクションＩＤが「無効なＳＱＬサマリ」キャッシュに存在せず、サマリの有効期限が切れていない場合、キャッシュに戻される。
ｏトランザクションログサマリの有効期限が切れている場合、キャッシュから削除され、「ＴｒａｎｓＬｏｇＳｕｍｍａｒｙＥｘｐｉｒｅｄＥｘｃｅｐｔｉｏｎ」で不合格になる。トランザクションログサマリは、サマリの中のＳＣＮが、データベーストランザクションからの最大ＳＣＮ読み出し値からＳＣＮ閾値を差し引いたよりも少ない場合、有効期限が切れたと見なされる。例として、ＳＣＮ閾値は、１０，０００に設定することができる。
【００５７】
２つのレポート（詳細および要約）は、セキュリティオーディタに指定されたｓｔａｒｔＤａｔｅＴｉｍｅで開始し、ｅｎｄＤａｔｅＴｉｍｅで終了する監査されたトランザクションに対して生成される。レポートの期間を制御するパラメータは、設定ファイルの中に指定される。レポートが生成された後、全てのリセット可能な構成要素の中の統計データをリセットするために、リセット可能構成要素マネージャ４７０が起動される。リセット可能な構成要素は以下に詳細を検討する。
【００５８】
上記のように、セキュリティオーディタは、発生した検証エラーのタイプおよびカウントだけを示す高レベルのレポートである、要約レポートと、発生した各エラーおよび発生した回数についての詳細を含有する、詳細レポートとの少なくとも２つのレポートを生成する。セキュリティオーディタレポートマネージャ４６０がスタートアップ時に初期化される時、詳細レポートスレッド４６６をインスタンス化し、開始する。検証エラーが発生すると、エラーメッセージの詳細バージョンがキューに配置される。詳細レポートスレッド４６６は、このキューからエラーメッセージを読み出す。次いで、同一のエラーメッセージが以前に発生していたかどうかを確認するために、キャッシュを確認する。同一のエラーメッセージがキャッシュに既に存在する場合、カウントは増分される。同一のエラーメッセージがキャッシュに発見されない場合、メッセージは、１のカウントでキャッシュに追加される。
【００５９】
詳細レポートスレッド４６６をその中およびそれ自体のスレッドとして提供することによって、本発明の実施形態は、検証スレッドが、詳細エラーメッセージがキャッシュでチェックされることを待機する必要なく、検証の仕事を継続して実行することを確実にする。
【００６０】
本発明の実施形態は、アクティビティの再開をトリガする所定のイベントが発生すると、セキュリティオーディタの中の所定の構成要素に通知を提供する。この目的のために、再開可能構成要素マネージャ４４２が提供される。処理を再開するためにそのようなイベントを待機する構成要素は、セキュリティオーディタで再開可能な構成要素である。全ての再開可能な構成要素は、次のインターフェースを実装することによって、そのようなイベントが通知されるように、再開可能構成要素マネージャ４４２にそれら自体を登録する。
public interface ResumeableSAComponent {
void resumeAuditing ();
}
【００６１】
トランスログファイルディスパッチャ４２４は、１日分のトランザクションログファイルが受信されると、ＲｅｓｕｍｅａｂｌｅＳＡＣｏｍｐｏｎｅｎｔＭａｎａｇｅｒ．ｒｅｓｕｍｅＡｕｄｉｔｉｎｇ（）を起動する。再開可能ＳＡ構成要素マネージャ４４２は、これによって、全ての登録された再開可能ＳＡ構成要素上でｒｅｓｕｍｅ（）メソッドを起動する。
【００６２】
セキュリティオーディタの中の次の構成要素は、ＲｅｓｕｍｅａｂｌｅＳＡＣｏｍｐｏｎｅｎｔインターフェースを実装し、それら自体をシングルトンの再開可能ＳＡ構成要素マネージャクラスに登録する。
・ＤＢＰｒｏｃｅｓｓｏｒ：このクラスは、ＡＰＥフレームワークからＯＬＴＰトランザクションを呼び出すことに責任を持つ。タイムスタンプがセキュリティオーディタで指定された「ｅｎｄＤａｔｅＴｉｍｅ」よりも大きい時、このスレッドは、待機状態に入る。再開可能ＳＡ構成要素マネージャ４４２からの通知後、ＤＢプロセッサ４０２は、ＡＰＥフレームワークからトランザクションを呼び出すことを継続する。
・ＳｕｍｍａｒｙＣｏｒｒｅｌａｔｏｒＭａｎａｇｅｒ：サマリコリレータマネージャ４５０は、両方のキャッシュ（トランスおよびＳＱＬサマリのキャッシュ）の情報を相関させるコリレータスレッドを作成し、管理する。コリレータスレッドが、タイムスタンプがセキュリティオーディタで指定された「ｅｎｄＤａｔｅＴｉｍｅ」よりも大きいＳＱＬサマリを呼び出した後、このスレッドは、待機状態に入る。再開可能構成要素マネージャ４４２からの通知後、サマリコリレータマネージャ４５０は、相関アクティビティを継続するように、コリレータスレッドに通知する。
・ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒＲｅｐｏｒｔＭａｎａｇｅｒ：セキュリティオーディタレポートマネージャ４６０によって生成されるレポートは、受信されたトランザクションを監査するためにかかった時間を示す。再開可能構成要素マネージャ４４２からの通知時、セキュリティオーディタレポートマネージャ４６０は、時間の追跡を保存している変数を現在時間にリセットする。
【００６３】
本発明の実施形態は、現在監査されているトランザクションに関する統計データを保持する変数のリセットをトリガする、所定のイベントが発生する時、セキュリティオーディタの所定のコンポーネントに通知を提供する。再開可能な構成要素は、次のインターフェースを実装することによって、そのようなイベントが通知されるように、リセット可能構成要素マネージャ４７０を用いて自己を登録する。
public interface ResettableSAComponent {
/**
* Reset state in the component.
*/
public void reset ();
}
【００６４】
セキュリティオーディタレポートマネージャ４６０は、レポートが生成された後、リセット可能な構成要素の状態をリセットするために、ＲｅｓｅｔｔａｂｌｅＳＡＣｏｍｐｏｎｅｎｔＭａｎａｇｅｒ．ｒｅｓｅｔＣｏｍｐｏｎｅｎｔｓ（）を起動する。リセット可能ＳＡ構成要素マネージャ４７０は、これによって、全ての登録された再開可能ＳＡ構成要素上でｒｅｓｅｔ（）メソッドを起動する。
【００６５】
セキュリティオーディタの中の次の構成要素は、ＲｅｓｅｔｔａｂｌｅＳＡＣｏｍｐｏｎｅｎｔインターフェースを実装し、それら自体をシングルトンの再開可能ＳＡ構成要素マネージャクラスに登録する。
・ＳｅｃｕｒｉｔｙΑｕｄｉｔｏｒ：セキュリティオーディタ４００は、そのｒｅｓｅｔ（）メソッドの中で、新しいｓｔａｒｔＤａｔｅＴｉｍｅが現在のｅｎｄＤａｔｅＴｉｍｅになるように設定する。また、新しいｓｔａｒｔＤａｔｅＴｉｍｅにレポートチャンク時間数を加えることによって、新しいｅｎｄＤａｔｅＴｉｍｅを計算する。
・ＳＯＬＳｕｍｍａｒｙＣａｃｈｅＭａｎａｇｅｒ：ＳＱＬサマリキャッシュマネージャ４３０は、キャッシュに加えられたＳＱＬサマリの合計数を保持する変数をキャッシュサイズに等しくなるようにリセットする。また、無効なＳＱＬサマリキャッシュをクリアする。
・ＳｕｍｍａｒｙＣｏｒｒｅｌａｔｏｒＭａｎａｇｅｒ：サマリコリレータマネージャ４５０は、相関されたトランザクションの合計数がゼロになるようにリセットする。
・ＴｒａｎｓＬｏｇＳｕｍｍａｒｙＣａｃｈｅＭａｎａｇｅｒ：トランスログサマリキャッシュマネージャ４２８は、最後に処理されたトランザクションログサマリのタイムスタンプをヌルに設定する。また、キャッシュの中のトランザクションログサマリの数をゼロに設定する。
・ＥｘｃｅｐｔｉｏｎＭａｎａｇｅｒ：例外マネージャ４５８は、全ての例外タイプに関連するカウントをゼロにリセットする。
【００６６】
次のインターフェースを実装することによって、シャットダウンのイベントの際に何らかのクリーンアップ操作を実施することが必要な、セキュリティオーディタの中の構成要素。
public interface ShutDownListener {
public void shutDown ();
}
【００６７】
セキュリティオーディタのｓｈｕｔＤｏｗｎ（）メソッドがＪＭＸを介して起動されると、ＳｈｕｔＤｏｗｎＭａｎａｇｅｒ．ｓｈｕｔＤｏｗｎ（）メソッドを起動する。このメソッドを起動する前に、セキュリティオーディタは、最後に処理されたＳＱＬサマリのタイムスタンプを「ｓｔａｒｔｄａｔｅ．ｔｘｔ」ファイルに書き込む。このため、セキュリティオーディタが再び開始されると、どこで終了したかを認識する。次いで、シャットダウンマネージャは、全ての登録されたシャットダウンリスナクラス上で、ｓｈｕｔｄｏｗｎ（）メソッドを起動する。
【００６８】
セキュリティオーディタの中の次の構成要素は、ＳｈｕｔＤｏｗｎＬｉｓｔｅｎｅｒインターフェースを実装し、それら自体をシングルトンのシャットダウンマネージャクラスに登録する。
・ＤＢＰｒｏｃｅｓｓｏｒ：ＤＢプロセッサ４０２は、ＤＢプロセッサスレッド４１０クラスのスレッドプールをシャットダウンし、自己を中断する。
・ＳｕｍｍａｒｙＣｏｒｒｅｌａｔｏｒＭａｎａｇｅｒ：サマリコリレータマネージャ４５０は、サマリコリレータスレッドのスレッドプールをシャットダウンする。
・ＴｒａｎｓＬｏｇＦｉｌｅｓＰｏｌｌｅｒ：このクラスは、「ｏｒｇ．ｓａｄｕｎ．ｕｔｉｌ．ｐｏｌｌｉｎｇ．ＤｉｒｅｃｔｏｒｙＰｏｌｌｅｒ」を拡張する。ディレクトリポーラは、入力トランザクションログファイルフォルダをポーリングするスレッドである。ディレクトリポーラクラスのｓｈｕｔｄｏｗｎ（）が起動される。
・ＴｒａｎｓＬｏｇＦｉｌｅｓＰｒｏｃｅｓｓｏｒ：トランスログファイルプロセッサ４２６は、トランスログファイルプロセッサスレッドクラスのスレッドプールをシャットダウンする。
【００６９】
本発明の実施形態は、各レジストリ操作のための特定のプロファイルを提供する。プロファイルは、以下を含むが、これらに限定されない。
# ADD-DOMAIN = 2
# MOD-DOMAIN = 3
# DEL-DOMAIN = 4
# ADD-NAMESERVER = 5
# MOD-NAMESERVER = 6
# DEL-NAMESERVER = 7
# TRANSFER-DOMAIN = 11
# RENEW-DOMAIN = 12
# SESSION = 13
# QUIT = 14
# SYNC-DOMAIN = 75
# RESTORE-DOMAIN = 78
# RESTORE-REPORT = 79
【００７０】
例えば、「ｌｏｇｉｎ」ＥＰＰコマンドは、ＲＥＧＩＳＴＲＹＳＥＳＳＩＯＮおよびＴＲＡＮＳＡＣＴＩＯＮ表に挿入する。各レジストリ操作のためのプロファイルは、レジストリ操作に関するメタデータを捕捉する個別のＸＭＬファイルに提供される。ＸＭＬファイルの中に検証情報を有することによって、本明細書に説明される実装は、プロファイルに存在する実際のメタデータから、検証を実施するためのコードを区別する。好ましくは、検証規則は、プロファイルの中に表現される。ＸＭＬに表現することが面倒な場合がある、発生することが少ない特定ケースの検証のためには、複雑な１回限りの検証を実施するために、Ｊａｖａ（登録商標）フックを提供することができる。
【００７１】
全てのレジストリ操作のためのプロファイルを表現するために、ＸＭＬスキーマが作成されている。ＸＭＬＢｅａｎは、プロファイル内のデータをパースし、ナビゲーションするために使用される。プロファイルがパースされると、さらに、メタデータ情報を表現するために、クラスのフレームワークに変換される。これによって、本来のプロファイル情報が記憶されているフォーマット、またはさらに、保管場所に依存することから、アプリケーションを解放することになる。
【００７２】
レジストリ操作のためのプロファイルは、操作情報、データベース情報、および検証基準の３つのメタデータを含有する。図５は、本発明の実施形態に従い、レジストリ運用のためのメタデータを示す簡易図である。レジストリ操作プロファイルは、次のインターフェースによって表現される。
public interface RegistryOperationProfile extends Serializable {
Operationlnfo getOperationlnfo ();
DatabaseInfo getDatabaseInfo ();
Validator getValidator ();
}
【００７３】
ＯｐｅｒａｔｉｏｎＩｎｆｏ５１０は、レジストリ操作に関する情報を捕捉する。プロファイルは、ｏｐｅｒａｔｉｏｎＩＤに基づいて、キャッシュから呼び出すことができる。ＳＱＬ文がパースされると、関連のプロファイルが、ｏｐｅｒａｔｉｏｎＩＤに基づいて呼び出される（すなわち、Ｔｒａｎｓａｃｔｉｏｎ表への挿入は、レジストリ操作のｏｐｅｒａｔｉｏｎＩＤを有する）。図６は、本発明の実施形態に従い、ＯｐｅｒａｔｉｏｎＩｎｆｏのメタデータを示す簡易図である。
【００７４】
ＯｐｅｒａｔｉｏｎＩｎｆｏメタデータの例は、次の通りである。
<operationInfo>
<operationID transLogEntryExists="true">2</operationID>
<operationName>ADD-DOMAIN</operationName>
<conceptClassName>RegisterDomainOp</conceptClassName>
</operationInfo>
【００７５】
図７は、本発明の実施形態に従い、ＤａｔａｂａｓｅＩｎｆｏのメタデータを示す簡易図である。ＤａｔａｂａｓｅＩｎｆｏ５２０は、レジストリ操作に関与する表全てを捕捉する。表は、任意選択または必須とすることができる。加えて、「ｄｅｐｅｎｄｓ」属性は、表の操作が、それが依存する表の操作もまたトランザクションの一部である場合かつその場合に限り、必須であることを指定する。例として、ドメインの追加操作の場合、ＤＯＭＡＩＮＮＡＭＥＳＥＲＶＥＲＬＩＮＫは、ＤＯＭＡＩＮ表に依存する。このため、ＤＯＭＡＩＮ表の操作もまたトランザクションの一部でない限り、ＤＯＭＡＩＮＮＡＭＥＳＥＲＶＥＲＬＩＮＫ表で対応する操作は求められない。
【００７６】
「ｄｂＯｐｅｒａｔｉｏｎ」７１０は、それが表での「挿入（ｉｎｓｅｒｔ）、更新（ｕｐｄａｔｅ）、または削除（ｄｅｌｅｔｅ）」操作であったかどうかを指定する。「ｍｉｎ／ｍａｘ」属性は、表での指定された操作の最高数および最低数を指定する。「ｃｏｌｕｍｎ」要素７２０は、関連のＳＱＬ文からパースし、キャッシュする対象の列を指定する。例として、ＳＱＬ文には１０の列が存在する可能性があるが、値がキャッシュされるのは、２つの列だけの場合がある。
【００７７】
本発明の実施形態に従い、制約条件は列上に指定することができる。ｃｏｌｕｍｎ要素７２０の以下の属性は、制約条件を指定する。
・ｍｉｎＬｅｎｇｔｈ−この列の最低長
・ｍａｘＬｅｎｇｔｈ−この列の最高長
・ｍｉｎＶａｌｕｅ−この列の最低「整数」値
・ｍａｘＶａｌｕｅ−この列の最高「整数」値
・ａｌｌｏｗｅｄＶａｌｕｅｓ−この列に可能な値のカンマ区切りリスト
・ｄｉｓＡｌｌｏｗｅｄＶａｌｕｅｓ−この列に不可能な値のカンマ区切りリスト
【００７８】
ｍｕｔｕａｌｌｙＥｘｃｌｕｓｉｖｅ表要素７３０は、この操作の一部として相互に排他的である、表の操作を指定する。
【００７９】
ドメイン追加プロファイルの論理フローの例として、以下の抜粋は、ドメイン名が追加されるトランザクションに関連する、ＡＤＤ−ＤＯＭＡＩＮプロファイルの例である。
<databaseInfo>
<table name="DOMAIN" optional="false" depends="TRANSACTION">
<dbOperation max="1" min="1">insert</dbOperation>
<column>DOMAINID</column>
<column minLength="7" maxLength="67">DOMAINNAME</column>
<column minValue="1" maxValue="10">REGISTRATIONPERIOD</column>
<column>REGISTRATIONEXPIRATIONDATE</column>
<column>TRANSACTIONID</column>
<column minLength="3" maxLength="32" >AUTHINFO</column>
<column>CREATEDDATE</column>
<column allowedValues="3,14" >ENCODINGTYPEID</column>
<column>PARENTDOMAIN</column>
<column allowedValues="Y">ZONEINSERTION</column>
</table>
</databaseInfo>
【００８０】
この抜粋のＸＭＬは、ＲＥＧＩＳＴＲＡＴＩＯＮＰＥＲＩＯＤの最低値が「１」であり、最高値が「１０」であることを指定する。同様に、ＤＯＭＡＩＮＮＡＭＥ列の最低長は、「７」であり、最高長は、「６７」である。ＥＮＣＯＤＩＮＧＴＹＰＥＩＤの可能な値は、「３または１４」である。他の値は、他の特定の実装で利用され、これらの値は、例として提供されているに過ぎない。
【００８１】
ドメイン名を削除するためのプロファイルを示すために、以下の抜粋は、ＤＥＬ−ＤＯＭＭＡＩＮプロファイルのために提供される。
<mutuallyExclusive>
<table name="DOMAIN" dbOperation="update"/>
<table name="DOMAIN" dbOperation="delete"/>
</mutuallyExclusive>
【００８２】
ドメイン削除操作が猶予期間内のドメイン上で発生すると、ＤＯＭＡＩＮ表のＤＥＬＥＴＥのＳＱＬ文がアプリケーションによって発行される。一方、ドメイン削除操作が猶予期間後のドメイン上で発生すると、ＤＯＭＡＩＮ表のＵＰＤＡＴＥのＳＱＬ文がアプリケーションによって発行される。ドメインは、猶予期間内にあるか、ないかのいずれかであり得るため、これらのＳＱＬ文の両方は、同じトランザクションの一部となることはできない。このため、これらの操作は相互に排他的であり、両方の操作の使用は、未承認のトランザクションとして警告が与えられる。
【００８３】
図８は、本発明の実施形態に従い、検証基準を示す簡易図である。「ＶａｌｉｄａｔｉｏｎＣｒｉｔｅｒｉｏｎ」は、ＳＱＬ文および／またはトランザクションログエントリに適用される検証規則を捕捉する。検証基準は、トランザクションログベースの検証またはデータベースに関する検証のいずれかである規則のシーケンスとして定義される。全ての検証規則は、検証規則が無視されるべきかどうかを指定する、「ｉｇｎｏｒｅ」属性を有する。これによって、検証を選択的に無効にする能力を与える。図８に示されるように、３つの種類の検証規則が存在する。
・トランスログ検証：トランザクションログのデータをデータベースのデータと検証する。
・データベース検証：全てのビジネス規則が適切に徹底されていること、およびデータが顧客の意図どおりに持続されていることを確実にするように、データベースのデータを検証する。
・カスタム検証：ＸＭＬで表現するには面倒すぎる複雑な検証規則は、コードに実装することができる。
【００８４】
トランザクションログ検証
【００８５】
この要素は、トランザクションログエントリ検証に関するメタデータを捕捉する。図９は、本発明の実施形態に従い、トランザクションログ検証を示す簡易図である。トランザクションログエントリの値は、ＳＱＬサマリの値に一致する。実施形態において、名前によって特定されるトランザクションログエントリの値は、指定されたデータベース操作を有する表の中の列値の値に等しくなければならない。「ｉｇｎｏｒｅＣａｓｅ」属性は、値の比較が大文字小文字を区別するかしないかを指定する。
【００８６】
トランザクションログエントリのコンビネーションが、データベース列の単一値に一致するように連結されなければならない場合は、「ｔｒａｎｓＬｏｇＥｎｔｒｙＰａｒａｍｓ」要素によって指定されたトランザクションログエントリパラメータは、指定された区切り文字を使用して連結される。得られる値は、次いで、データベース列の値と比較される。
【００８７】
図９および他の図面に示されるｋｎｏｗｎＩｓｓｕｅ属性は、検証規則に不合格であった場合に警告を発するかどうかを指定する。属性ｋｎｏｗｎＩｓｓｕｅは、いくつかの異なる検証規則で有効または無効とすることができる。属性ｋｎｏｗｎＩｓｓｕｅ＝“ｔｒｕｅ”である場合、データに指定された検証規則を適用する間に検証エラーが発生した場合、警告は発せられない。このように、この属性は、システムで特定された問題には警告を無効にするが、修正がまだ実装されていない問題には無効にしない能力を運用者に与える。システムが検証規則を守るように更新された場合、属性ｋｎｏｗｎＩｓｓｕｅ＝“ｆａｌｓｅ”を設定することができる。このように、ｋｎｏｗｎＩｓｓｕｅ属性を利用することによって、報告されるエラーに関して、システムの不要な情報を削減することができる。
【００８８】
トランザクションログ検証の例として、以下の例は、ＡＤＤ−ＤＯＭＡＩＮ操作に適用可能である。
<transLogValidation ignore="false">
<tableName>DOMAIN</tableName>
<dbOperation max="1" min="1">insert</dbOperation>
<columnName>DOMAINNAME</columnName>
<transLogEntryParam name="dm" ignoreCase="true"/>
<isDate>false</isDate>
</transLogValidation>
【００８９】
この例において、ｎａｍｅ＝‘ｄｍ’のトランザクションログエントリによって指定された値は、データベースのＤＯＭＡＩＮ．ＤＯＭＡＩＮＮＡＭＥ列の値に対して、大文字小文字を区別せずに比較される。
【００９０】
データベース検証
【００９１】
データベースリーダから呼び出されたＳＱＬ文が、メモリデータ構造にパースされると、関連のプロファイルで指定されたデータベース検証規則が適用される。このため、プロファイルに一致しないあらゆるＳＱＬ文は、プロセスの早期に警告が与えられる。
【００９２】
図１０は、本発明の実施形態に従い、データベース検証規則を示す簡易図である。以下の説明は、図１０に示されるデータベース検証規則に関する追加情報を提供する。
【００９３】
参照検証
【００９４】
図１１は、本発明の実施形態に従い、参照検証を示す簡易図である。参照検証は、マスタ表の中の列の値をこれらの表の間の参照整合性によって結合される子の表の中の列の値と比較する。指定のトランザクションのＳＱＬ文がパースされた後、プロファイルに指定された参照検証が実施される。一実施形態において、以下のようになる。
［ＭａｓｔｅｒＴａｂｌｅ．ＭａｓｔｅｒＣｏｌｕｍｎ］＝＝［ＣｈｉｌｄＴａｂｌｅ．ＣｈｉｌｄＣｏｌｕｍｎ］
【００９５】
操作は、任意の数の参照検証規則を有することができる。任意選択的に、子の列の値と比較される前に、正規表現がマスタ列に適用される場合がある。
【００９６】
参照検証の例として、ＡＤＤ−ＤＯＭＡＩＮプロファイルからの以下の例が提供される。
<referentialValidation>
<masterTable name="DOMAIN">
<dbOperation max="1" min="1">insert</dbOperation>
<masterColumn>DOM AINN AME</masterColumn>
</masterTable>
<regexOnMasterColumn>
<regularExpression>(.*?)(COM|NET|EDU|ARPA)$</regularExpression>
<group>2</group>
</regexOnMasterColumn>
<childTable name="DOMAIN">
<dbOperation max="1" min="1">insert</dbOperation>
<column>PARENTDOMAIN</column>
</childTable>
</referentialValidation>
【００９７】
上記の検証規則は、指定された正規表現が、データベースのＤＯＭＡＩＮ．ＤＯＭＡＩＮＮＡＭＥ列の値に適用されることを指定する。次に、得られる値は、データベースのＤＯＭＡＩＮ．ＰＡＲＥＮＴＤＯＭＡＩＮ列に等しくなければならない。このように、この規則は、ＤＯＭＡＩＮ表に挿入された全てのドメインが、ＣＯＭ／ＮＥＴ／ＥＤＵ／ＡＲＰＡで終了しなければならず、対応するＴＬＤは、ＰＡＲＥＮＴＤＯＭＡＩＮ列の値に一致しなければならないことを指定する。
【００９８】
ルックアップ検証
【００９９】
ルックアップ検証は、ルックアップ表の値に基づいて、列に挿入された値が正しい値であることを確実にするために実施される。図１２は、本発明の実施形態に従い、ルックアップ検証を示す簡易図である。図１２に示されるように、ｔａｂｌｅＮａｍｅ．ｃｏｌｕｍＮａｍｅの値は、プロファイルの指定されたＳＱＬ文を実行することによって返された値に等しくなければならない。この検証規則は、本発明のいくつかの実施形態において任意選択である。
【０１００】
正規表現検証
【０１０１】
図１３は、本発明の実施形態に従い、正規表現検証を示す簡易図である。正規表現検証は、一定の業務論理条件が満たされていることを確実にするために実施される。指定された表．列の値は、所定の正規表現に一致しなければならない。加えて、正規表現に一致する、指定されたグループを呼び出すことができる。正規表現検証は、単独で実行することができる、または他の規則（例えば、以下に詳細を説明する、ＥｘｉｓｔｓＩｎＴａｂｌｅｓ検証規則）と組み合わせることができる。
【０１０２】
条件付き検証
【０１０３】
図１４は、本発明の実施形態に従い、条件付き検証を示す簡易図である。条件付き検証は、データベースの一定の列に挿入される値が、条件に指定されるように正確に一致することを確実にする。条件付き検証は、単独で実行することができる、または他の規則（例えば、以下に詳細を説明する、ＥｘｉｓｔｓＩｎＴａｂｌｅｓ検証規則）と組み合わせることができる。
【０１０４】
条件付き検証の例として、ＡＤＤ−ＤＯＭＡＩＮプロファイルからの以下の例が提供される。
<conditionalValidation>
<tableName>TRANSACTIONATTRIBUTES</tableName>
<dbOperation max="100" min="1">insert</dbOperation>
<column value="DomainName" name="ATTRIBUTE"></column>
<column value="RegistrationPeriod" name="ATTRIBUTE"</column>
<column value=" Authinfo" name=" ATTRIBUTE"></column>
</conditionalValidation>
【０１０５】
上記の例は、「ＤｏｍａｉｎＮａｍｅ」、「ＲｅｇｉｓｔｒａｔｉｏｎＰｅｒｉｏｄ」等の指定された列の値全てが、ＴＲＡＮＳＡＣＴＩＯＮＡＴＴＲＩＢＵＴＥＳ．ＡＴＴＲＩＢＵＴＥ列に挿入されていなければならないことを指定する。
【０１０６】
表内存在検証
【０１０７】
図１５は、本発明の実施形態に従い、表内存在検証を示す簡易図である。この検証は、一定の業務論理条件が満たされていることを確実にするために実施される。例えば、一定の条件が満たされる場合、指定された数の操作およびタイプのＳＱＬ文が、操作の一部として発生することになる。
【０１０８】
図１３および１４を参照すると、規則に指定されたｒｅｇｅｘＶａｌｉｄａｔｉｏｎまたはｃｏｎｄｉｔｉｏｎａｌＶａｌｉｄａｔｉｏｎのいずれかが満たされる場合、指定された表の操作はまた、操作の一部でなければならない。
【０１０９】
正規表現検証を使用する表内存在の例として、ＡＤＤ−ＤＯＭＡＩＮプロファイルからの以下の例が提供される。
<existsInTableValidation>
<table name="INTERNATIONALDOMAIN" dbOperation="insert"/>
<regexValidation>
<tableName>DOMAIN</tableName>
<dbOperation max="1" min="1">insert</dbOperation>
<columnName>DOMAINNAME</columnName>
<regex>
<regularExpression>^XN-- .*</regularExpression>
</regex>
</regexValidation>
</existsInTableValidation>
【０１１０】
上記の例は、ＤＯＭＡＩＮ．ＤＯＭＡＩＮＮＡＭＥ列の値が、正規表現「＾ＸＮ−−．＊」に一致する場合、ＩＮＴＥＲＮＡＴＩＯＮＡＬＤＯＭＡＩＮ表への挿入操作も存在しなければならないことを記述している。
【０１１１】
条件付き検証を使用する表内存在検証の例は、次の通りである。
<!-- TRANSFER APPROVE conditional validation-->
<existsInTableValidation>
<table name="DOMAINPENDINGTRANSFER" dbOperation="delete"/>
<table name="DOMAINPENDINGTRANSFERAUDIT" dbOperation="insert"/>
<table name="DOMAINTRANSFER" dbOperation="insert">
<table name="EMAILQUEUE" dbOρeration="insert"/>
<conditionalValidation>
<tableName>TRANSACTIONATTRIBUTES</tableName>
<dbOperation max="100" min="1">insert</dbOperation>
<column value="Directive" name="ATTRIBUTE"/>
<column value="1" name=" ATTRIBUTEVALUE"/>
</conditionalValidation>
</existsInTableValidation>
【０１１２】
上記の条件は、ＴＲＡＮＳＡＣＴＩＯＮＡＴＴＲＩＢＵＴＥＳ．ＡＴＴＲＩＢＵＴＥ列に挿入された値が、「Ｄｉｒｅｃｔｉｖｅ」に等しく、かつ、ＡＴＴＲＩＢＵＴＥＶＡＬＵＥ列に挿入された値が「１」である場合、以下のＳＱＬ操作も発生しなければならないことを規定する。
・ＤＯＭＡＩＮＰＥＮＤＩＮＧＴＲＡＮＳＦＥＲ表の「ｄｅｌｅｔｅ」操作
・ＤＯＭＡＩＮＰＥＮＤＩＮＧＴＲＡＮＳＦＥＲＡＵＤＩＴ表の「ｉｎｓｅｒｔ」操作
・ＤＯＭＡＩＮＴＲＡＮＳＦＥＲ表の「ｉｎｓｅｒｔ」操作
・ＥＭＡＩＬＱＵＥＵＥ表の「ｉｎｓｅｒｔ」操作
【０１１３】
日付検証
【０１１４】
図１６は、本発明の実施形態に従い、日付検証を示す簡易図である。図１６を参照すると、「ｃｏｎｄｉｔｉｏｎ」要素によって指定される該当条件を適用した後、ｆｉｒｓｔＴａｂｌｅ．ｃｏｌｕｍｎの日付値が、ｓｅｃｏｎｄＴａｂｌｅ．ｃｏｌｕｍｎの値と比較される。属性「ｔｒｕｎｃａｔｅＴｉｍｅ」は、日付値の時間部分が比較のために使用されなければならないかどうかを示すブール値である。「ｊａｖａＣａｌｅｎｄａｒＣｏｎｓｔａｎｔ」は、ｊａｖａ．ｕｔｉｌ．Ｃａｌｅｎｄａｒクラスの整数定数に指定されるように更新される日付のフィールドの値を参照する。列の日付に適用される値は、「ｖａｌｕｅ」要素によって指定されるような固定「値」とすることができるか、または値は、別の表の別の日付列（例えば、ＤＯＭＡＩＮ表のＲＥＧＩＳＴＲＡＴＩＯＮＰＥＲＩＯＤ）の値とすることができる。
【０１１５】
日付検証の例として、ＡＤＤ−ＤＯＭＡＩＮプロファイルから以下の例が提供される。
<dateValidation>
<firstTable dbOρeration="insert" name="DOMAIN">
<column>CREATEDDATE</column>
<condition javaCalendarConstant="1" truncateTime="true">
<value>10</value>
</condition>
</firstTable>
<secondTable dbOperation="insert" name="DOMAIN">
<column>REGISTRATIONEXPIRATIONDATE</column>
<condition truncateTime="true"/>
</secondTable>
</dateValidation>
【０１１６】
上記の例において、ＲＥＧＩＳＴＲＡＴＩＯＮＥＸＰＩＲＡＴＩＯＮＤＡＴＥ値が、ドメインのＣＲＥＡＴＥＤＤＡＴＥから１０年を超えないことを確実にしている。この検証で発生する操作のシーケンスは次の通りである。
・ＤＯＭＡＩＮ．ＣＲＥＡＴＥＤＤＡＴＥの値がパースされて、Ｊａｖａ．ｕｔｉｌ．Ｃａｌｅｎｄａｒオブジェクトを作成する。
・ｔｒｕｎｃａｔｅＴｉｍｅがｔｒｕｅに設定されているので、日付の時間部分が切り捨てられる。
・ｊａｖａＣａｌｅｎｄａｒＣｏｎｓｔａｎｔの「１」は、日付の「ＹＥＡＲ」構成要素を指定する。
・次いで、値「１０」が日付の「ＹＥＡＲ」構成要素に適用され、ＣＲＥＡＴＥＤＤＡＴＥから１０年の日付オブジェクトを有効に作成する。
・同様に、ＲＥＧＩＳＴＲＡＴＩＯＮＥＸＰＩＲＡＴＩＯＮＤＡＴＥが作成される。
・最後に、ＲＥＧＩＳＴＲＡＴＩＯＮＥＸＰＩＲＡＴＩＯＮＤＡＴＥ＜＝ＣＲＥＡＴＥＤＤＡＴＥの値から新しく作成された日付オブジェクト、であることを確実にするために、確認が行われる。
【０１１７】
カスタム検証
【０１１８】
ＸＭＬで表現することが面倒すぎる所定の複雑な検証規則は、コードのカスタム検証を介して実行される。図１７は、本発明の実施形態に従い、カスタム検証を示す簡易図である。ＳＹＮＣ−ＤＯＭＡＩＮ操作のカスタム検証の例を以下に示す。
<customValidation ignore="false"
ruleName="SYNC-DOMAIN: Registration Expiration date validation rule">
<dbData>
<table>
<tableName>DOMAIN</tableName>
<dbOperation max="1" min="1">UPDATE</dbOperation>
<columnName>REGISTRATIONEXPIRATIONDATE</columnName>
</table>
</dbData>
<transLogData>
<transLogEntryParam name="syncDt" ignoreCase="true"/>
</transLogData>
<javaClassName>com.verisign.sa.custom.validation.syncdomain.SyncDomainExpirationDate
</javaClassName>
</customValidation>
【０１１９】
登録有効期限日に関する検証は全て、ＳｙｎｃＤｏｍａｉｎＥｘｐｉｒａｔｉｏｎＤａｔｅのｊａｖａクラスで実施される。検証のうちのいくつかは次の通りである。
・ドメインは、２月２９日には同期できない。
・ＤＯＭＡＩＮ．ＲＥＧＩＳＴＲＡＴＩＯＮＥＸＰＩＲＡＴＩＯＮＤＡＴＥの値は、トランザクションログファイルに書き込まれた「ｓｙｎｃＤｔ」パラメータに基づいて正しく計算される。
【０１２０】
カスタム検証クラスは全て、Ｊａｖａ（登録商標）  Ｒｅｆｌｅｃｔｉｏｎ  ＡＰＩを使用して予めインスタンス化され、ＣｕｓｔｏｍＶａｌｉｄａｔｉｏｎＣａｃｈｅＭａｎａｇｅｒでキャッシュされる。カスタム検証をサポートする全てのクラスは、次のインターフェースを実装しなければならない。
public interface CustomValidation {
public void validate (CustomValidator aCustomValidator,
SQLSummary aSQLSummary, TransLogSummary aTransLogSummary)
throws CustomValidationException;
}
【０１２１】
図１８は、本発明の実施形態に従い、ドメイン追加操作の工程フローを示す簡略化された流れ図である。トランザクションおよびトランザクション属性が挿入される（１８１０および１８１２）。ドメインおよびドメイン監査が挿入される（１８１４および１８１６）。ＥＰＰドメインステータスおよびＥＰＰドメインステータス監査が挿入される（１８１８および１８２０）。ドメイン名が国際化ドメイン名である場合（１８２２）、国際化ドメイン名のための工程が利用される。国際化ドメイン名のプロセスは、国際化ドメインおよび国際化ドメイン監査を挿入すること（１８２４および１８２６）を含む。加えて、文字バリアントおよび文字バリアント監査が、特定の外国語のために挿入される（１８２８および１８３０）。国際化ドメイン名プロセスの一部として、ドメイン文字バリアントリンクおよびドメイン文字バリアントリンク監査が挿入される（１８３２および１８３４）。国際化ドメイン名プロセスが完了した後、トランザクションが更新される（１８５０）。
【０１２２】
ドメイン名が国際化ドメイン名ではない場合（１８２２）、ネームサーバがリンクされているかどうかの判定が行われる（１８４０）。ネームサーバがリンクされている場合、ドメインネームサーバリンクおよびドメインネームサーバリンク監査が挿入される（１８４２および１８４４）。ドメインネームサーバリンクおよびドメインネームサーバリンク監査が挿入された後、トランザクションが更新される（１８５０）。ネームサーバがリンクされていない場合、トランザクションが更新される（１８５０）。
【０１２３】
図１８に図示される特定のステップは、本発明の実施形態に従い、ドメイン追加操作を実施する特定の方法を提供することを理解されたい。代替の実施形態に従い、ステップの他のシーケンスを実施することもできる。例えば、本発明の代替実施形態は、上記に示したステップを異なる順序で実施する場合がある。さらに、図１８に図示される個別のステップは、個別のステップに適した多様なシーケンスで実施される場合がある、複数のサブステップを含む場合がある。さらにまた、特定のアプリケーションに応じて、さらなるステップが追加または削除される場合がある。当業者は、多数の変形、変更、および代替を認識するであろう。
【０１２４】
トランザクションログファイルに対応するトランザクションログエントリがないデータベースに発生する、有効なデータベーストランザクションが存在する。発明人は、対応するトランザクションログエントリのない４３の有効なデータベーストランザクションを特定した。これらの４３のデータベーストランザクションのためのプロファイルが作成された。
【０１２５】
トランザクションログエントリのないプロファイルの例を以下に示す。
<?xml version="1.0" encoding="UTF-8"?>
<RegistryOperationProfile xmlns="xml.profile.sa.verisign.com">
<registryOperation>
<operationInfo>
<operationID transLogEntryExists="false">-1</operationID>
<operationName>KNOWN ISSUE</operationName>
<conceptClassName>KNOWN ISSUE</conceptClassName>
</operationInfo>
<databaseInfo>
<table name="TRANSACTION" optional="false">
<dbOperation max="1" min="1">UPDATE</dbOρeration>
<column>FILEID</column>
</table>
</databaseInfo>
</registryOperation>
</RegistryOperationProfile>
【０１２６】
上記のプロファイルは、次のことを記述する。「ＵＰＤＡＴＥ  ＴＲＡＮＳＡＣＴＩＯＮ  ＳＥＴ  ＦＩＬＥＩＤ＝＜何らかの値＞」等のＳＱＬ文がトランザクションでそれだけで発生すると、それは、ｏｐｅｒａｔｉｏｎＩＤおよびｃｏｎｃｅｐｔＣｌａｓｓＮａｍｅタグによって指定されるＫＮＯＷＮ  ＩＳＳＵＥ（既知の問題）である。プロファイルの中で指定された列が更新される時のみ、ＳＱＬ文は既知の問題として指定される。例えば、ＦＩＬＥＩＤ以外の別の列がＴＲＡＮＳＡＣＴＩＯＮ表で更新される場合、これは、悪意のあるデータベーストランザクションと見なされる。
【０１２７】
ＰｒｏｆｉｌｅＭａｎａｇｅｒがトランザクションログエントリのないプロファイルをロードする時、キーは、＜ＴａｂｌｅＮａｍｅ１．ＯｐｅｒａｔｉｏｎＴｙｐｅ（＜ｃｏｌｕｍｎ１，ｃｏｌｕｍｎ２，．．．），ＴａｂｌｅＮａｍｅ２．ＯｐｅｒａｔｉｏｎＴｙｐｅ（＜ｃｏｌｕｍｎ１，ｃｏｌｕｍｎ２，．．．）．．．．＞の形式で生成される。
【０１２８】
例えば、上記のプロファイルのＳＱＬ文に生成されたキーは、ＴＲＡＮＳＡＣＴＩＯＮ．ＵＰＤＡＴＥ（ＦＩＬＥＩＤ）となる。このキーは、次に、メモリに関連プロファイルをキャッシュするために使用される。データベーストランザクション毎に、関連するＯＰＥＲＡＴＩＯＮＩＤ列の値は、ＳＱＬ文「ＩＮＳＥＲＴ  ＩＮＴＯ  ＴＲＡＮＳＡＣＴＩＯＮ」表から呼び出される。「ＩＮＳＥＲＴ  ＩＮＴＯ  ＴＲＡＮＳＡＣＴＩＯＮ」表のＳＱＬ文を含有しないデータベーストランザクションが呼び出されると、キーが上記の形式で生成される。このキーを使用して、次いで、関連のプロファイルがＰｒｏｆｉｌｅＭａｎａｇｅｒから呼び出される。プロファイルの＜ｏｐｅｒａｔｉｏｎＮａｍｅ＞タグの値が「ＫＮＯＷＮ  ＩＳＳＵＥ」である場合、これは、有効なデータベーストランザクションと見なされる。生成されたキーでプロファイルが呼び出されない場合、または＜ｏｐｅｒａｔｉｏｎＮａｍｅ＞タグの値が「ＫＮＯＷＮ  ＩＳＳＵＥ」に等しくない場合、これは、悪意のあるデータベーストランザクションと見なされる。
【０１２９】
本発明の実施形態は、プロファイルに指定された検証全てを実施するために必要な情報を全て有するサマリを提供する。データベースリーダまたはアプリケーショントランザクションログのいずれかから呼び出された情報全ては、メモリにサマリとして保存される。２つのタイプのサマリが存在する。
・ＳＱＬＳｕｍｍａｒｙ−データベースリーダからのパースされた関連情報を含有する。データベースの各トランザクションは、１つのＳＱＬＳｕｍｍａｒｙとして表現される。
・ＴｒａｎｓＬｏｇＳｕｍｍａｒｙ−トランザクションログからのパースされた関連情報を含有する。トランザクションログの各行は、１つの個別のＴｒａｎｓＬｏｇＳｕｍｍａｒｙである。
【０１３０】
本発明の実施形態は、監査可能なサマリを提供する。ＳＱＬおよびトランザクションログの両方のサマリは、ＡｕｄｉｔａｂｌｅＳｕｍｍａｒｙを拡張する。ＡｕｄｉｔａｂｌｅＳｕｍｍａｒｙは、サマリ両方で共通な操作を指定する。トランザクションログファイルまたはデータベースのいずれかから呼び出された最大のＳＣＮと比較される時、サマリキャッシュエントリの有効期限が切れたかどうかを発見するために、「ｈａｓＥｘｐｉｒｅｄ（）」メソッドが起動される。
public interface AuditableSummary extends Serializable {
Date getCreationDate ();
boolean hasExpired ();
String getTransactionId ();
long getSCN ();
}
【０１３１】
ｈａｓＥｘｐｉｒｅｄ（）メソッドは、指定期間内に検証できなかったサマリがエラーと見なされることを確実にする。全てのサマリはメモリに持続されるので、この安全策は、メモリの中のサマリ数に上限が存在することを確実にする。
【０１３２】
本発明の実施形態は、トランザクション境界内に含有されるＳＱＬ文を成功してパースし、検証した成果物である、ＳＱＬサマリを提供する。ＳＱＬサマリの中心原則は、データベースリーダが実施形態で利用されているかどうかに関わらず、ＳＲＳレジストリのトランザクションを検証するために有用であろうインターフェースを公開することである。
public interface SQLSummary extends AuditableSummary {
int getOperationId ();
RegistryOperationProfile getRegistryOperationProfile ();
List<String> getColumnValues (String tableName, String operationType, String column, boolean aNewVal );
}
【０１３３】
各ＳＱＬＳｕｍｍａｒｙインスタンスは、レジストリプロファイルに関連し、ＳＱＬ文の集合体を含有する。ＳＱＬＳｔａｔｅｍｅｎｔは、パースされたＳＱＬ文から関連情報を捕捉するためのインターフェースの全体的な階層構造の親のインターフェースである。具体的には、ＳＱＬＳｔａｔｅｍｅｎｔのサブクラスは、「ＩＮＳＥＲＴ／ＵＰＤＡＴＥ／ＤＥＬＥＴＥ」のＳＱＬ文の中の情報を表現するために使用される。ＳＱＬサマリは、ｊａｖａ．ｕｔｉｌ．ＬｉｎｋｅｄＢｌｏｃｋｉｎｇＱｕｅｕｅでキャッシュされる。
【０１３４】
トランザクションログサマリ
【０１３５】
トランスログサマリは、トランザクションログエントリを成功してパースした最終結果である。トランスログサマリは、トランザクションＩＤ別にキーされてキャッシュされる。ＳＱＬサマリキャッシュからコリレータによって呼び出される各ＳＱＬサマリに対して、対応するトランスログサマリは、トランザクションＩＤを使用してトランスログサマリキャッシュから呼び出される。ＳＱＬサマリに関連するレジストリプロファイルは、次いで、トランザクションログ検証規則をＳＱＬサマリおよびトランザクションログサマリに適用するために使用される。
public interface TransLogSummary extends AuditableSummary {
void setCreationDate ( Date date );
void setSCN ( long aSCN );
String getSessionId ();
void setSessionId ( String sessionId );
void addMetadata ( String aValue );
String getMetadataAtPosition (int aPosition );
void addTransLogParam ( TransLogParam aParam );
TransLogParam getTransLogParamByName ( String aParamName );
String getConceptClassName ();
void setConceptClassName ( String aConceptClassName );
Collection<TransLogParam> getParams ();
}
【０１３６】
コリレータ
【０１３７】
コリレータスレッドは、ＳＱＬサマリのデータをトランザクションログサマリのデータと相関させる重要な操作を実施する。ＳＱＬサマリは、ｊａｖａ．ｕｔｉｌ．ＢｌｏｃｋｉｎｇＬｉｎｋｅｄＱｕｅｕｅでキャッシュされる。トランザクションログサマリは、ｊａｖａ．ｕｔｉｌ．ＨａｓｈＭａｐ＜ＴｒａｎｓａｃｔｉｏｎＩＤ，ＴｒａｎｓＬｏｇＳｕｍｍａｒｙ＞でキャッシュされる。
【０１３８】
スタートアップ時、サマリコリレータ４５０は、特定の数のコリレータスレッドをインスタンス化する。コリレータスレッドで、次のシーケンスの操作が発生する。
・コリレータスレッドは、ＳＱＬサマリキャッシュおよびトランザクションログサマリキャッシュからのデータの相関を開始するよう通知されることを待機する。
・ＳＱＬサマリキャッシュから、ＳＱＬサマリが呼び出される。
・ＳＱＬサマリのトランザクションＩＤを使用して、トランザクションログサマリキャッシュから、対応するトランザクションログサマリが呼び出されようとする。
・次の２つの条件のうち１つが発生する。
ｏ対応するトランザクションログサマリが呼び出される。
ｏ対応するトランザクションログをトランザクションログサマリから呼び出すことができない。
■この場合、ＳＱＬサマリの作成タイムスタンプに基づいて、ＳＱＬサマリの有効期限が切れていない場合、ＳＱＬサマリはＳＱＬサマリキャッシュに戻される。
■ＳＱＬサマリの有効期限が切れている場合、エラーとしてログに記録され、キャッシュの中の次のＳＱＬサマリの処理を続行する。
・対応するトランザクションログサマリが呼び出されると、トランザクションサマリおよびＳＱＬサマリに対して、プロファイルに指定された全てのトランザクションログ検証規則が適用される。相関に成功したサマリの数が増分される。
・任意の検証エラーがログに記録される。
【０１３９】
ＡＰＥフレームワーク統合
【０１４０】
前述のように、セキュリティオーディタは、ＡＰＥフレームワークと統合される。ＡＰＥフレームワークは、ＯＬＴＰトランザクションデータの発生源の詳細を公開しない。このため、セキュリティオーディタに関する限り、それはＡＰＥフレームワークのメモリ内キューからＯＬＴＰトランザクションデータを呼び出すだけである。ＡＰＥフレームワークは、Ｓｐｒｉｎｇコンテキストを介して、ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒＦａｃａｄｅをインスタンス化する。Ｓｐｒｉｎｇ構成ファイル「ＨｏｓｔｅｄＣｏｍｐｏｎｅｎｔ−ｃｏｎｆｉｇ．ｘｍｌ」は、ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒの中に含まれる。
<?xml version= "1.0" encoding = "UTF-8"?>
<beans xmlns= http://www.springframework.org/schema/beans
xmlns : xsi =http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name= "hostedComponent"
class="com.verisign.sa.engine.SecurityAuditorFacade">
<!-- defined in AsyncProcAdapter-conf.xml -->
<property name = "frameworkFacade" ref= "frameworkFacade"> </property>
</bean>
</beans>
【０１４１】
ＡＰＥフレームワークのＡｓｙｎｃＰｒｏｃｅｓｓｉｎｇＥｎｇｉｎｅは、データベースリーダから呼び出されることが必要なＯＬＴＰトランザクションデータの開始日時を判定するために、ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒＤａｔｅＲａｎｇｅクラスを起動する。ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒＤａｔｅＲａｎｇｅクラスは、この情報を「ｓｔａｒｔｄａｔｅ．ｔｘｔ」ファイルに書き込む。データベースリーダプロセスは、この開始日時を渡すことによって、開始される。データベースリーダプロセスのための構成ファイルにおいて、Ｊａｖａ（登録商標）ユーザ終了クラスはＡｓｙｎｃＰｒｏｃｅｓｓｉｎｇＥｎｇｉｎｅクラスであるように設定される。ＡｓｙｎｃＰｒｏｃｅｓｓｉｎｇＥｎｇｉｎｅクラスは、これによって、Ｓｐｒｉｎｇコンテキストを介して、ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒＦａｃａｄｅをインスタンス化する。ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒＦａｃａｄｅは、これによって、ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒをインスタンス化する。このように、本発明の実施形態は、ＡＰＥフレームワークと、ホストされる構成要素である、ＳｅｃｕｒｉｔｙＡｕｄｉｔｏｒとの間に統合を提供する。
【０１４２】
本発明の実施形態によって提供されるレポート機能の一部として、全ての検証エラーはログファイルに書き込まれる。２つのレポート（要約および詳細）は、セキュリティオーディタによって毎日生成される。
【０１４３】
エラーログフォーマット
【０１４４】
エラーロギングは、ＳＡＥｘｃｅｐｔｉｏｎクラスの中の１つの場所で実行される。エラーロギングのフォーマットは、特定の実施形態では次の通りである。
エラー：＜エラータイプ＞
シーケンス番号：＜このエラーが発生した回数＞
ＲｅｇＯｐ：＜操作名＞
トランザクションＩＤ：＜違反トランザクションのトランザクションＩＤ＞
説明：＜エラーメッセージ＞
【０１４５】
検証例外の処理がどの程度下位にまで発生したかに応じて、操作名およびトランザクションＩＤは必ずしも示されない場合がある。シーケンス番号は、この例外がセキュリティオーディタで発生した回数を指定する。
【０１４６】
要約レポート
【０１４７】
要約レポートは、セキュリティオーディタによって毎日生成される。要約レポートは、トランザクションを監査している間に発生したエラーのタイプおよび件数を含有する。処理されたレコードの数、それらの処理にかかった時間等の統計情報も存在する。以下は、本発明の実施形態に従い作成される例示的なレポートである。
セキュリティオーディタ要約レポート
開始：０４−１５−２００９  ００：００：００
終了：０４−１６−２００９  ００：００：００
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
以下の検証エラーが発生した。詳細はエラーログファイルを参照のこと。
不整合：データ：２０２
無効なＳＱＬ：６
データベーストランザクション不一致：７４４
受信されたデータベーストランザクション合計：１，８８４，０５１
トランザクション表エントリを含まないデータベーストランザクション合計：２１，７６８
無視（ＡＢＥ、ＳｕｐｅｒＤＮＳ、無視可能な表）：５，８０１
未認識（可能性として悪意がある）：０
認識（既知のプロファイルを有する）：１５，９６７
トランザクション表エントリを含むデータベーストランザクション合計：１，８６２，２８３
無視（バッチおよび１３のＥＰＰ操作のうちの１つではない）：２４４，６５９
未認識（可能性として悪意がある）（プロファイルなし）：０
無効（可能性として悪意がある）：６
一致するアプリケーショントランザクション未検出（可能性として悪意がある）：７４４
キャッシュ内未処理トランザクション：５０
相関成功：１，６１６，６２２
相関失敗（可能性として悪意がある）：２０２
相関既知の問題：０
受信されたアプリケーショントランザクション合計：１，６６６，１２４
開始時無視（ＳＡリスタート時のみ）：４８，３０９
相関が不要なために無視：９
一致するデータベーストランザクション未検出（可能性として悪意がある）：０
キャッシュ内未処理トランザクション：９８２
相関成功：１，６１６，６２２
相関失敗（可能性として悪意がある）：２０２
相関既知の問題：０
既知の問題であるために無視されたトランザクションエントリを含むデータベーストランザクション合計：０
既知の問題であるために無視された相関失敗合計：０
処理時間：０時間４２分３５秒
【０１４８】
詳細レポート
【０１４９】
詳細レポートは、セキュリティオーディタによって毎日生成される。このレポートには、一意のエラーが発生した回数およびエラーの詳細が示される。詳細レポートは、システム運用者が、検証エラーの正確な原因を判定するために使用できる有用な情報を含有する。以下は、本発明の実施形態に従い作成される例示的な詳細レポートである。
セキュリティオーディタ詳細レポート
開始：０４−１５−２００９  ００：００：００
終了：０４−１６−２００９  ００：００：００
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
以下の一意の検証エラーが発生した。詳細はエラーログファイルを参照のこと。
〜〜〜〜〜〜〜〜発生数［        ４］〜〜〜〜〜〜〜〜〜〜
エラー：データベーストランザクション不一致
ＲｅｇＯｐ：ＡＤＤ−ＮＡＭＥＳＥＲＶＥＲ
ＳＱＬサマリの有効期限切れ。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜発生数［        １］〜〜〜〜〜〜〜〜〜〜
エラー：データベーストランザクション不一致
ＲｅｇＯｐ：ＤＥＬ−ＮＡＭＥＳＥＲＶＥＲ
ＳＱＬサマリの有効期限切れ。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜発生数［        １９］〜〜〜〜〜〜〜〜〜〜
エラー：データベーストランザクション不一致
ＲｅｇＯｐ：ＤＥＬ−ＤＯＭＡＩＮ
ＳＱＬサマリの有効期限切れ。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜発生数［        ２０２］〜〜〜〜〜〜〜〜〜〜
エラー：データベーストランザクション不一致
ＲｅｇＯｐ：ＱＵＩＴ
ＳＱＬサマリの有効期限切れ。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜発生数［        ９８］〜〜〜〜〜〜〜〜〜〜
エラー：不整合：データ
ＲｅｇＯｐ：ＳＥＳＳＩＯＮ
ＲＥＧＩＳＴＲＹＳＥＳＳＩＯＮ．［ＳＥＳＳＩＯＮＩＤ］！の値＝トランスログエントリパラメータ［Ｎ／Ａ］
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜発生数［        ８１］〜〜〜〜〜〜〜〜〜〜
エラー：データベーストランザクション不一致
ＲｅｇＯｐ：ＴＲＡＮＳＦＥＲ−ＤＯＭＡＩＮ
ＳＱＬサマリの有効期限切れ。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜発生数［        ６］〜〜〜〜〜〜〜〜〜〜
エラー：無効なＳＱＬ
ＲｅｇＯｐ：ＲＥＮＥＷ−ＤＯＭＡＩＮ
予測外：ＤＯＭＡＩＮＮＡＭＥＳＥＲＶＥＲＬＩＮＫ．ＵＰＤＡＴＥ
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜発生数［        ３１］〜〜〜〜〜〜〜〜〜〜
エラー：データベーストランザクション不一致
ＲｅｇＯｐ：ＲＥＮＥＷ−ＤＯＭＡＩＮ
ＳＱＬサマリの有効期限切れ。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜発生数［        ５６］〜〜〜〜〜〜〜〜〜〜
エラー：データベーストランザクション不一致
ＲｅｇＯｐ：ＲＥＳＴＯＲＥ−ＲＥＱＵＥＳＴ
ＳＱＬサマリの有効期限切れ。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜発生数［        １０２］〜〜〜〜〜〜〜〜〜〜
エラー：不整合：データ：
ＲｅｇＯｐ：ＱＵＩＴ
ＲＥＧＩＳＴＲＹＳＥＳＳＩＯＮ．［ＳＥＳＳＩＯＮＩＤ］！の値＝トランスログエントリパラメータ［Ｎ／Ａ］
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜発生数［        １８］〜〜〜〜〜〜〜〜〜〜
エラー：データベーストランザクション不一致
ＲｅｇＯｐ：ＭＯＤ−ＮＡＭＥＳＥＲＶＥＲ
ＳＱＬサマリの有効期限切れ。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜発生数［        ２］〜〜〜〜〜〜〜〜〜〜
エラー：不整合：データ
ＲｅｇＯｐ：ＡＤＤ−ＮＡＭＥＳＥＲＶＥＲ
ＮＡＭＥＳＥＲＶＥＲ．［ＳＥＲＶＥＲＮＡＭＥ］！の値＝トランスログエントリパラメータ［ｓＮｍ］
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜発生数［        ６５］〜〜〜〜〜〜〜〜〜〜
エラー：データベーストランザクション不一致
ＲｅｇＯｐ：ＭＯＤ−ＤＯＭＡＩＮ
ＳＱＬサマリの有効期限切れ。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜発生数［        ４８］〜〜〜〜〜〜〜〜〜〜
エラー：データベーストランザクション不一致
ＲｅｇＯｐ：ＲＥＳＴＯＲＥ−ＲＥＰＯＲＴ
ＳＱＬサマリの有効期限切れ。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
〜〜〜〜〜〜〜〜発生数［        ２１９］〜〜〜〜〜〜〜〜〜〜
エラー：データベーストランザクション不一致
ＲｅｇＯｐ：ＳＥＳＳＩＯＮ
ＳＱＬサマリの有効期限切れ。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
【０１５０】
詳細エラーログ
【０１５１】
本発明の実施形態は、詳細レポートといくつかの類似点を共有する詳細エラーログを提供する。各詳細検証エラーが詳細レポートスレッドに送信されると、スレッドは最初に、メッセージを詳細エラーログに記録する。次いで、メッセージが発生した回数の件数とともに、詳細レポートに書き込まれるメッセージをキャッシュする。
【０１５２】
詳細エラーログは、セキュリティオーディタ構成ファイルに指定されたログフォルダに書き込まれる。詳細エラーログの名前は、ｓａ．ｅｒｒ．ｄｅｔａｉｌ．ｌｏｇ．＜日付＞のフォーマットである。
【０１５３】
サンプルログの例は次の通りである。
２００９１２１８  １１２２１０  ＩＮＦＯエラー：未知のデータベーストランザクション
説明：ＴＲＡＮＳＡＣＴＩＯＮ．ＵＰＤＡＴＥ（ＳＥＳＳＩＯＮＩＤ）
２００９１２１８  １１２２３０  ＩＮＦＯエラー：未知のデータベーストランザクション：既知の問題
ＲｅｇＯｐ：ＫＮＯＷＮ  ＩＳＳＵＥ
説明：ＴＲＡＮＳＡＣＴＩＯＮ．ＵＰＤＡＴＥ（ＦＩＬＥＩＤ）
【０１５４】
冗長エラーログ
【０１５５】
冗長エラーログは、検証エラーの詳細を全て含有する。これは、違反トランザクションの列の実際の値を含む。システム運用者は、最初に詳細レポートを調べることができ、必要であれば、冗長エラーログで必要に応じて詳細情報を調べることができる。冗長エラーログは、セキュリティオーディタ構成ファイルに指定されたログフォルダに書き込まれる。冗長エラーログの名前は、ｓａ．ｅｒｒ．ｌｏｇ．＜日付＞のフォーマットである。
【０１５６】
サンプルの冗長ログの例は次の通りである。
２００９１２１６  ２０３９１８  ｃｏｍ．ｖｅｒｉｓｉｇｎ．ｓａ．ｓｕｍｍａｒｙ．ＳＱＬＳｕｍｍａｒｙＵｔｉｌ  エラー
／＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊／
エラー：無効なデータベーストランザクション
シーケンス：１
ＲｅｇＯｐ：ＡＤＤ−ＤＯＭＡＩＮ
ＴｒａｎｓＩＤ：１２９９２１０６０５
説明：予測：［ＣＨＡＲＧＥＤＴＲＡＮＳＡＣＴＩＯＮ．ＩＮＳＥＲＴ］
／＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊／
２００９１２１６  ２０３９１８  ｃｏｍ．ｖｅｒｉｓｉｇｎ．ｓａ．ｓｕｍｍａｒｙ．ＳＱＬＳｕｍｍａｒｙＵｔｉｌ  エラー
／＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊／
エラー：無効なデータベーストランザクション
シーケンス：２
ＲｅｇＯｐ：ＤＥＬ−ＤＯＭＡＩＮ
ＴｒａｎｓＩＤ：１２９９２１０６０６
説明：予測：［ＣＨＡＲＧＥＤＴＲＡＮＳＡＣＴＩＯＮ．ＩＮＳＥＲＴ］
／＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊／
２００９１２１６  ２０３９１８  ｃｏｍ．ｖｅｒｉｓｉｇｎ．ｓａ．ｄｂ．ｐｒｏｃｅｓｓｏｒ．ｕｔｉｌ．ＤＢＰｒｏｃｅｓｓｏｒＵｔｉｌ  エラー
／＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊／
エラー：未知のデータベーストランザクション：既知の問題
シーケンス：１
ＲｅｇＯｐ：ＫＮＯＷＮ  ＩＳＳＵＥ
説明：ＴＲＡＮＳＡＣＴＩＯＮ．ＵＰＤＡＴＥ（
ＴＲＡＮＳＡＣＴＩＯＮＩＤ＝１２８５２０８４７５，
ＳＥＳＳＩＯＮＩＤ＝−１２３，
ＯＰＥＲＡＴＩＯＮＩＤ＝１１，
ＲＥＧＩＳＴＲＡＲＩＤ＝５００００００７，
ＴＲＡＮＳＡＣＴＩＯＮＤＡＴＥ＝２００５−０３−１６：１４：５７：２９，
ＳＣＮ  ＝５７８１７７３１４３２，
ＦＩＬＥＩＤ＝−１０，
ＢＬＯＣＫＩＤ＝ｎｕｌｌ，
ＲＯＷＩＤ＝ＡＡＡＣｕＵＡＢＱＡＡＡＡＢ８ＡＡＡ
）
／＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊＊／
【０１５７】
監視（ＪＭＸ管理サーバ）
【０１５８】
セキュリティオーディタは、いくつかの実施形態において管理サーバをホストする。上記のように、セキュリティオーディタおよびその構成要素のステータスに関する統計を提供するように、管理サーバに登録されるいくつかのｍｂｅａｎが存在する。
【０１５９】
Ｍｂｅａｎ
【０１６０】
監視およびレポート目的で、セキュリティオーディタに定義される複数のｍｂｅａｎが存在する。セキュリティオーディタの構成要素として定義されるｍｂｅａｎがある。加えて、構成情報およびセキュリティオーディタ自身のために定義されるｍｂｅａｎがある。
【０１６１】
エンジン
【０１６２】
Key:com.verisign.SecurityAuditor:key1=SecurityAuditor
【０１６３】
このｍｂｅａｎは、セキュリティオーディタの属性および操作を有する。以下の属性が公開される。
【０１６４】
開始日時文字列：セキュリティオーディタの開始日時。監査されているトランザクションの作成タイムスタンプは、トランザクションが監査サイクルの現在のタイムフレームにあるかどうかを判定するために使用される。典型的に、これは一昨日の真夜中である。
【０１６５】
終了日時文字列：セキュリティオーディタの終了日時。開始日時と同様に、終了日時は、監査サイクルを停止し、レポートを生成することが必要な時を判定するために使用される。典型的に、これは昨日の夜中である。
【０１６６】
開始済み：この属性は、ブール変数である。真の値は、セキュリティオーディタが稼動中であることを示す。これは、セキュリティオーディタが稼動しているかどうかを判定するために、外部監視構成要素が使用することができる。
【０１６７】
現在処理中：この属性は、ブール変数である。真の値は、セキュリティオーディタがトランザクションを現在監査していることを示す。これは、セキュリティオーディタが稼動しているかどうかを判定するために、外部監視構成要素が使用することができる。
【０１６８】
構成
【０１６９】
Key:com.verisign.SecurityAuditor:key1=Configuration
【０１７０】
セキュリティオーディタの構成ファイルに指定された構成情報は、読み出し専用属性として公開される。図１９は、本発明の実施形態に従い、構成情報を示す画面図である。
【０１７１】
残りのＭｂｅａｎは、セキュリティオーディタの構成要素として定義される。したがって、次のｍｂｅａｎのキーに関連するサブタイプが存在する。
【０１７２】
例外マネージャ
【０１７３】
Key:com.verisign.SecurityAuditor:key1= ExceptionManager
【０１７４】
このｍｂｅａｎは、ログエラーカウントおよびディスプレイエラーカウントの２つの操作を定義する。ログエラーカウントは、発生した検証エラーのエラーカウントをエラーログファイルに記録する操作である。ディスプレイエラーカウントは、ｌｏｇＥｒｒｏｒＣｏｕｎｔｓ操作によってエラーログファイルに書き込まれたのと同じ情報を含むｊａｖａ．ｌａｎｇ．Ｓｔｒｉｎｇを返す操作である。この情報は、次いで、管理コンソール等の外部構成要素に表示することができる。
【０１７５】
プロファイルマネージャ
【０１７６】
Key:com.verisign.SecurityAuditor:key1= ProfileManager
【０１７７】
メモリにロードされたプロファイルの数：この属性は、プロファイルマネージャによってパースされ、メモリにロードされたプロファイルの数を指定する。
【０１７８】
リストプロファイル操作名：この操作は、メモリのプロファイルの操作名のｊａｖａ．ｌａｎｇ．Ｓｔｒｉｎｇを返す。操作名の例は、ＡＤＤ−ＤＯＭＡＩＮ、ＲＥＳＴＯＲＥ−ＤＯＭＡＩＮ等である。
【０１７９】
再ロードプロファイル：この操作は、ディスク上のプロファイルをメモリ内に強制的に再ロードする。この操作は、プロファイルに変更が存在した場合に、要求に応じてプロファイルを再ロードするために使用できる。このため、変更されたプロファイルは、セキュリティオーディタをシャットダウンすることなく、メモリにロードすることができる。
【０１８０】
レポートマネージャ
【０１８１】
Key:com.verisign.SecurityAuditor:key1= ReportManager
【０１８２】
最新サマリレポート：この属性は、セキュリティオーディタの監査されたトランザクションの最新の使用可能なレポートを含有する。セキュリティオーディタによって生成された最新の要約レポートは、この属性を介して使用可能である。このように、最新の要約レポートは、管理コンソール等の外部構成要素に表示することができる。
【０１８３】
ＳＱＬサマリキャッシュマネージャ
【０１８４】
Key: com.verisign.SecurityAuditor:key1= SQLSummaryCacheManager
【０１８５】
このｍｂｅａｎは、ＳＱＬサマリキャッシュに関する統計を有する。統計は以下を含む。
【０１８６】
キャッシュ内数字要約：この属性は、有効なＳＱＬサマリキャッシュの現在のサイズを指定する。
【０１８７】
有効なＳＱＬサマリ合計：この属性は、現在の監査サイクルで有効なＳＱＬサマリキャッシュに追加された有効なＳＱＬサマリの合計数を指定する。
【０１８８】
無効なＳＱＬサマリ合計：この属性は、現在の監査サイクルで無効なＳＱＬサマリキャッシュに追加された無効なＳＱＬサマリの合計数を指定する。
【０１８９】
サマリコリレータマネージャ
【０１９０】
このｍｂｅａｎは、トランザクションおよびＳＱＬサマリキャッシュの相関に関する情報を有する属性を有する。
【０１９１】
Key: com.verisign.SecurityAuditor:key1= SummaryCorrelatorManager
【０１９２】
最後のＳＱＬサマリ：この属性は、最後に相関されたＳＱＬサマリのタイムスタンプを指定する。
【０１９３】
最後のトランスログサマリ：この属性は、最後に相関されたＳＱＬサマリのタイムスタンプを指定する。
【０１９４】
相関されたトランザクション数：この属性は、ＳＱＬおよびトランザクションログサマリキャッシュで相関されたトランザクションの数を指定する。
【０１９５】
トランスログサマリキャッシュマネージャ
【０１９６】
Key: com.verisign.SecurityAuditor:key1= TransLogSummaryCacheManager
【０１９７】
このｍｂｅａｎは、トランザクションログサマリキャッシュに関する統計を有する。
【０１９８】
キャッシュ内数字要約：この属性は、トランザクションログサマリキャッシュの現在のサイズを指定する。
【０１９９】
トランスサマリ合計：この属性は、現在の監査サイクルでトランザクションログサマリキャッシュに追加されたトランザクションログサマリの合計数を指定する。
【０２００】
例外階層
【０２０１】
セキュリティオーディタで投げられる全ての例外の基底クラスは、ｃｏｍ．ｖｅｒｉｓｉｇｎ．ｓａ．ｓｐｉ．ｅｘｃｅｐｔｉｏｎ．ＳＡＥｘｃｅｐｔｉｏｎである。全ての他の例外クラスは、ＳＡＥｘｃｅｐｔｉｏｎクラスを拡張し、ｃｏｍ．ｖｅｒｉｓｉｇｎ．ｓａ．ｓｐｉ．ｅｘｃｅｐｔｉｏｎパッケージに定義される。以下の例外クラス（例として提供されるに過ぎず、本発明を限定することを意図しない）が、本発明の実施形態に従い、多様な検証エラーに対して使用される。
・ＣｏｎｄｉｔｉｏｎａｌＶａｌｉｄａｔｉｏｎＥｘｃｅｐｔｉｏｎ
・ＣｕｓｔｏｍＶａｌｉｄａｔｉｏｎＥｘｃｅｐｔｉｏｎ
・ＤａｔａｂａｓｅＶａｌｉｄａｔｉｏｎＥｘｃｅｐｔｉｏｎ
・ＤａｔｅＶａｌｉｄａｔｉｏｎＥｘｃｅｐｔｉｏｎ
・ＥｘｉｓｔｓＩｎＴａｂｌｅｓＥｘｃｅｐｔｉｏｎ
・ＬｏｏｋｕｐＶａｌｉｄａｔｉｏｎＥｘｃｅｐｔｉｏｎ
・ＭｕｔｕａｌｌｙＥｘｃｌｕｓｉｖｅＴａｂｌｅｓＥｘｃｅｐｔｉｏｎ
・ＮｏＰｒｏｆｉｌｅＦｏｕｎｄＥｘｃｅｐｔｉｏｎ
・ＰｒｏｆｉｌｅＥｘｃｅｐｔｉｏｎ
・ＲｅｆｅｒｅｎｔｉａｌＶａｌｉｄａｔｉｏｎＥｘｃｅｐｔｉｏｎ
・ＲｅｇｅｘＶａｌｉｄａｔｉｏｎＥｘｃｅｐｔｉｏｎ
・ＳＱＬＳｕｍｍａｒｙＥｘｐｉｒｅｄＥｘｃｅｐｔｉｏｎ
・ＳＱＬＰａｒｓｅＥｘｃｅｐｔｉｏｎ
・ＴｒａｎｓＬｏｇＳｕｍｍａｒｙＥｘｐｉｒｅｄＥｘｃｅｐｔｉｏｎ
・ＴｒａｎｓＬｏｇＰａｒｓｅＥｘｃｅｐｔｉｏｎ
・ＴｒａｎｓＬｏｇＶａｌｉｄａｔｉｏｎＥｘｃｅｐｔｉｏｎ
・ＴｒａｎｓＬｏｇＳｕｍｍａｒｙＣｏｒｒｅｌａｔｅｄＷｉｔｈＩｎｖａｌｉｄＳＱＬＳｕｍｍａｒｙＥｘｃｅｐｔｉｏｎ
【０２０２】
基底の抽象クラスＳＡＥｘｃｅｐｔｉｏｎは、エラーログを全て記録する。特定の実施形態に従い、検証エラーの他のログはアプリケーションの他のどこにも提供されない。
【０２０３】
復元可能性
【０２０４】
セキュリティオーディタは、監査されることが必要なトランザクションの開始日時を「ｓｔａｒｔｄａｔｅ．ｔｘｔ」という名前のファイルに書き込む。シャットダウン時に、セキュリティオーディタは、処理された最後のＳＱＬサマリのタイムスタンプをこのファイルに書き込む。このように、実施形態は、セキュリティオーディタが終了した時点からトランザクションの監査を実施するように再起動することを提供する。
【０２０５】
同時並列性
【０２０６】
本発明の実施形態は、レジストリ操作のメモリ内バリデータである、セキュリティオーディタを提供するので、操作の並列実行が典型的に利用される。したがって、以下の並列実行が発生する。
・トランザクション内のＳＱＬ文のパース、および結果のＳＱＬサマリのキャッシュ
・複数のトランザクションログファイルは並列処理される。
・データは、ＳＱＬサマリキャッシュとトランザクションログサマリキャッシュとの間で相関される。
【０２０７】
スレッドのプールを利用する構成要素は典型的に、Ｅｘｅｃｕｔｏｒインターフェースを使用する。加えて、これらの構成要素の各々のスレッドプールのサイズは、構成ファイルに指定される。
#==================================================
# thread pools configuration settings
#==================================================
sa.all.threadpools.core.size=1
sa.all.threadpools.keepalive.time=60
sa.all.threadpools.keepalive.time.unit=SECONDS
sa.sql.summary.threadpool.size=4
sa.translog.summary.tnreadpool.size=2
sa.correlator.threadpool.size=2
【０２０８】
セキュリティオーディタのスレッドプール全ては、実施形態において同じＴｈｒｅａｄＦａｃｔｏｒｙ、ＴｈｒｅａｄＧｒｏｕｐおよびＲｅｊｅｃｔｉｏｎＨａｎｄｌｅｒでインスタンス化されることに注意されたい。加えて、セキュリティオーディタのロックは、アプリケーション全体の均一性のために、同じグローバルロック公平性ポリシーを確実にするために、共通のＬｏｃｋＦａｃｔｏｒｙを使用して作成される。
【０２０９】
本発明の実施形態は、Ｄｉｒｅｃｔｏｒｙ  Ｐｏｌｌｅｒを含む、いくつかの外部ライブラリを利用する。Ｄｉｒｅｃｔｏｒｙ  Ｐｏｌｌｅｒライブラリは、特定のディレクトリを監視し、ディレクトリにファイルがコピーされるとイベントを生成する能力を提供する。スタートアップ時、セキュリティオーディタは、Ｄｉｒｅｃｔｏｒｙ  Ｐｏｌｌｅｒを用いてトランスログファイルディスパッチャをリスナとして登録する。トランザクションログファイルがディレクトリにコピーされると、Ｄｉｒｅｃｔｏｒｙ  Ｐｏｌｌｅｒはそれを感知し、イベントを生成し、ｊａｖａ．ｉｏ．Ｆｉｌｅオブジェクトをトランスログファイルディスパッチャに送信する。このＤｉｒｅｃｔｏｒｙ  Ｐｏｌｌｅｒの能力によって、セキュリティオーディタがリアルタイムの監査モードで動作している時、使用可能になると同時にトランザクションログファイルを処理できることが確実になる。
【０２１０】
いくつかの実施形態に従い、ＳＰＩモデルで公開されるインターフェースは全て、シリアライズ可能である。これによって、キャッシュ、サマリ、プロファイル等の異なるデータ構成要素が、性能、復元可能性等に関連する理由に基づいて、適切に持続されることが可能になる。
【０２１１】
注文追加操作のプロファイル（ＸＭＬに作成）を以下に示す。
<?xml version="1.0" encoding="UTF-8"?>
<RegistryOperationProfile xmlns="xml.profile.sa.verisign.com"
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="xml.profile.sa.verisign.com
RegistryOperationProfile.xsd">
<registryOperation>
<operationInfo>
<operationID transLogEntryExists="true">2</operationID>
<operationName>ADD-ORDER</operationName>
<conceptClassName>RegisterORDEROp</conceptClassName>
</operationInfo>
<databaseInfo>
<table name="TRANSACTION" optional="false">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>TRANSACTIONID</column>
<column>SESSIONID</column>
<column allowedValues="2">OPERATIONID</column>
<column>TRANSACTIONDATE</column>
</table>
<table name="TRANSACTION" optional="false">
<dbOperation max="1" min="1">UPDATE</dbOperation>
<column>SCN</column>
</table>
<table name="TRANSACTIONATTRIBUTES" optional="false" depends="TRANSACTION">
<dbOperation max="100" min="1">INSERT</dbOperation>
<column>TRANSACTIONID</column>
<column>ATTRIBUTE</column>
<column>ATTRIBUTEVALUE</column>
</table>
<table name="ORDER" optional="false" depends-'TRANSACTION">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ORDERID</column>
<column minLength="2" maxLength="67">ORDERNAME</column>
<column minValue="1" maxValue="10">REGISTRATIONPERIOD</column>
<column>ORDEREXPIRATIONDATE</column>
<column>TRANSACTIONID</column>
<column minLength="1" maxLength="32">AUTHINFO</column>
<column>CREATEDDATE</column>
<column allowedValues="3,14">ENCODINGTYPEID</column>
<column>PARENTORDER</column>
<column allowedValues="Y">ZONEINSERTION</column>
</table>
<table name="ORDERAUDIT" optional="false" depends="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ORDERID</column>
<column minLength="2" maxLength="67">ORDERNAME</column>
<column minValue="1" maxValue="10">REGISTRATIONPERIOD</column>
<column>ORDEREXPIRATIONDATE</column>
<column>TRANSACTIONID</column>
<column minLength="1" maxLength="32">AUTHINFO</column>
<column>CREATEDDATE</column>
<column allowedValues="3,14">ENCODINGTYPEID</column>
<column>PARENTORDER</column>
<column allowedValues="Y">ZONEINSERTION</column>
<column>TRANSACTIONDATE</column>
</table>
<table name="ORDERSTATUS" optional="false" depends="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ORDERID</column>
<column allowedValues="1">STATUSCODE</column>
<column>CREATEDDATE</column>
</table>
<table name="ORDERSTATUSAUDIT" optional="false" depends="ORDERSTATUS">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ORDERID</column>
<column allowedValues="1">STATUSCODE</column>
<column>CREATEDDATE</column>
<column>TRANSACTIONID</column>
</table>
<table name="ORDERLINEITEMLINK" optional="true" depends="ORDER">
<dbOperation max="13" min="1">INSERT</dbOperation>
<column>TRANSACTIONlD</column>
<column>ORDERID</column>
<column>LINEITEMID</column>
</table>
<table name="ORDERLINEITEMLINKAUDIT" optionai="true" depends="ORDERLINEITEMLINK">
<dbOperation max="13" min="1">INSERT</dbOperation>
<column>TRANSACTIONID</column>
<column>ORDERID</column>
<column>LINEITEMID</column>
</table>
<table name="INTERNATIONALORDER" optional="true" depends="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ORDERID</column>
<column>INTERNATIONALORDERID</column>
<column allowedValues="1,2,4,6,11,12,13">ENCODINGTYPEID</column>
</table>
<table name="INTERNATIONALORDERAUDIT" optional="true" depends="INTERNATIONALORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ORDERID</column>
<column>INTERNATIONALORDERID</column>
<column allowedValues="1,2,4,6,11,12,13">ENCODINGTYPEID</column>
</table>
<table name- 'CHARVARIANT" optional="true">
<dbOperation max="100" min="1">INSERT</dbOperation>
<column>VARIANTVALUE</column>
</table>
<table name="CHARVARIANTAUDIT" optional="true" depends="CHARVARIANT">
<dbOperation max="100" min="1">INSERT</dbOperation>
<column>VARIANTVALUE</column>
</table>
<table name="ORDERCHARVARIANTLINK" optional="true" depends="ORDER">
<dbOperation max="100" min="1">INSERT</dbOperation>
<column>ORDERID</column>
<column>VARIANTID</column>
</table>
<table name="ORDERCHARVARIANTLINKAUDIT" optional="true" depends="ORDERCHARVARIANTLINK">
<dbOperation max="100" min="1">INSERT</dbOperation>
<column>ORDERID</column>
<column>VARIANTID</column>
</table>
</databaseInfo>
<validationCriterion>
<databaseValidation>
<referentialValidation ignore="false" knownIssue="false">
<masterTable name="TRANSACTION">
<dbOperation max="1" min="1">INSERT</dbOperation>
<masterColumn>TRANSACTIONID</masterColumn>
</masterTable>
<childTable name="TRANSACTIONATTRIBUTES">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>TRANSACTIONID</column>
</childTable>
<childTable name="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>TRANSACTIONID</column>
</childTable>
<childTable name="ORDERAUDIT">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>TRANSACTIONID</column>
</childTable>
<childTable name="ORDERSTATUSAUDIT">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>TRANSACTIONID</column>
</childTable>
<childTable name="ORDERLINEITEMLLNK">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>TRANSACTIONID</column>
</childTable>
<childTable name="ORDERLINEITEMLINKAUDIT">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>TRANSACTIONID</column>
</childTable>
</referentialValidation>
<referentialValidation ignore="false" knownIssue="false">
<masterTable name="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<masterColumn>ORDERID</masterColumn>
</masterTable>
<childTable name="ORDERAUDIT">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ORDERID</column>
</childTable>
<childTable name="ORDERSTATUS">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ORDERID</column>
</childTable>
<childTable name="ORDERSTATUSAUDIT">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ORDERID</column>
</childTable>
<childTable name="ORDERCHARVARIANTLINK">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ORDERID</column>
</childTable>
<childTable name="ORDERCHARVARIANTLINKAUDIT">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ORDERID</column>
</childTable>
</referentialValidation>
<referentialValidation ignore="false" known Issue="false">
<masterTable name="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<masterColumn>ORDERNAME</masterColumn>
</masterTable>
<childTable name="ORDERAUDIT">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ORDERNAME</column>
</childTable>
</referentialValidation>
<referentialValidation ignore="false" knownIssue="false">
<masterTable name="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<masterColumn>REGISTRATIONPERIOD</masterColumn>
</masterTable>
<childTable name="ORDERAUDIT">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>REGISTRATIONPERIOD</column
</childTable>
</referentialValidation>
<referentialValidation ignore="false" knownIssue="false">
<masterTable name="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<masterColumn>ORDEREXPIRATIONDATE</masterColumn>
</masterTable>
<childTable name="ORDERAUDIT">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ORDEREXPIRATIONDATE</column>
</childTable>
</referentialValidation>
<referentialValidation ignore="false" knownIssue="false">
<masterTable name="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<masterColumn>AUTHINFO</masterColumn
</masterTable>
<childTable name="ORDERAUDIT">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>AUTHINFO</column>
</childTable>
</referentialValidation>
<referentialValidation ignore="false" knownIssue="false">
<masterTable name="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<masterColumn>ENCODINGTYPEID</masterColumn>
</masterTable>
<childTable name="ORDERAUDIT">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ENCODINGTYPEID</column>
</childTable>
</referentialValidation>
<referentialValidation ignore="false" knownIssue="false">
<masterTable name="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<masterColumn>CREATEDDATE</masterColumn
</masterTable>
<childTable name="ORDERSTATUS">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>CREATEDDATE</column>
</childTable>
<childTable name="ORDERSTATUSAUDIT">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>CREATEDDATE</column>
</childTable>
</referentialValidation>
<referentialValidation ignore="false" knownIssue="false">
<masterTable name="CHARVARIANT">
<dbOperation max="1" min="1">INSERT</dbOperation
<masterColumn>VARIANTVALUE</masterColumn
</masterTable>
<childTable name="CHARVARIANTAUDIT">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>VARIANTVALUE</column>
</childTable>
</referentialValidation>
<referentialValidation ignore="false" knownIssue="false">
<masterTable name="ORDERCHARVARIANTLINK">
<dbOperation max="1" min="1">INSERT</dbOperation>
<masterColumn>VARIANTID</masterColumn>
</masterTable>
<childTable name="ORDERCHARVARIANTLINKAUDIT">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>VARIANTID</column>
</childTable>
</referentialValidation>
<referentialValidation ignore="false" knownIssue="false">
<masterTable name="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<masterColumn>ORDERNAME</masterColumn>
</masterTable>
<regexOnMasterColumn>
<regularExpression>(.*?)(COM|NET|EDU|ARPA)$</regularExpression>
<group>2</group>
</regexOnMasterColumn>
<childTable name="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>PARENTORDER</column>
</childTable>
</referentialValidation>
</databaseValidation>
</validationCriterion>
<validationCriterion>
<databaseValidation>
<conditionalValidation ignore="false" knownIssue="false">
<tableName>TRANSACTIONATTRIBUTES</tableName>
<dbOperation max="100" min="1">INSERT</dbOperation>
<column value="ORDERName" name="ATTRIBUTE"/>
<column value="RegistrationPeriod" name="ATTRIBUTE"/>
<column value="Authinfo" name="ATTRIBUTE"/>
</conditionalValidation>
</databaseValidation>
</validationCriterion>
<validationCriterion>
<databaseValidation>
<existsInTableValidation ignore="false" knownIssue="false">
<table name="INTERNATIONALORDER" dbOperation="INSERT"/>
<regexValidation>
<tableName>ORDER</tableName>
<dbOperation max="1" min="1">INSERT</dbOperation>
<columnName>ORDERNAME</columnName>
<regex>
<regularExpression>^XN-- *</regularExpression>
</regex>
</regexValidation>
</existsInTableValidation>
</databaseValidation>
</validationCriterion>
<validationCriterion>
<databaseValidation>
<dateValidation ignore="false" knownIssue="false">
<firstTable dbOperation="INSERT" name="ORDER">
<column>CREATEDDATE</column>
<condition javaCalendarConstant="1" truncateTime="true">
<value>10</value>
</condition>
</firstTable>
<secondTable dbOperation="INSERT" name="ORDER">
<column>ORDEREXPIRATIONDATE</column>
<condition truncateTime="true"/>
</secondTable>
</dateValidation>
</databaseValidation>
</validationCriterion>
<validationCriterion>
<transLogValidation ignore="false" knownIssue="false">
<tableName>TRANSACTION</tableName>
<dbOperation max="1" min="1">UPDATE</dbOperation>
<columnName>SCN</columnName>
<transLogEntryParam name="N/A"/>
</transLogValidation>
<transLogValidation ignore="false" knownIssue="true">
<tableName>ORDER</tableName>
<dbOperation max="1" min="1">INSERT</dbOperation>
<columnName>ORDERNAME</columnName>
<transLogEntryParam name="dm" ignoreCase="true"/>
</transLogValidation>
<transLogVaIidation ignore="false" knownIssue="false">
<tableName>ORDER</tableName>
<dbOperation max="1" min="1">INSERT</dbOperation>
<columnName>REGISTRATIONPERIOD</columnName>
<transLogEntryParam name="rPd" ignoreCase="true"/>
</transLogValidation>
<transLogValidation ignore="false" knownIssue="false">
<tableName>ORDER</tableName>
<dbOperation max="1" min="1">INSERT</dbOperation>
<columnName>AUTHINFO</columnName>
<transLogEntryParam name="aln" ignoreCase="false"/>
</transLogValidation>
</validationCriterion>
</registryOperation>
</RegistryOperationProfile>
【０２１２】
削除命令操作のプロファイル（ＸＭＬに作成）を以下に示す。
<?xml version="1.0" encoding="UTF-8'"?>
<RegistryOperationProfile xmlns="xml.profile.sa.verisign.com"
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="xml.profile.sa.verisign.com
RegistryOperationProfile.xsd">
<registryOperation>
<operationInfo>
<operationID transLogEntryExists="true">4</operationID>
<operationName>DEL-ORDER</operationName>
<conceptClassName>DeleteORDEROp</conceptClassName>
</operationInfo>
<databaseInfo>
<table name="TRANSACTION" optional="false">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>TRANSACTIONID</column>
<column>SESSIONID</column>
<column allowedValues="4">OPERATIONID</column>
<column>TRANSACTIONDATE</column>
</table>
<table name="TRANSACTION" optional="false">
<dbOperation max="1" min="1">UPDATE</dbOperation>
<column>SCN</column>
</table>
<table name="TRANSACTIONATTRIBUTES" optional="false" depends="TRANSACTION">
<dbOperation max="100" min="1">INSERT</dbOperation>
<column>TRANSACTIONID</column>
<column>ATTRIBUTE</column>
<column>ATTRIBUTEVALUE</column>
</table>
<table name="ORDER"optional="true" depends="TRANSACTION">
<dbOperation max="1" min="1">DELETE</dbOperation>
<column>ORDERID</column>
<column>ORDERNAME</column>
<column>REGISTRARID</column>
<column>REGISTRATIONPERIOD</column>
<column>REGISTRATIONEXPIRATIONDATE</column>
<column>TRANSACTIONID</column>
</table>
<table name="ORDER" optional="true" depends="TRANSACTION">
<dbOperation max="1" min="1">UPDATE</dbOperation>
<column>ORDERID</column>
<column>ORDERNAME</column>
<column>REGISTRARID</column>
<column>REGISTRATIONPERIOD</column>
<column>REGISTRATIONEXPIRATIONDATE</column>
<column>TRANSACTIONID</column>
</table>
<table name="ORDERAUDIT" optional="false" depends="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ORDERID</column>
<column>ORDERNAME</column>
<column>REGISTRARID</column>
<column>REGISTRATIONPERIOD</column>
<column>REGISTRATIONEXPIRATIONDATE</column>
<column>TRANSACTIONID</column>
</table>
<table name="ORDERSTATUS" optional="false" depends="ORDER">
<dbOperation max="1" min="1">DELETE</dbOperation>
<column>ORDERID</column>
<column>STATUSCODE</column>
</table>
<table name="ORDERSTATUS" optional="true" depends="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ORDERID</column>
<column>STATUSCODE</column>
</table>
<table name="ORDERSTATUSAUDIT" optional="false" depends="ORDERSTATUS">
<dbOperation max="10" min="1">INSERT</dbOperation>
<column>ORDERID</column>
<column>STATUSCODE</column>
</table>
<table name="LINEITEMSTATUS" optional="true" depends="LINEITEM">
<dbOperation max="1" min="1">DELETE</dbOperation>
<column>LINElTEMID</column>
<column>STATUSCODE</column>
</table>
<table name="LINEITEMSTATUSAUDIT" optional="true" depends="LINEITEMSTATUS">
<dbOperation max="10" min="1">INSERT</dbOperation>
<column>LINEITEMID</column>
<column>STATUSCODE</column>
</table>
<table name= "LINEITEM" optional="true" depends="ORDER">
<dbOperation max="1" min="1">DELETE</dbOperation>
<column>TRANSACTIONID</column>
<column>LINElTEMID</column>
</table>
<table name="LINEITEMAUDIT" optional="true" depends="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>LINEITEMID</column>
<column>SERVERNAME</column>
<column>TRANSACTIONID</column>
<column>TRANSACTIONDATE</column>
</table>
<table name=ORDERLINEITEMLINK" optional="true" depends="ORDER">
<dbOperation max="1" min="1">DELETE</dbOperation>
<column>TRANSACTIONID</column>
<column>ORDERID</column>
<column>LINEITEMID</column>
</table>
<table name="ORDERLINEITEMLINKAUDIT" optional="true" depends="ORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>TRANSACTIONID</column>
<column>ORDERID</column>
<column>LINEITEMID</column>
</table>
<table name="INTERNATIONALORDER" optional="true" depends="ORDER">
<dbOperation max="1" min="1">DELETE</dbOperation>
<column>ORDERID</column>
<column>INTERNATIONALORDERID</column>
</table>
<table name="INTERNATIONALORDERAUDIT" optional="true" depends="INTERNATIONALORDER">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>ORDERID</column>
<column>INTERNATIONALORDERID</column>
<column allowedValues="1,2,4,6,11,12,13">ENCODINGTYPEID</column>
</table>
<table name="INTERNATIONALLINEITEM" optional="true" depends="INTERNATIONALORDER">
<dbOperation max="1" min="1">DELETE</dbOperation>
<column>INTERNATIONALLINEITEMID</column>
</table>
<table name="INTERNATIONALLINEITEMAUDIT" optional="true" depends="INTERNATIONALORDER">
<dbOperation max="1" min="1 ">INSERT</dbOperation>
<column>TRANSACTIONID</column>
<column allowedValues="1,2,4,6,11,12,13">ENCODINGTYPEID</column>
</table>
<table name="CHARVARIANT" optional="true">
<dbOperation max="1" min="1">DELETE</dbOperation>
<column>VARIANTID</column>
</table>
<table name="CHARVARIANTAUDIT" optional="true" depends="CHARVARIANT">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>TRANSACTIONID</column>
<column>TRANSACTIONDATE</column>
<column>VARIANTID</column>
</table>
<table name="ORDERCHARVARIANTLINK" optional="true">
<dbOperation max="1" min="1">DELETE</dbOperation>
<column>ORDERID</column>
<column>VARIANTID</column>
</table>
<table name="ORDERCHARVARIANTLINKAUDIT" optional ="true" depends="ORDERCHARVARIANTLINK">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>TRANSACTIONID</column>
<column>TRANSACTIONDATE</column>
<column>ORDERID</column>
<column>VARIANTID</column>
</table>
<table name="COMPONENT" optional="true" depends="LINEITEM">
<dbOperation max="13" min="1">DELETE</dbOperation>
<column>COMPONENT</column>
</table>
<table name="COMPONENTAUDIT" optional="true" depends="COMPONENT">
<dbOperation max="13" min="1">INSERT</dbOperation>
<column>COMPONENT</column>
<column>TRANSACTIONID</column>
<column>TRANSACTIONDATE</column>
</table>
<table name="LINEITEMCOMPONENTLINK" optional="true" depends="LINEITEM">
<dbOperation max="13" min="1">DELETE</dbOperation>
<column>COMPONENT</column>
<column>LINEITEMID</column>
</table>
<table name="LINEITEMCOMPONENTLINKAUDIT" optional="true" depends="LINEITEMCOMPONENTLINK">
<dbOperation max="13" min="1">INSERT</dbOperation>
<column>COMPONENT</column>
<column>TRANSACTIONID</column>
<column>TRANSACTIONDATE</column>
</table>
<table name="ORDERTRACKING" optional="true" depends="ORDER">
<dbOperation max="1" min="1">DELETE</dbOperation>
<column>TRANSACTIONID</column>
<column>OPERATIONID</column>
<column>ORDERID</column>
<column>CREATEDDATE</column>
</table>
<mutuallyExclusive>
<table name="ORDER" dbOperation="UPDATE"/>
<table name="ORDER" dbOperation="DELETE"/>
</mutuallyExclusive>
</databaseInfo>
<validationCriterion>
<databaseValidation>
<referentialValidation ignore="false" knownIssue="false">
<masterTable name="TRANSACTION">
<dbOperation max="1" min="1">INSERT</dbOperation>
<masterColumn>TRANSACTIONID</masterColumn>
</masterTable>
<childTable name="TRANSACTIONATTRIBUTES">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>TRANSACTIONID</column>
</childTable>
<childTable name="ORDERAUDIT">
<dbOperation max="1" min="1">INSERT</dbOperation>
<column>TRANSACTIONID</column>
</childTable>
</referentialValidation>
</databaseValidation>
</validationCriterion>
<validationCriterion>
<transLogValidation ignore="false" knownIssue="false">
<tableName>TRANSACTION</tableName>
<dbOperation max="1" min="1">UPDATE</dbOperation>
<columnName>SCN</columnName>
<transLogEntryParam name="N/A"/>
</transLogValidation>
<transLogValidation ignore="false" knownIssue="true">
<tableName>ORDER</tableName>
<dbOperation max="1" min="1">DELETE</dbOperation>
<columnName>ORDERNAME</columnName>
<transLogEntryParam name="dm" ignoreCase="true"/>
</transLogValidation>
</validationCriterion>
</registryOperation>
</RegistryOperationProfile>
【０２１３】
上記のプロファイルに基づき、一実施形態において、ＯＬＴＰデータベースに記憶された適当なトランザクションに対して、多様な操作のステップが検証される。プロファイルは、データベースにデータを書き込むための操作がどのように進行すべきかを提示するため、データがこの正確なフォーマットで書き込まれない場合、セキュリティオーディタは、さらなる調査および／またはレポートのために、トランザクションを警告する。類似の構文は、アプリケーションサーバからデータベースへの保管の連鎖を確立するために、アプリケーショントランザクションログからデータベーストランザクションログへのマッピングのために使用される。
【０２１４】
図２０は、本発明の実施形態に従い、システムがセキュリティオーディタからの結果をレポートする簡易化されたブロック図である。登録システム２２０５からのデータは、セキュリティオーディタ２２１０に提供される。実施形態において、登録システムからのデータは、登録者のためにドメイン名を登録する、登録機関によって提供することができる。登録者データおよびそのようなデータをデータベースに記憶することの追加の検討は、本明細書全体に提供される。セキュリティオーディタ２２１０は、登録システム２２０５からのデータを処理し、異常が検出された場合、通知が２４／７監視チーム２２２０に提供される。通知は、本明細書に説明される詳細および要約レポートまたは他の通知方法の形態をとることができる。
【０２１５】
２４／７監視チーム２２２０は、障害チケットを生成し、これは、障害チケットデータベース２２２２に記憶される場合がある。障害チケットデータベース２２２２は、システム実装に応じて、遠隔に配置される場合がある２４／７監視チームと同一場所に配置することができる。セキュリティオーディタ２２１０からのレポートに関する情報は、２４／７監視チームによって、運用／エンジニアリングチーム２２３０へ渡される。情報は、自動的に、または２４／７監視チームによる見直し後に渡すことができる。いくつかの実施形態において、２４／７監視チームによって生成される障害チケットは、運用／エンジニアリングチーム２２３０へ情報および通知を提供するために利用される。図示されるように、運用／エンジニアリングチームは、障害チケットデータベース２２２２へのアクセスを有する。セキュリティオーディタによって検出された問題の性質に応じて、例えば、登録者と連絡すること等によって、セキュリティオーディタ２２１０への更新、登録システム２２０５への更新を含む可能性がある、適切な処置がとられる。
【０２１６】
また、本明細書に説明される例および実施形態は、説明の目的に過ぎないこと、それを考慮した多様な変形または変更は、当業者に示唆されるであろう、そして、本明細書の精神および権限ならびに添付の請求項の範囲内に含まれるものであることを理解されたい。
【符号の説明】
【０２１７】
１１０・・・ＯＬＴＰデータ
１２０・・・データベースバリデータ
１３０・・・データキャッシュ
１４０・・・データコリレータ
１５０・・・トランザクションログファイル
１６０・・・トランザクションログデータキャッシュ
１７０・・・レポートジェネレータ
【図１】
2012530288.tif 000003
【図２】
2012530288.tif 000004
【図３】
2012530288.tif 000005
【図４】
2012530288.tif 000006
【図５】
2012530288.tif 000007
【図６】
2012530288.tif 000008
【図７】
2012530288.tif 000009
【図８】
2012530288.tif 000010
【図９】
2012530288.tif 000011
【図１０】
2012530288.tif 000012
【図１１】
2012530288.tif 000013
【図１２】
2012530288.tif 000014
【図１３】
2012530288.tif 000015
【図１４】
2012530288.tif 000016
【図１５】
2012530288.tif 000017
【図１７】
2012530288.tif 000018
【図１８】
2012530288.tif 000019
【図１９】
2012530288.tif 000020
【図２０】
2012530288.tif 000021
【図１６】
2012530288.tif 000022
【国際調査報告】
2012530288.tif 000023