(57)【要約】【課題】アクセス制御ルールを分割してルール関数として実現することにより、効率良くアクセス制御を行う。【解決手段】階層化して記憶された複数のノードのそれぞれに対するアクセスを許可または禁止するアクセス管理装置であって、ノードをアクセスする複数の互いに異なる要求元のそれぞれに対応付けて、アクセス対象となるノードの階層構造における位置に応じてアクセス許否を判定するルール関数を記憶する関数記憶部と、要求元からアクセス要求を受信する受信部と、アクセス要求の要求元に対応付けられたルール関数を選択する選択部と、アクセス要求の対象となるノードの位置を入力として、選択部により選択されたルール関数を実行する実行部と、ルール関数を実行した結果得られたアクセス許否の判定結果に基づいて、アクセス要求の許可または禁止を制御する制御部とを備えるアクセス管理装置を提供する。【選択図】図２
2006344057.tif 000002
【特許請求の範囲】
【請求項１】
階層化して記憶された複数のノードのそれぞれに対するアクセスを許可または禁止するアクセス管理装置であって、
ノードをアクセスする複数の互いに異なる要求元のそれぞれに対応付けて、アクセス対象となるノードの階層構造における位置に応じてアクセス許否を判定するルール関数を記憶する関数記憶部と、
要求元からアクセス要求を受信する受信部と、
前記アクセス要求の前記要求元に対応付けられた前記ルール関数を選択する選択部と、
前記アクセス要求の対象となるノードの位置を入力として、前記選択部により選択された前記ルール関数を実行する実行部と、
前記ルール関数を実行した結果得られたアクセス許否の判定結果に基づいて、前記アクセス要求の許可または禁止を制御する制御部と
を備えるアクセス管理装置。
【請求項２】
前記関数記憶部は、複数の互いに異なる前記要求元のそれぞれに対応付けて、互いに異なる複数の前記ルール関数のそれぞれを指定するポインタを記憶し、
前記選択部は、前記関数記憶部から前記要求元を検索することにより当該要求元に対応付けられた前記ルール関数のポインタを取得し、
前記実行部は、前記ポインタにより指定される前記ルール関数を呼び出すことにより当該ルール関数を実行する
請求項１に記載のアクセス管理装置。
【請求項３】
前記ルール関数を実行した結果得られた前記判定結果を、前記要求元および前記アクセス要求の対象となるノードの位置に対応付けて前記関数記憶部に登録する登録部を更に備え、
前記選択部は、同一の前記要求元から同一のノードに対する後続のアクセス要求を受信したことに応じて、当該要求元に対応付けられた前記ルール関数を前記実行部により実行させずに、当該要求元および当該ノードに対応付けて前記関数記憶部に登録された前記判定結果を前記制御部に与え、
前記制御部は、前記選択部から与えられた前記判定結果に基づいて、前記後続のアクセス要求の許可または禁止を制御する
請求項１に記載のアクセス管理装置。
【請求項４】
前記要求元、前記階層構造におけるノードの位置、および当該要求元による当該ノードへのアクセス許否の情報の組を含むルールを複数記憶するポリシー記憶部と、
同一の前記要求元についての２以上の前記ルールに基づいて、当該要求元に対応する前記ルール関数を生成して、当該ルール関数を識別する情報を前記関数記憶部に記憶させる生成部と
を更に備える請求項１に記載のアクセス管理装置。
【請求項５】
前記生成部は、受信した前記アクセス要求の要求元に対応付けて前記ルール関数が記憶されていないことを条件として、当該要求元に対応する前記ルール関数を生成する請求項４に記載のアクセス管理装置。
【請求項６】
前記生成部は、
同一の前記要求元についての２以上の前記ルールに基づいて、当該要求元に対応する前記ルール関数のソースコードを生成し、
当該ソースコードをコンパイルすることにより前記ルール関数のオブジェクトコードを生成し、
前記オブジェクトコードを識別する情報を前記関数記憶部に記憶させる
請求項４に記載のアクセス管理装置。
【請求項７】
受信した前記アクセス要求の要求元に対応付けて前記ルール関数が記憶されていないことを条件として、当該要求元についての２以上の前記ルールを前記ポリシー記憶部から検索する検索部と、
前記検索部により検索された前記２以上のルールに基づいて、前記アクセス要求の対象となるノードのアクセス許否を判定する判定部と
を更に備え、
受信した前記アクセス要求の要求元に対応付けて前記ルール関数が記憶されていない場合、前記制御部は、前記判定部によるアクセス許否の判定結果に基づいて、前記アクセス要求の許可または禁止を制御する
請求項４に記載のアクセス管理装置。
【請求項８】
前記生成部は、予め定めた２以上の数の前記要求元についての２以上の前記ルールに基づいて、当該２以上の数の前記要求元に対応する共通の前記ルール関数を生成する請求項４に記載のアクセス管理装置。
【請求項９】
前記生成部は、
２以上の前記要求元についての２以上の前記ルールに基づいて、当該２以上の要求元に対応する前記ルール関数を生成し、
生成した前記ルール関数が予め定められたサイズ以下であることを条件として、当該ルール関数を前記関数記憶部に記憶させる
請求項４に記載のアクセス管理装置。
【請求項１０】
前記関数記憶部は、前記複数の互いに異なる要求元および複数の互いに異なる前記位置の組のそれぞれに対応付けて、当該要求元から当該位置のノードへのアクセス許否を判定する前記ルール関数を記憶し、
前記選択部は、前記アクセス要求の前記要求元および前記位置に対応付けられた前記ルール関数を選択し、
前記実行部は、前記選択部により選択された前記ルール関数を実行し、
前記制御部は、前記ルール関数を実行した結果得られたアクセス許否の判定結果に基づいて、前記アクセス要求の許可または禁止を制御する
請求項９に記載のアクセス管理装置。
【請求項１１】
前記生成部は、前記ルール関数として、
アクセス対象となるノードの位置を入力し、
アクセス対象となるノードの位置を、当該要求元についての２以上の前記ルールのそれぞれに含まれる前記位置を示す定数と順次比較し、
アクセス対象となるノードの位置がいずれかの前記定数と一致した場合に、当該要求元、および、当該定数が示す前記位置と組となる前記アクセス許否の情報を前記判定結果として返す
関数を生成する請求項４に記載のアクセス管理装置。
【請求項１２】
前記複数のノードは、最上位階層のノードをルートノードとする木構造により階層化して記憶されており、
それぞれの前記ノードの階層構造における位置は、前記ルートノードから当該ノードに至る経路上のノードの名前を順に含む文字列により表され、
一のノードに対応して、当該一のノードを最上位とする部分木に含まれる全てのノードに対するアクセスの許可または拒否を示す伝播ルールが前記ポリシー記憶部に記憶されている場合に、前記生成部は、アクセス対象となるノードの位置を示す文字列を入力し、当該文字列が前記部分木の最上位のノードの位置を示す文字列を先頭部分に含むことを条件として、当該伝播ルールにより指定される前記アクセス許否の情報を前記判定結果として返す前記ルール関数を生成する
請求項１１に記載のアクセス管理装置。
【請求項１３】
前記生成部は、前記ルール関数として、
アクセス対象となるノードが、アクセス拒否を示すいずれかの前記伝播ルールにより指定される前記部分木に含まれることを条件として、アクセス拒否の前記判定結果を返し、
アクセス対象となるノードがアクセス拒否を示すいずれの前記伝播ルールにより指定される前記部分木にも含まれない場合において、アクセス許可を示すいずれかの前記ルールによりアクセスが許可されることを条件として、アクセス許可の前記判定結果を返す
関数を生成する請求項１２に記載のアクセス管理装置。
【請求項１４】
前記生成部は、下位のノードに対するアクセス許可の前記ルールを、上位のノードに対するアクセス許可の前記ルールより先に判定する前記ルール関数を生成する請求項１２に記載のアクセス管理装置。
【請求項１５】
前記複数のノードは、最上位階層のノードをルートノードとする木構造により階層化して記憶されており、
前記ルートノードから前記ルールにより指定されるノードに至る少なくとも１つのノード内の変数が所定の値をとることを条件とする前記ルールに基づく前記ルール関数を生成する場合において、前記生成部は、
前記ルールにより指定される変数名をパラメータとして、前記変数名に基づいて前記変数の値を読み出す読出関数を呼び出すことにより前記変数の値を取得し、
前記変数の値が前記所定の値と一致することを条件として、前記ルールにより指定されたアクセス許否を前記判定結果として返す
前記ルール関数を生成する請求項４に記載のアクセス管理装置。
【請求項１６】
前記複数のノードは、階層化された構造化文書を構成し、
前記受信部は、前記構造化文書における参照中のノードを前記読出関数に供給し、
前記実行部は、
前記参照中のノードを基準とする相対位置により前記変数を含むノードを指定する前記変数名をパラメータとして、前記読出関数を呼び出し、
前記ルール関数から呼び出された前記読出関数の処理において、前記受信部から供給された前記参照中のノードを基準として、前記ルール関数により指定された前記変数名に含まれる相対位置のノード内の変数の値を前記ルール関数に返す
請求項１５に記載のアクセス管理装置。
【請求項１７】
前記生成部は、前記ルール関数を、オブジェクト指向言語のクラス内のメソッド関数として生成し、
前記クラス毎に、当該クラスのインスタンスの識別情報を記憶するインスタンス記憶部を更に備え、
前記選択部は、選択した前記ルール関数を含むクラスのインスタンスの識別情報が前記インスタンス記憶部に記憶されていないことを条件として、当該クラスのインスタンスを生成して当該インスタンスの識別情報を前記インスタンス記憶部に格納し、
前記実行部は、前記インスタンスの前記メソッド関数を呼び出すことにより前記ルール関数を実行する
請求項４に記載のアクセス管理装置。
【請求項１８】
階層化して記憶された複数のノードのそれぞれに対するアクセスを許可または禁止するアクセス管理装置であって、
複数の互いに異なるノードの位置のそれぞれに対応付けて、アクセス要求の要求元に応じてアクセス許否を判定するルール関数を記憶する関数記憶部と、
要求元からアクセス要求を受信する受信部と、
アクセス対象のノードの位置に対応付けられた前記ルール関数を選択する選択部と、
前記アクセス要求の要求元を入力として、前記選択部により選択された前記ルール関数を実行する実行部と、
前記ルール関数を実行した結果得られたアクセス許否の判定結果に基づいて、前記アクセス要求の許可または禁止を制御する制御部と
を備えるアクセス管理装置。
【請求項１９】
コンピュータを、階層化して記憶された複数のノードのそれぞれに対するアクセスを許可または禁止するアクセス管理装置として機能させるプログラムであって、
前記アクセス管理装置を、
ノードをアクセスする複数の互いに異なる要求元のそれぞれに対応付けて、アクセス対象となるノードの階層構造における位置に応じてアクセス許否を判定するルール関数を記憶する関数記憶部と、
要求元からアクセス要求を受信する受信部と、
前記アクセス要求の前記要求元に対応付けられた前記ルール関数を選択する選択部と、
前記アクセス要求の対象となるノードの位置を入力として、前記選択部により選択された前記ルール関数を実行する実行部と、
前記ルール関数を実行した結果得られたアクセス許否の判定結果に基づいて、前記アクセス要求の許可または禁止を制御する制御部と
して機能させるプログラム。
【請求項２０】
コンピュータを、階層化して記憶された複数のノードのそれぞれに対するアクセスを許可または禁止するアクセス管理装置として機能させるプログラムであって、
前記アクセス管理装置を、
複数の互いに異なるノードの位置のそれぞれに対応付けて、アクセス要求の要求元に応じてアクセス許否を判定するルール関数を記憶する関数記憶部と、
要求元からアクセス要求を受信する受信部と、
アクセス対象のノードの位置に対応付けられた前記ルール関数を選択する選択部と、
前記アクセス要求の要求元を入力として、前記選択部により選択された前記ルール関数を実行する実行部と、
前記ルール関数を実行した結果得られたアクセス許否の判定結果に基づいて、前記アクセス要求の許可または禁止を制御する制御部と
として機能させるプログラム。
【請求項２１】
コンピュータにより、階層化して記憶された複数のノードのそれぞれに対するアクセスを許可または禁止するアクセス管理方法であって、
ノードをアクセスする複数の互いに異なる要求元のそれぞれに対応付けて、アクセス対象となるノードの階層構造における位置に応じてアクセス許否を判定するルール関数を記憶する関数記憶段階と、
要求元からアクセス要求を受信する受信段階と、
前記アクセス要求の前記要求元に対応付けられた前記ルール関数を選択する選択段階と、
前記アクセス要求の対象となるノードの位置を入力として、前記選択段階により選択された前記ルール関数を実行する実行段階と、
前記ルール関数を実行した結果得られたアクセス許否の判定結果に基づいて、前記アクセス要求の許可または禁止を制御する制御段階と
を備えるアクセス管理方法。
【請求項２２】
コンピュータにより、階層化して記憶された複数のノードのそれぞれに対するアクセスを許可または禁止するアクセス管理方法であって、
複数の互いに異なるノードの位置のそれぞれに対応付けて、アクセス要求の要求元に応じてアクセス許否を判定するルール関数を記憶する関数記憶段階と、
要求元からアクセス要求を受信する受信段階と、
アクセス対象のノードの位置に対応付けられた前記ルール関数を選択する選択段階と、
前記アクセス要求の要求元を入力として、前記選択段階により選択された前記ルール関数を実行する実行段階と、
前記ルール関数を実行した結果得られたアクセス許否の判定結果に基づいて、前記アクセス要求の許可または禁止を制御する制御段階と
を備えるアクセス管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アクセス管理装置、アクセス管理方法、およびプログラムに関する。特に本発明は、多数のルールを含むポリシーに基づいてアクセス許否を判断するアクセス管理装置、アクセス管理方法、およびプログラムに関する。
【背景技術】
【０００２】
近年、情報を階層構造に構造化して記述するＸＭＬ等の言語が注目されている。ＸＭＬは、様々な分野において広く用いられており、例えば、医療カルテ又は契約書等が代表的である。このような文書においては、文書全体にアクセスの許可又は禁止を設定するのみならず、１つの文書に含まれる複数の情報の各々に、アクセスの許可又は禁止を設定できるのが望ましい。例えば、医療カルテにおいて、診療日時の情報へのアクセスを多くの者に許可しても問題がないが、病名の情報へのアクセスを多くの者に許可するのは好ましくない。
【０００３】
そこで、階層化された複数のノードを含む構造化文書に対し、ノード単位でアクセス許否を指定するポリシー（アクセス制御ポリシー）が作成される。このポリシーは、それぞれが各ノードのアクセス許否を記述した多数のルール（アクセス制御ルール）の集合により定義される。ここで、各ノードは階層化されていることから、階層構造の上下関係にあるノード間におけるアクセス許否の制御効果（アクセス制御効果）には依存関係が生じる。
【０００４】
すなわち、あるノードへのアクセスが許可される場合、当該ノードより上位階層に位置するノード（祖先ノード）のアクセスも許可される。また、あるノードへのアクセスが拒否される場合、当該ノードより下位階層に位置するノード（子孫ノード）のアクセスも拒否される。一例として、「カルテ」を示すノードの下位に「病名」を示すノードが存在する場合、「患者による病名のアクセスを許可する」には「患者によるカルテのアクセスを許可する」こととなる。
【０００５】
このような依存関係が存在するので、あるノードのアクセス許否を判定するためには、より上位階層のノードに対しアクセス拒否が指定されているかどうか、または、より上位階層のノードに対し下位階層のすべてのノードへのアクセス許可が指定されているかどうか等をも判定しなければならない。したがって、あるノードのアクセス制御効果を判定するために、ポリシー中の多数のルールをチェックしなければならない。
【０００６】
このようなアクセス制御を効率よく行うことを目的として、階層構造におけるノードの位置と当該ノードのアクセス許否との対応をテーブルに格納しておき、アクセス要求を受けた場合にテーブル参照によりアクセス制御効果を得る技術が開示されている（特許文献１、非特許文献１参照。）。
【特許文献１】米国特許出願公開第２００５／００７６０３０号明細書
【非特許文献１】T. Yu, D. Srivastava, L. V. S. Lakshmanan, and H. V. Jagadish, "Compressed Accessibility Map: Efficient Access Control for XML", In Proceedings of the International Conference on Very Large Databases. p.478-489, 2002.
【発明の開示】
【発明が解決しようとする課題】
【０００７】
アクセス制御効果は、アクセス要求の主体（サブジェクト）すなわちアクセスの要求元、および、アクセス対象のノードにより異なる。しかし、従来技術において、全てのアクセス要求元およびアクセス対象ノードの階層構造における位置（パス）毎にテーブルエントリを用意すると、テーブルサイズが大きくなってしまう。そこで、上記の従来技術においては、共通する部分をできるだけ共有する仕組みが採られている。
【０００８】
しかしながら、共通化できない部分が多い場合にはテーブルサイズが大きくなり、メモリ消費量が多くなる可能性がある。また、ポリシーの変更に伴って、共通部分のどの範囲を更新すればよいかを切り分けるのが困難な場合がある。このような場合には、ポリシーの変更時に、テーブル中の広い範囲を更新する必要が生じる。
【０００９】
そこで本発明は、上記の課題を解決することのできるアクセス管理装置、アクセス管理方法、およびプログラムを提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【００１０】
本発明の第１の形態によると、階層化して記憶された複数のノードのそれぞれに対するアクセスを許可または禁止するアクセス管理装置であって、ノードをアクセスする複数の互いに異なる要求元のそれぞれに対応付けて、アクセス対象となるノードの階層構造における位置に応じてアクセス許否を判定するルール関数を記憶する関数記憶部と、要求元からアクセス要求を受信する受信部と、前記アクセス要求の前記要求元に対応付けられた前記ルール関数を選択する選択部と、前記アクセス要求の対象となるノードの位置を入力として、前記選択部により選択された前記ルール関数を実行する実行部と、前記ルール関数を実行した結果得られたアクセス許否の判定結果に基づいて、前記アクセス要求の許可または禁止を制御する制御部とを備えるアクセス管理装置と、当該アクセス管理装置に関するアクセス管理方法およびプログラムとを提供する。
【００１１】
本発明の第２の形態によると、階層化して記憶された複数のノードのそれぞれに対するアクセスを許可または禁止するアクセス管理装置であって、複数の互いに異なるノードの位置のそれぞれに対応付けて、アクセス要求の要求元に応じてアクセス許否を判定するルール関数を記憶する関数記憶部と、要求元からアクセス要求を受信する受信部と、アクセス対象のノードの位置に対応付けられた前記ルール関数を選択する選択部と、前記アクセス要求の要求元を入力として、前記選択部により選択された前記ルール関数を実行する実行部と、前記ルール関数を実行した結果得られたアクセス許否の判定結果に基づいて、前記アクセス要求の許可または禁止を制御する制御部とを備えるアクセス管理装置と、当該アクセス管理装置に関するアクセス管理方法およびプログラムとを提供する。
【００１２】
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明の効果】
【００１３】
本発明によれば、アクセス制御ルールを分割してルール関数として実現することにより、効率良くアクセス制御を行うことができる。
【発明を実施するための最良の形態】
【００１４】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１５】
図１は、本実施形態に係る情報システム１０の構成を示す。情報システム１０は、データを記憶するアクセス管理装置１００と、アクセス管理装置１００に記憶されたデータをアクセスする１または複数のクライアント装置１１０とを備え、アクセス管理装置１００によりアクセス許否の判定を効率良く行うことを特徴とする。
【００１６】
アクセス管理装置１００は、例えば構造化文書等の階層化されたデータ構造を記憶する。このデータ構造は、複数のノードを階層化して接続し、各ノードにデータを対応付けた構成をとる。そして、アクセス管理装置１００は、階層化して記憶された複数のノードのそれぞれに対するクライアント装置１１０からのアクセスを、予め設定されたポリシーに基づいて許可または禁止する。
【００１７】
図２は、本実施形態に係るアクセス管理装置１００の構成を示す。アクセス管理装置１００は、データ記憶部２００と、ポリシー記憶部２１０と、生成部２１５と、関数記憶部２２０と、受信部２２５と、選択部２３０と、インスタンス記憶部２３２と、実行部２３５と、制御部２４０と、登録部２４５と、検索部２５０と、判定部２５５とを備える。
【００１８】
データ記憶部２００は、階層化されたデータ構造を記憶する。ポリシー記憶部２１０は、データ記憶部２００に記憶されたデータ構造に対するアクセスを許可または禁止するためのポリシーを記憶する。より具体的には、データ記憶部２００は、アクセスの要求元、階層構造中におけるアクセス対象のノードの位置（パス）、および当該要求元による当該ノードへのアクセス許否の情報の組を含むルールを複数記憶することにより当該ポリシーを記憶する。本実施形態において、アクセスの要求元は、アクセス要求の主体（サブジェクト）であり、例えば情報システム１０の使用者毎（アカウント毎）に割り当てられる。これに代えて、アクセス要求元は、クライアント装置１１０に対応付けて割り当てられても良い。
【００１９】
生成部２１５は、ポリシー記憶部２１０に記憶された複数のルールから１または２以上のルールを選択し、これらのルールに応じたアクセス許否の判定を行うルール関数を生成する。これにより、生成部２１５は、それぞれが互いに異なる一部のルールに対応するアクセス許否の判定を行うルール関数を複数生成することにより、ポリシー記憶部２１０に記憶したポリシーをこれらのルール関数の組に変換することができる。
【００２０】
本実施形態に係る生成部２１５は、一例として、ノードをアクセスする可能性がある複数の互いに異なる要求元のそれぞれに対応して、当該要求元からのアクセス要求に対するアクセス許否を判定するルール関数を生成する。すなわち例えば、生成部２１５は、要求元毎に異なるルール関数を生成して良い。これに代えて生成部２１５は、２以上の要求元の組に対して１つのルール関数を生成していくことにより、異なる組に属する複数の要求元のそれぞれに対応して、異なるルール関数を割り当ててよい。このルール関数は、アクセス対象となるノードの階層構造における位置を含むパラメータを入力し、当該位置に応じたアクセス許否を判定する。本実施形態において、生成部２１５は、当該ルール関数を、Ｊａｖａ（登録商標）等のオブジェクト指向言語のクラス内のメソッド関数として生成する。そして生成部２１５は、当該メソッド関数を含むクラスをコンパイルして、ＪＶＭ（Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）のオブジェクトコードに変換する。
【００２１】
関数記憶部２２０は、生成部２１５により生成されたルール関数を記憶する。本実施形態に係る関数記憶部２２０は、複数の互いに異なる要求元のそれぞれに対応付けて、当該要求元からのアクセス要求に対するアクセス許否を判定するルール関数を記憶する。より具体的には、関数記憶部２２０は、ルール関数を１または複数含むクラスを１または複数まとめてパッケージ２２４として記憶する。さらに関数記憶部２２０は、複数の互いに異なる要求元のそれぞれに対応付けて、互いに異なる複数のルール関数のそれぞれを指定するポインタを記憶する。このポインタは、当該ルール関数の名称、すなわち例えばパッケージ名、クラス名、およびメソッド名の組を示す文字列等であっても良い。
【００２２】
受信部２２５は、クライアント装置１１０により送信される、要求元からのアクセス要求を受信する。選択部２３０は、当該アクセス要求に対応するアクセス許否の判定に用いるべきルール関数を関数記憶部２２０の中から選択する。すなわち、本実施形態においては、選択部２３０は、アクセス要求の要求元に対応付けられたルール関数を選択する。
【００２３】
インスタンス記憶部２３２は、各ルール関数を、オブジェクト指向言語のクラスにより実現する場合に用いられ、クラス毎に、当該クラスのインスタンスの識別情報を記憶する。実行部２３５は、選択部２３０により選択されたルール関数を実行する。制御部２４０は、実行部２３５によりルール関数を実行した結果得られたアクセス許否の判定結果に基づいて、アクセス要求の許可または禁止を制御する。そして、アクセス要求を許可する場合、アクセス対象のノードに対応付けられたデータをデータ記憶部２００から読み出し、要求元のクライアント装置１１０へ送信する。
【００２４】
登録部２４５は、ルール関数を実行した結果得られた判定結果を、要求元およびアクセス要求の対象となるノードの位置に対応付けて関数記憶部２２０に登録する。これにより選択部２３０は、同一の要求元から同一のノードに対するアクセス要求を再び受けると、登録した判定結果を制御部２４０に与えることができる。この場合、ルール関数を実行部２３５により再度実行する必要がないので、アクセス処理の効率を高めることができる。
【００２５】
検索部２５０は、アクセス要求に対応するアクセス許否を判定すべきルール関数が関数記憶部２２０に記憶されていないことを条件として、当該アクセス要求の判定に用いるべき１または複数のルールをポリシー記憶部２１０から検索する。判定部２５５は、検索部２５０により検索された１または複数のルールに基づいて、アクセス要求に対するアクセス許否を判定し、制御部２４０に与える。これによりアクセス管理装置１００は、必要なルール関数が関数記憶部２２０に記憶されていない場合においても、ポリシー記憶部２１０に記憶されたポリシーに基づきアクセス許否を判定することができる。
【００２６】
以上に示したアクセス管理装置１００によれば、ポリシー記憶部２１０内のポリシーを複数のルール関数の組に変換し、アクセス要求に応じたルール関数を実行することによりアクセス許否を判定する。これにより、アクセス要求毎にポリシー内のルールを検索してアクセス許否を判定する場合と比較して高速にアクセス許否を判定することができる。また、アクセス要求のパラメータ、すなわち例えば要求元及び／又はアクセス対象のノードの位置に応じて異なるルール関数を用意するので、ポリシー記憶部２１０内の一部のルールを変更した場合に変更すべきルール関数を容易に特定することができ、最小限のルール関数を更新することにより新たなポリシーに対応することができる。
【００２７】
なお、以上において、アクセス管理装置１００は、複数の情報処理装置により実現されてもよい。一例として、アクセス管理装置１００は、ポリシー記憶部２１０内のポリシーに基づきルール関数を生成するポリシー記憶部２１０、生成部２１５、検索部２５０、および判定部２５５を実装したルール関数生成用の情報処理装置と、データ記憶部２００、関数記憶部２２０、受信部２２５、選択部２３０、インスタンス記憶部２３２、実行部２３５、制御部２４０、および登録部２４５を実装したアクセス要求処理用の情報処理装置とを備えてもよい。
【００２８】
図３は、本実施形態に係るデータ記憶部２００に記憶される構造化文書３００の一例を示す。図３（ａ）は、データ記憶部２００に格納されているＸＭＬ形式等の構造化文書３００を示す。階層構造に含まれる各ノードは、一例として、情報の記述開始位置を示す開始タグと、情報の記述終了位置を示す終了タグとを含む要素オブジェクトである。本図において具体的には、最上位階層のノードは、開始タグである＜Ｏｒｇａｎｉｚａｔｉｏｎ＞と、終了タグである＜／Ｏｒｇａｎｉｚａｔｉｏｎ＞とを含むＯｒｇａｎｉｚａｔｉｏｎオブジェクトである。
【００２９】
他の例として、ノードは、これらの開始タグ又は終了タグを含む要素オブジェクトの属性を示す属性オブジェクトであってもよい。本図において、ｄｅｐａｒｔｍｅｎｔオブジェクトの属性を示すｃｏｄｅオブジェクトは、属性オブジェクトの一例である。他の観点として、属性オブジェクトを、要素オブジェクトとなるノード内の変数とみなすこともできる。
また、構造化文書３００は、Ｅｍｐｌｏｙｅｅオブジェクトを、管理対象の社員毎に複数有しても良い。
【００３０】
図３（ｂ）は、データ記憶部２００に記憶される構造化文書３００の階層構造を示す。本図で示すように、階層構造を構成する複数のノードは、例えば木構造を構成する。そして、データ記憶部２００は、構造化文書３００を記憶することにより、最上位階層のノードをルートノードとする木構造によりこれらの複数のノードを階層化して記憶している。本例においてルートノードは、Ｏｒｇａｎｉｚａｔｉｏｎであり、最下位階層のリーフノードは、＠ｃｏｄｅ、＠ｒｏｌｅ等である。
【００３１】
構造化文書３００の階層構造において、あるノードを示す開始タグおよび終了タグの間に記述された開始タグおよび終了タグの組は、そのノードの下位階層のノードについての記述となる。例えば、構造化文書３００のＥｍｐｌｏｙｅｅオブジェクトの開始タグおよび終了タグの間に記述されたＮａｍｅオブジェクトおよびＳａｌａｒｙオブジェクトは、Ｅｍｐｌｏｙｅｅオブジェクトに対応するノードの下位階層のノードとなる。また、あるノードの属性を示すノードは、そのノードの下位階層のノードとなる。例えば、構造化文書３００のＥｍｐｌｏｙｅｅオブジェクトの属性を示すｒｏｌｅオブジェクトは、Ｅｍｐｌｏｙｅｅオブジェクトに対応するノードの下位階層のノードとなる。本図においては、属性を示すノードは先頭に＠を付して表す。また、本図においては、構造化文書の各ノードに対応して記述されたテキストデータを、テキストデータであることを示すｔｅｘｔ（）として表す。
【００３２】
それぞれのノードの階層構造における位置は、ルートノードから当該ノードに至る経路上のノードの名前を順に含み、これらのノードの名前が'／'等の区切文字により連結された文字列により表される。一例として、ｄｅｐａｒｔｍｅｎｔに対応するノードの位置は、／Ｏｒｇａｎｉｚａｔｉｏｎ／ｄｅｐａｒｔｍｅｎｔというパス表現により表記される。
【００３３】
なお、本図の例に代えて、階層構造のデータは、ＳＧＭＬ又はＨＴＭＬ等で記述された文書であってもよい。この場合、各ノードは、ＸＭＬの場合と同様、開始タグ及び終了タグの組により表されるオブジェクトであってもよいし、属性であってもよい。更に他の例として、階層構造のデータとは、記憶装置のファイルシステムに記録されるデータであってもよい。この場合、各ノードは、ファイル又はフォルダである。そして、あるフォルダに格納されたファイルは、そのフォルダを表すノードの下位階層のノードとなる。
【００３４】
図４は、本実施形態に係るポリシー記憶部２１０に記憶されるポリシー４１０の一例を示す。ポリシー記憶部２１０は、要求元、および階層構造におけるノードの位置に対応付けて、当該要求元による当該ノードへのアクセス許否の情報を示す多数のルール４００（４００ａ〜４００ｌ）を記憶する。本実施形態に係るルール４００は、アクセス許否の情報として、対象ノードに対しアクセス許可を設定する「＋ｒ」と、対象ノードおよび当該対象ノードの全ての子孫のノードに対しアクセス許可を設定する「＋Ｒ」と、対象ノードおよび当該対象ノードの全ての子孫のノードに対しアクセス拒否を設定する「−Ｒ」のいずれかを設定することができる。ここで、対象ノードの子孫のノードとは、対象ノードから最下位階層のリーフノードに至るまでの経路上に位置する対象ノード以外のノードを示す。
【００３５】
例えば、ルール４００ａは、アクセス要求の主体Ｔａｒｏからの位置／ａのノードに対するアクセスを許可（＋ｒ）することを示す。ルール４００ｂは、アクセス要求の主体Ｔａｒｏからの位置／ａ／ｂのノードおよびその子孫のノードに対するアクセスを許可（＋Ｒ）することを示す。ここで、ポリシー記憶部２１０は、一例としてテキスト形式によりルール４００を記憶して良く、これに代えてテキスト形式のルール４００をアクセス管理装置１００の内部データ形式に変換して記憶しても良い。
【００３６】
アクセス許否の情報として、対象ノードに加え全ての子孫のノードにアクセス制御効果を伝播させるルール（図中のルール４００ｂ、ｃ）を、以下「伝播ルール」と表す。伝播ルールにより、ポリシー４１０の設定者は、一の対象ノードに対応して、当該対象ノードを最上位とする部分木に含まれる全てのノードに対するアクセスの許可または拒否を、１つのルール４００により記述することができる。
【００３７】
本実施形態に係るポリシー４１０は、以下の２要件を前提とする。
（１）矛盾の解決
ルール４００の組み合わせによっては、一つのノードに対し、アクセス許可およびアクセス拒否の両方が設定されうる。例えば図４において、／ａ／ｂ／ｃ／ｅに位置するノードは、Ｔａｒｏからのアクセス要求に対し、ルール４００ｂによりアクセス許可が設定され、ルール４００ｃによりアクセス拒否が設定される。本実施形態に係るアクセス管理装置１００は、アクセス許可およびアクセス拒否の両方が設定される場合、アクセス拒否を優先することにより矛盾を解決する。したがって、上記の例においてアクセス管理装置１００は、Ｔａｒｏから／ａ／ｂ／ｃ／ｅに位置するノードへのアクセスを禁止する。これに代えて、ポリシー４１０は、アクセス許可およびアクセス拒否の両方が設定されるノードへのアクセスを許可するように定められても良い。
【００３８】
（２）デフォルトのアクセス制御効果
いずれのルール４００によってもアクセス許否が設定されないノードに対しては、デフォルトのアクセス制御効果が設定される。本実施形態に係るアクセス管理装置１００は、アクセス拒否をデフォルトのアクセス制御効果とする。これに代えてアクセス管理装置１００は、アクセス許可をデフォルトのアクセス制御効果としても良い。
【００３９】
図５は、本実施形態に係るマッピングテーブル２２２の一例を示す。マッピングテーブル２２２は、アクセス要求のパラメータの一例である要求元に対応付けて、ルール関数を指定するパッケージ名、クラス名、およびメソッド名を含むポインタと、登録部２４５により登録されたアクセス許否のキャッシュとを記憶する。
【００４０】
例えば、本図のマッピングテーブル２２２は、要求元Ｈａｎａに対応付けて、Ｈａｎａからのアクセス要求に対するアクセス許否を判定するルール関数を示すパッケージ名ｐｋｇ１、クラス名Ｃｌｓ１、およびメソッド名ｍｅｔｈｏｄ１を記憶する。また、本図のマッピングテーブル２２２は、要求元Ｈａｎａに対応付けて、過去に受けたアクセス要求に応じて登録部２４５により登録された判定結果として、位置／ａのノードに対するアクセス許可（＋ｒ）および位置／ａ／ｂのノードに対するアクセス許可（+r）をキャッシュする。また、本図のマッピングテーブル２２２は、要求元Ｔｏｍに対応するルール関数が未だ生成されていないことから、要求元Ｔｏｍに対応するルール関数を記憶していない。
【００４１】
図６は、本実施形態に係るインスタンス記憶部２３２の一例を示す。インスタンス記憶部２３２は、１または複数のメソッド関数を含むクラス毎に、当該クラスのインスタンスの識別情報を記憶する。この識別情報は、一例として当該クラスのインスタンスに対するポインタであって良い。
【００４２】
例えば、本図のインスタンス記憶部２３２は、パッケージ名ｐｋｇ１、クラス名Ｃｌｓ１により指定されるクラスに対し、インスタンスの識別情報Ｉｎｓ１を記憶する。この場合、当該クラスは既にインスタンス化されていることから、実行部２３５は、当該クラスのメソッド関数として実現されたルール関数を、当該識別情報を用いて呼び出すことができる。また、パッケージ名ｐｋｇ１、クラス名Ｃｌｓ２により指定されるクラスに対しては、インスタンスの識別情報が記憶されていない。この場合、当該クラスは未だインスタンス化されていないことから、選択部２３０は、当該クラスのメソッド関数として実現されたルール関数を呼び出す前に、当該クラスをインスタンス化する。
【００４３】
図７は、本実施形態に係るアクセス管理装置１００によりルール関数を作成する動作フローを示す。
まず、生成部２１５は、生成すべきルール関数を特定する（Ｓ７００）。例えば生成部２１５は、ポリシー全体が新たにポリシー記憶部２１０に格納された場合、全ての要求元に対応するルール関数を生成することを決定してよい。また、生成部２１５は、ポリシー記憶部２１０内の一部のルールが更新された場合、または一部のルールの追加・削除があった場合、この変更に伴って更新されるべきルール関数を特定してよい。本実施形態においては、要求元に応じて異なるルール関数が用いられるので、生成部２１５は、変更前のルールに含まれていた要求元および変更後のルールに含まれる要求元に対応するルール関数を、更新されるべきルール関数として特定することができる。
【００４４】
次に、生成部２１５は、更新されるべきルール関数を用いるアクセス要求の処理をロックする（Ｓ７１０）。本実施形態に係る生成部２１５は、クラス単位でルール関数を更新するので、更新されるべきルール関数を含むクラス全体をロックする。これを実現するため、生成部２１５は、更新されるべきルール関数を含むクラスのパッケージ名およびクラス名をマッピングテーブル２２２から検索し、当該クラスに対応するマッピングテーブル２２２またはインスタンス記憶部２３２のエントリをロックしてよい。これにより選択部２３０は、アクセス要求に対応するマッピングテーブル２２２またはインスタンス記憶部２３２のエントリがロックされていることを条件として、当該アクセス要求の処理を遅延させることができる。これに代えて選択部２３０は、実行部２３５および制御部２４０を経由して、当該アクセス要求を一時的に処理できないことをクライアント装置１１０へ通知してもよい。
次に、生成部２１５は、更新されるべきルール関数を含むクラスのインスタンスをインスタンス記憶部２３２から削除することにより、当該インスタンスを解放する（Ｓ７２０）。
【００４５】
次に、生成部２１５は、更新されるべきルール関数のベースとなる１または複数のルールをポリシー記憶部２１０から抽出する（Ｓ７３０）。本実施形態に係る生成部２１５は、更新されるべきルール関数のそれぞれについて、当該ルール関数に対応する要求元についての１または２以上のルールを抽出する。
【００４６】
次に、生成部２１５は、同一の要求元についての１または２以上のルールに基づいて、当該要求元に対応するルール関数を生成する（Ｓ７４０）。ここで生成部２１５は、２以上の要求元の組に対し１つのルール関数を対応付ける場合、これらの２以上の要求元についての１または２以上のルールに基づいて、当該２以上の要求元に対応するルール関数を生成してよい。一例として、生成部２１５は、予め定めた２以上の数の要求元についての２以上のルールに基づいて、当該２以上の数の要求元に対応する共通のルール関数を生成する。
【００４７】
ルール関数の生成において、生成部２１５は、まず、同一の要求元または２以上の要求元についての２以上のルールに基づいて、当該要求元に対応するルール関数のソースコードを生成する。そして、生成部２１５は、当該ソースコードをコンパイルすることにより、当該ルール関数のオブジェクトコードを生成する。
【００４８】
次に、生成部２１５は、生成したルール関数のサイズをチェックする（Ｓ７５０）。ルール関数のサイズが予め定められたサイズを超える場合（Ｓ７５０：ＮＧ）、生成部２１５は、ルールを分割して（Ｓ７６０）、分割したルールの組のそれぞれについてルール関数を生成する（Ｓ７４０）。例えば生成部２１５は、２以上の要求元に対し１つのルール関数を生成しようとした場合、これらの２以上の要求元を複数のグループに分割し、グループ毎に１つのルール関数を生成するようにして良い。
【００４９】
次に、生成部２１５は、生成した１または２以上のルール関数をまとめたクラスを生成する（Ｓ７７０）。ここで、クラスのサイズが予め定められたサイズを超える場合（Ｓ７７５：ＮＧ）、生成部２１５は、クラスを分割することにより１つのクラスに含めるルール関数の数を減らして（Ｓ７８０）、再度クラスを生成する（Ｓ７７０）。
【００５０】
次に、生成部２１５は、クラスと、ルール関数となるメソッド関数とをマッピングテーブル２２２および２３２に登録する（Ｓ７９０）。より具体的には、生成部２１５は、当該クラスのパッケージ名およびクラス名をインスタンス記憶部２３２に記憶させる。また、当該ルール関数のオブジェクトコードを識別するための情報として、当該ルール関数となるメソッド関数についてのパッケージ名、クラス名、およびメソッド名をマッピングテーブル２２２に記憶させる。更に生成部２１５は、新たに生成したクラスをパッケージ２２４に登録する。
【００５１】
以上の処理を終えると、生成部２１５は、アクセス要求をアンロックし、後続のアクセス要求を処理可能とする（Ｓ７９５）。
【００５２】
以上に示した生成部２１５によれば、ルールが変更された要求元に対応するルール関数を適切に選択して、選択したルール関数のみを更新することができる。また、生成部２１５は、生成したルール関数が予め定められたサイズ以下であること、または、生成したクラスが予め定められたサイズ以下であることを条件として、当該ルール関数または当該クラスを関数記憶部２２０に記憶させることができる。これにより生成部２１５は、Ｊａｖａ（登録商標）等の処理系によるサイズ制約を満たす適切なルール関数およびクラスを生成することができる。
【００５３】
図８は、本実施形態に係る関数記憶部２２０に記憶されるルール関数の一例を示す。生成部２１５は、図７のＳ７３０において、要求元Ｔａｒｏについてのルール４００ａ〜ｃをポリシー記憶部２１０から抽出する。次に、図７のＳ７４０において、抽出したルール４００ａ〜ｃに基づいて、本図に示したルール関数を生成する。次に、図７のＳ７７０において、当該ルール関数をメソッド関数ｍｅｔｈｏｄ１として含むクラスＣｌｓ１を生成する。そして、図７のＳ７９０において、当該クラスＣｌｓ１をパッケージｐｋｇ１に登録すると共に、マッピングテーブル２２２に当該ルール関数を記憶させる。
【００５４】
生成部２１５が生成するルール関数は、クラスＣｌｓ１中のメソッド関数ｍｅｔｈｏｄ１として実現される。メソッド関数ｍｅｔｈｏｄ１は、１行目において、アクセス対象となるノードの位置を文字列のパラメータａｃｃｅｓｓｅｄＰａｔｈとして入力する。そして、２行目、４行目、および６行目において、アクセス対象となるノードの位置ａｃｃｅｓｓｅｄＰａｔｈを、当該要求元についてのルール４００ｃ、ルール４００ｂ、およびルール４００ａのそれぞれに含まれる位置を示す定数'／ａ／ｂ／ｃ'、'／ａ／ｂ'、および'／ａ'と順次比較する。そして、アクセス対象となるノードの位置がいずれかの定数と一致した場合に、当該要求元、および、当該定数が示す位置と組となるアクセス許否の情報を判定結果として返す。すなわち例えば、６行目において、ａｃｃｅｓｓｅｄＰａｔｈが定数'／ａ'と一致した場合に、要求元Ｔａｒｏおよび当該定数が示す位置／ａと組となるアクセス許否の情報＋ｒによりアクセスが許可されること（ｔｒｕｅ）を判定結果として返す。
【００５５】
ここで、生成部２１５は、アクセス制御効果が伝播するルール４００ｃについては、アクセス対象となるノードの位置を示す文字列ａｃｃｅｓｓｅｄＰａｔｈが、アクセス制御効果を及ぼすノードの部分木における最上位のノードの位置を示す文字列'／ａ／ｂ／ｃ' を先頭部分に含むことを条件として（２行目）、当該伝播ルールにより指定されるアクセス許否の情報−Ｒ（=ｆａｌｓｅ）を判定結果として返す（３行目）ルール関数を生成する。同様に生成部２１５は、伝播ルール４００ｂについては、文字列ａｃｃｅｓｓｅｄＰａｔｈが、文字列'／ａ／ｂ'を先頭に含むことを条件として（４行目）、伝播ルール４００ｂにより指定されるアクセス許可＋Ｒ（＝ｔｒｕｅ）を判定結果として返す。
【００５６】
本実施形態に係る生成部２１５は、アクセス許可よりアクセス拒否の設定を優先するべく、アクセス拒否を示すルールを先に判定してからアクセス許可を示すルールを判定するようにルール関数の処理順序を定める。すなわち、アクセス対象となるノードが、アクセス拒否を示すいずれかの伝播ルールにより指定される部分木に含まれることを条件としてアクセス拒否の判定結果を返すルール関数を生成する場合において、生成部２１５は、アクセス対象となるノードがアクセス拒否（−Ｒ）を示すいずれかの伝播ルールにより指定される部分木に含まれるか否かをまず判定するように処理順序を定める。そして、生成部２１５は、アクセス対象となるノードがアクセス拒否（−Ｒ）を示すいずれの伝播ルールにより指定される部分木にも含まれない場合において、アクセス許可（＋Ｒ，＋ｒ）を示すいずれかのルールによりアクセスが許可されることを条件として、アクセス許可の判定結果を返すようにルール関数を定める。
【００５７】
また、生成部２１５は、６行目に示したように、いずれのルール４００によってもアクセス許否が設定されないノードに対し、デフォルトとしてアクセス拒否を設定するべく、いずれのルール４００に対応する条件にも一致しない場合に、アクセス拒否の判定結果（＝ｆａｌｓｅ）を返すようにする。
【００５８】
なお、当該ノードのアクセス許可（＋ｒ）、または、祖先ノードの伝播ルールによるアクセス許可（祖先ノードが＋Ｒ、当該ノードは設定無し）を区別して返す形態においては、生成部２１５は、下位のノードに対するアクセス許可のルールを、上位のノードに対するアクセス許可のルールより先に判定するようにルール関数を生成してよい。
【００５９】
図９は、本実施形態に係るアクセス管理装置１００によりアクセスを制御する動作フローを示す。
まず、受信部２２５は、要求元からのアクセス要求をクライアント装置１１０から受信し、選択部２３０へ供給する（ステップＳ９００）。次に、選択部２３０は、マッピングテーブル２２２の中から、要求元に対応するエントリを検索する（Ｓ９０５）。
【００６０】
要求元に対応するエントリのキャッシュに、当該アクセス要求の対象ノードに対応付けて判定結果が既に登録されている場合（Ｓ９１０：Ｙｅｓ）、選択部２３０は、キャッシュ内の当該判定結果を実行部２３５を経由して制御部２４０へ渡す。これを受けて、制御部２４０は、キャッシュ内の当該判定結果に基づいてアクセス制御を行う（Ｓ９１５）。すなわち、制御部２４０は、当該判定結果がアクセス許可を示す場合に、データ記憶部２００に記憶された構造化文書における、アクセス対象のノードに対応するデータをクライアント装置１１０へ返信する。一方、当該判定結果がアクセス拒否を示す場合に、アクセスを拒否することをクライアント装置１１０へ応答する。これにより、選択部２３０は、以前のアクセス要求と同一の要求元から同一のノードに対する後続のアクセス要求を受信したことに応じて、当該要求元に対応付けられたルール関数を実行部２３５により実行させずに、当該要求元および当該ノードに対応付けて関数記憶部２２０に登録された判定結果を制御部２４０に与えることができる。そして、制御部２４０は、選択部２３０から与えられた判定結果に基づいて、後続のアクセス要求の許可または禁止を制御することができる。
【００６１】
一方、要求元に対応するエントリのキャッシュに、当該アクセス要求の対象ノードに対応する判定結果が登録されていない場合（Ｓ９１０：Ｎｏ）、選択部２３０は、当該要求元に対応付けられたルール関数のポインタを取得する（Ｓ９２０：Ｙｅｓ）。次に、選択部２３０は、マッピングテーブル２２２から取得したルール関数のポインタに含まれるパッケージ名およびクラス名を用いて、当該ルール関数を含むクラスのインスタンス識別情報をインスタンス記憶部２３２から取得する。ここで、選択部２３０は、選択したルール関数を含むクラスのインスタンスの識別情報がインスタンス記憶部２３２に記憶されていないことを条件として（Ｓ９２５：Ｎｏ）、当該クラスのインスタンスを生成して当該インスタンスの識別情報をインスタンス記憶部２３２に格納する（Ｓ９３０）。すなわち例えば、選択部２３０は、「インスタンス識別情報ｉｎｃｅｔａｎｃｅ＿ｉｄ＝ｎｅｗ  Ｃｌｓ１（）」等の処理を行ってクラスＣｌｓ１のコンストラクタを呼び出し、インスタンスの生成・初期化を行ってよい。
【００６２】
次に、実行部２３５は、アクセス要求の対象となるノードの位置を入力パラメータとして、選択部２３０により選択されたルール関数を実行する（Ｓ９３５）。すなわち、実行部２３５は、マッピングテーブル２２２から取得されたポインタにより指定されるルール関数を呼び出すことにより当該ルール関数を実行する。本実施形態に係る実行部２３５は、インスタンス記憶部２３２から取得されたインスタンス識別情報により指定されるインスタンスのメソッド関数を呼び出すことにより当該ルール関数を実行する。当該ルール関数を実行した結果、実行部２３５は、アクセス許否の判定結果を得ることができる。
【００６３】
次に、登録部２４５は、ルール関数を実行した結果得られた判定結果を、要求元およびアクセス要求の対象となるノードの位置に対応付けて関数記憶部２２０に登録する（Ｓ９４０）。そして、制御部２４０は、２４０は、選択部２３０から判定結果を受けて、アクセス要求の許可または禁止を制御し当該アクセス要求についての処理を終了する。
【００６４】
また、Ｓ９２０において要求元に対応するルール関数がマッピングテーブル２２２中に存在しない場合（Ｓ９２０：Ｎｏ）、選択部２３０は、検索部２５０に対してその旨を通知する。この通知を受けて、検索部２５０は、当該アクセス要求の判定に用いるべき１または複数のルールをポリシー記憶部２１０から検索する（Ｓ９５０）。次に、判定部２５５は、検索された１または複数のルールに基づいて、アクセス要求に対するアクセス許否を判定する（Ｓ９５５）。この判定結果を受けて、制御部２４０は、アクセス要求の許可または禁止を制御する（Ｓ９６０）。
【００６５】
また、生成部２１５は、受信したアクセス要求の要求元に対応付けてルール関数が記憶されていないことを条件として（Ｓ９２０：Ｎｏ）、図７と同様にして、当該要求元に対応するルール関数を生成する（Ｓ９６５）。そして、生成部２１５は、当該ルール関数を識別する情報をマッピングテーブル２２２に記憶させ、新たに生成した、当該ルール関数を含むクラスのオブジェクトコードをパッケージ２２４に登録する。
【００６６】
以上に示したアクセス管理装置１００によれば、ポリシー記憶部２１０内のポリシーを複数のルール関数の組に変換し、アクセス要求に応じたルール関数を実行することによりアクセス許否を判定する。これにより、アクセス要求毎にポリシー内のルールを検索してアクセス許否を判定する場合と比較して、より高速にアクセス許否を判定することができる。特に、ポリシー内のルールを検索してアクセス許否を判定する場合には、アクセス要求毎にポリシー全体を検索する必要があり、ポリシー全体をメモリに展開することが望まれる。これに対し、本実施形態に係るアクセス管理装置１００によれば、ルール関数を含むクラスを必要に応じて個別にインスタンス化するので、アクセス要求を受けないルール関数をメモリに展開する必要がなく、少ないメモリで効率よくアクセス制御を行うことができる。
【００６７】
また、関数記憶部２２０にルール関数が記憶されていない場合、検索部２５０および判定部２５５は、ポリシー記憶部２１０内のポリシーを検索してアクセス許否を判定することができる。したがって、アクセス管理装置１００は、ルール関数が登録されているアクセス要求に対しては効率良くアクセス制御を行う一方、ルール関数が登録されていないアクセス要求に対してもアクセス制御を正しく行うことができる。この機能を利用して、アクセス管理装置１００は、アクセス要求の頻度が所定の値より高い間またはアクセス要求が集中する可能性が高い所定の時間帯においては、ルール関数が登録されていないアクセス要求に対し検索部２５０および判定部２５５によりアクセス制御を行い、アクセス要求の頻度が所定の値以下の間またはアクセス要求が集中する可能性が低い所定の時間帯において生成部２１５により未登録のルール関数を生成させてよい。
【００６８】
図１０は、本実施形態の第１変形例に係るマッピングテーブル２２２の一例を示す。本変形例において、アクセス管理装置１００の構成および動作は、図２に示したアクセス管理装置１００と略同様であるから、以下相違点を除き説明を省略する。
本変形例に係るマッピングテーブル２２２は、複数の互いに異なるノードの位置のそれぞれに対応付けて、アクセス要求の要求元に応じてアクセス許否を判定するルール関数を記憶する。例えば、本図のマッピングテーブル２２２は、対象ノードの位置／ａに対応付けて、メソッド名ｍｅｔｈｏｄ１を記憶する。このメソッドは、全ての要求元について位置／ａのノードのアクセス制御効果を返すルール関数である。
【００６９】
図１１は、本実施形態の第１変形例に係るルール関数の一例を示す。本変形例に係る生成部２１５は、図７のＳ７３０において、対象ノードの位置／ａについてのルール４００ａ、ルール４００ｄ、ルール４００ｇ、およびルール４００ｊをポリシー記憶部２１０から抽出する。次に、図７のＳ７４０において、抽出したルール４００ａ、ルール４００ｄ、ルール４００ｇ、およびルール４００ｊに基づいて、本図に示したルール関数を生成する。
【００７０】
本変形例において生成部２１５が生成するルール関数は、予め定められたクラスＣｌｓ１中のメソッド関数ｍｅｔｈｏｄ１として実現される。本変形例において、生成部２１５は、全てのルール関数を共通のクラスＣｌｓ１に含めているが、全てのルール関数を複数のクラスに分割して含めてもよい。当該メソッド関数ｍｅｔｈｏｄ１は、１行目において、アクセス要求の要求元を文字列のパラメータｓｂｊとして入力する。そして、２行目、４行目、６行目、および８行目において、アクセス要求の要求元ｓｂｊを、対象ノードをアクセスしうる互いに異なる複数の要求元を示す文字列の定数'Ｔａｒｏ'、'Ｈａｎａ'、'Ｔｏｍ'、および'Ａｌｉｃｅ'と順次比較する。そして、いずれかの定数が、アクセス要求の要求元を示すｓｂｊと一致した場合に、当該定数が示す要求元と組となる位置／ａについてのアクセス許否の情報を返す。
【００７１】
なお、本変形例において、ルール関数は、アクセス許可またはアクセス拒否のいずれかを論理値により返すのに代えて、当該ノード自体にアクセス拒否（−Ｒ）が設定されている場合に０、アクセス制御効果の設定が無い場合に１、子孫ノードに伝播しないアクセス許可（＋ｒ）が設定されている場合に２、子孫ノードに伝播するアクセス許可（＋Ｒ）が設定されている場合に３等の、当該ノード自体に設定されたアクセス制御効果を識別する情報を返す。
【００７２】
図１２は、本実施形態の第１変形例に係るアクセス許否判定フローを示す。本アクセス拒否判定フローは、図９のＳ９３５に代えて用いられる。アクセス管理装置１００は、ルートノードから順にノード毎のアクセス制御効果を返すルール関数を呼び出していき、各ノードに設定されたアクセス制御効果に基づいて対象ノードのアクセス許否を判定する。
【００７３】
選択部２３０および実行部２３５は、ルートノードからアクセス要求の対象ノードに至るまでの各ノードについて、Ｓ１２１０からＳ１２３０の処理を行う（Ｓ１２００、Ｓ１２４０）。まず、選択部２３０は、マッピングテーブル２２２を検索し、処理対象のノードの位置に対応付けられたルール関数を選択する（Ｓ１２１０）。当該ルール関数がマッピングテーブル２２２に記憶されている場合（Ｓ１２２０：Ｙｅｓ）、実行部２３５は、当該ルール関数を呼び出して、処理対象のノード自体に設定されたアクセス制御効果を得る（Ｓ１２３０）。
【００７４】
ルートノードからアクセス要求の対象ノードに至るまでの各ノードについて上記の処理を終えると、実行部２３５は、各ルール関数の呼び出しにより得られたアクセス制御効果に基づいて、アクセス要求の対象ノードに対するアクセス許否を判定する（Ｓ１２５０）。
【００７５】
ここで、実行部２３５は、以下のいずれかの場合に対象ノードへのアクセスを拒否する。
（１）アクセス要求の対象ノードの祖先ノードの少なくとも１つにアクセス拒否−Ｒ（ルール関数の戻り値０）が設定されている場合
（２）ルートノードからアクセス要求の対象ノードに至るまでの間にアクセス制御効果の設定されていないノード（ルール関数の戻り値１）が存在し、かつ、当該ノードの祖先に、子孫ノードに伝播するアクセス許可＋Ｒ（ルール関数の戻り値３）が設定されたノードが存在しない場合
【００７６】
また、実行部２３５は、以下のいずれかの場合に対象ノードへのアクセスを許可する。
（３）ルートノードからアクセス要求の対象ノードに至るまでの間にある、アクセス制御効果の設定されていない全てのノード（ルール関数の戻り値１）について、当該ノードの祖先にアクセス拒否−Ｒ（ルール関数の戻り値０）が設定されたノードが存在せず、かつ、子孫ノードに伝播するアクセス許可＋Ｒ（ルール関数の戻り値３）が設定されたノードが存在する場合
（４）ルートノードからアクセス要求の対象ノードまでの全てのノードがアクセス許可＋Ｒまたは＋ｒである場合
【００７７】
以上の処理を終えると、実行部２３５は、アクセス許否の判定結果を登録部２４５および制御部２４０へ出力する（Ｓ１２６０）。
【００７８】
本変形例に係るアクセス管理装置１００によれば、ルートノードからアクセス対象のノードまでの各位置に対応付けられたルール関数を選択部２３０により順次選択し、アクセス要求の要求元を入力として選択されたルール関数を実行部２３５により順次実行することができる。そして、制御部２４０は、ルール関数を実行した結果得られたアクセス許否の判定結果に基づいて、アクセス要求の許可または禁止を制御することができる。
【００７９】
図１３は、本実施形態の第２変形例に係るマッピングテーブル２２２の一例を示す。本変形例において、アクセス管理装置１００の構成および動作は、図１に示したアクセス管理装置１００と略同様であるから、以下相違点を除き説明を省略する。
本変形例に係るマッピングテーブル２２２は、複数の互いに異なる要求元および複数の互いに異なる位置の組のそれぞれに対応付けて、当該要求元から当該位置のノードへのアクセス許否を判定するルール関数を記憶する。例えば、本図のマッピングテーブル２２２は、要求元Ｈａｎａおよび対象ノードの位置／ａに対応付けて、パッケージ名ｐｋｇ１、クラス名Ｃｌｓ１、およびメソッド名ｍｅｔｈｏｄ１を記憶する。このメソッドは、要求元ＴａｒｏおよびＨａｎａについて位置／ａのノードのアクセス制御効果を返すルール関数である。
【００８０】
生成部２１５は、図７および図８に関連して示した、複数の異なる要求元のそれぞれについてのルール関数の生成と、図１０から１２に関連して示した、複数の異なるノードの位置のそれぞれについてのルール関数の生成とを併せた処理を行うことにより、複数の異なる要求元および複数の異なるノードの位置の組のそれぞれについてのルール関数を生成することができる。すなわち例えば、生成部２１５は、図７のＳ７３０において、１または２以上の要求元についてポリシー記憶部２１０に記憶された、同一のノード位置を対象とする複数のルール４００を抽出する。そして、Ｓ７４０において、これらの１または２以上の要求元および当該位置に対応するルール関数を生成する。このルール関数は、対応する要求元について図１１と同様の処理を行うものであってよい。
【００８１】
次に、アクセス要求を受けると、選択部２３０は、図９のＳ９０５において、アクセス要求の要求元および対象ノードの位置に対応付けられたルール関数を関数記憶部２２０から選択する。次に、実行部２３５は、選択部２３０により選択されたルール関数を実行する。そして、制御部２４０は、図９のＳ９３５からＳ９４５において、当該ルール関数を実行した結果得られたアクセス許否の判定結果に基づいて、アクセス要求の許可または禁止を制御する。
【００８２】
ここで、ルール関数が処理対象のノード自体のアクセス制御効果を返すものである場合、選択部２３０および実行部２３５は、図１２と同様にして、ルートノードからアクセス要求の対象ノードに至るまでの各ノードについて、アクセス要求の要求元および当該ノードの位置に対応するルール関数を呼び出した結果得られるアクセス制御効果に基づいて、アクセス要求の対象ノードのアクセス拒否を判定してよい。
【００８３】
本変形例により、アクセス管理装置１００は、要求元およびノードの位置の両方を分割してルール関数を生成することができる。したがって、アクセス管理装置１００は、要求元のみ、またはノード位置のみを分割してルール関数を生成する場合と比較して、実装するルールがより少なくコードサイズの小さいルール関数を多数生成することができる。この結果、アクセス管理装置１００は、粒度の小さいルール関数を用いてより効率よくアクセス要求を処理することができる。また、少ないルールを実装するルール関数を多数生成することにより、アクセス管理装置１００は、ポリシー記憶部２１０内の一部のルールが変更された場合に、ルール関数の更新オーバーヘッドを低減することができる。
【００８４】
以上において、生成部２１５は、まず要求元またはノードの位置のいずれかに対応付けてルール関数を生成し、要求元またはノード位置のいずれかによる分割によっては当該ルール関数のサイズが予め定められたサイズを超えることを条件として、要求元およびノードの位置の両方に対応付けてルール関数を生成してもよい。これにより、アクセス管理装置１００は、サイズが大きくなったルール関数の要求元またはノードの位置に基づき分割して、より小さい２以上のルール関数に分けることができる。
【００８５】
図１４は、本実施形態の第３変形例に係る実行部２３５の構成を示す。本変形例において、アクセス管理装置１００の構成および動作は、第１変形例に係るアクセス管理装置１００と略同様であるから、以下相違点を除き説明を省略する。
【００８６】
ポリシー４１０に含まれるルール４００の中には、ルートノードから当該ルール４００により指定されるノードに至る少なくとも１つのノードに対し、述語式が指定されるものがありうる。述語式は、指定されたノード内の変数が所定の値をとることを条件として、当該ノードにアクセス許否を設定することを指示する。本変形例に係る生成部２１５は、このようなルール４００に基づくルール関数を生成する場合において、当該ルール関数に以下の処理を実装する。
【００８７】
（１）生成部２１５は、当該ルール関数内に、予め作成された読出関数を呼び出す処理を実装し、読出関数により変数の値を取得させるようにする。この読出関数は、複数のルール４００に共通に設けられ、当該ルール４００により指定される変数名をパラメータとして入力して、変数名に基づいて当該変数の値を読み出す関数である。
（２）生成部２１５は、当該ルール関数内に、読出関数により取得した変数の値が所定の値と一致することを条件として、ルールにより指定されたアクセス許否を判定結果として返す処理を実装する。
【００８８】
本変形例に係る実行部２３５は、以上の通り生成された１または複数のルール関数１４１０と、２以上のルール関数１４１０により共用されうる読出関数１４２０とを実行し、実行結果に基づき判定プロセス１４００によりアクセス許否を判定する。
【００８９】
より具体的には、まず受信部２２５は、階層化された構造化文書を構成する複数のノードのうち、アクセス要求により参照中のノードを読出関数に供給する。これにより、例えば図３においてノードｄｅｐａｒｔｍｅｎｔの下位に同一名称の複数のノードＥｍｐｌｏｙｅｅが存在する場合においても、いずれのノードＥｍｐｌｏｙｅｅを参照中であるかを読出関数側で特定することができる。
【００９０】
次に、実行部２３５内の判定プロセス１４００は、ルートノードからアクセス要求により指定されたノードに至るまでの各ノードについて、選択部２３０により選択されたルール関数１４１０を順次呼び出す。次に、実行部２３５は、呼び出されたルール関数１４１０の処理において、ルール４００内で指定された変数名をパラメータとして読出関数１４２０を呼び出す。この変数名は、参照中のノードを基準とする相対位置により変数を含むノードを指定するものであってよい。
【００９１】
次に、実行部２３５は、ルール関数１４１０から呼び出された読出関数１４２０の処理において、ルール関数１４１０により指定された変数の値をデータ記憶部２００から読み出し、ルール関数１４１０へ返す。ここで、実行部２３５は、受信部２２５から供給された参照中のノードを基準として、ルール関数により指定された変数名に含まれる相対位置のノードを選択し、当該ノード内の当該変数の値を読み出す。次に、実行部２３５は、ルール関数１４１０に処理を戻して、読出関数１４２０により読み出された変数の値がルール４００により指定された値と一致するか否かを判定する。一致した場合、実行部２３５は、ルール４００により指定されたアクセス制御効果を判定プロセス１４００へ返す。
【００９２】
図１５は、本実施形態の第３変形例に係るルール関数１４１０の一例を示す。図１５（ａ）は、ルール４００が「＜Ｔａｒｏ，／ａ／ｂ／ｃ［＠ｄ=１］，＋ｒ＞」の場合におけるルール関数１４１０の一例である。当該ルール関数１４１０は、処理対象のノードの位置が／ａ／ｂ／ｃの場合に、図１２のＳ１２３０において呼び出される。
【００９３】
ルール関数１４１０は、１行目において、アクセス要求の要求元を文字列のパラメータｓｂｊとして入力する。２行目において、ルール４００により指定される要求元を示す文字列の定数'Ｔａｒｏ'とアクセス要求の要求元ｓｂｊとを比較し、一致した場合に３行目から６行目の処理を行う。
【００９４】
ルール関数１４１０は、３行目および４行目において、ルール４００により指定された変数名'＠ｄ'をパラメータとして読出関数ｄａｔａＲｅｔｒｉｅｖｅ（）を呼び出して、ｄａｔａＲｅｔｒｉｅｖｅ（）の戻り値である変数＠ｄの値を文字列の配列ｖａｌｕｅに代入する。次に、５行目において、ルール関数１４１０は、変数＠ｄの値ｖａｌｕｅ［０］を整数に変換し、ルール４００により指定される値1と比較する。そして、５行目の比較の結果＠ｄが１であった場合に、ルール関数１４１０は、６行目においてアクセス制御効果＋ｒを示す値２を判定プロセス１４００へ返す。
【００９５】
図１５（ｂ）は、ルール４００が「＜Ｔａｒｏ，／ａ／ｂ［＠ｅ＝'ｌｅｖｅｌ１'］／ｃ［＠ｄ＝１］，＋ｒ＞」の場合におけるルール関数１４１０の一例である。当該ルール関数１４１０は、処理対象のノードの位置が／ａ／ｂ／ｃの場合に、図１２のＳ１２３０において呼び出される。
【００９６】
ルール関数１４１０は、１行目において、アクセス要求の要求元を文字列のパラメータｓｂｊとして入力する。２行目において、アクセス要求の要求元ｓｂｊを、ルール４００により指定される要求元を示す文字列の定数'Ｔａｒｏ'と比較し、一致した場合に３行目から７行目の処理を行う。
【００９７】
ルール関数１４１０は、３行目および４行目において、ルール４００により指定された変数名'．．／＠ｅ'および'＠ｄ'をパラメータとして読出関数ｄａｔａＲｅｔｒｉｅｖｅ（）を呼び出して、ｄａｔａＲｅｔｒｉｅｖｅ（）の戻り値である変数＠ｅおよび変数＠ｄの値を文字列の配列ｖａｌｕｅに代入する。ここで、変数名'．．／＠ｅ'は、参照中のノード／ａ／ｂ／ｃを基準とする相対位置により変数＠ｅを含むノードを指定するものである。すなわち、相対位置'．．／'により参照中のノード／ａ／ｂ／ｃの親ノード／ａ／ｂを指定しているので、／ａ／ｂ内の変数＠ｅが読み出される。
【００９８】
次に、６行目において、ルール関数１４１０は、変数＠ｅおよび＠ｄの値を、値'ｌｅｖｅｌ１'および値１と比較する。そして、６行目の比較の結果、＠ｅが'ｌｅｖｅｌ１'かつ＠ｄが１であった場合に、ルール関数１４１０は、７行目においてアクセス制御効果＋ｒを示す値２を判定プロセス１４００へ返す。
【００９９】
本変形例に係るアクセス管理装置１００によれば、変数値の条件を述語式により指定するルール４００を含む場合においても、ルール関数１４１０を用いて効率良くアクセス許否を判定することができる。
【０１００】
図１６は、本実施形態に係るルール関数の他の一例を示す。ルール４００が、子孫ノードであることを示す表記'／／'を用いてノードを指定している場合、生成部２１５は、ルール４００により指定されるノードの位置を示す文字列を、アクセス対象のノードの位置を示す文字列とパターンマッチされる正規表現により表す。
【０１０１】
図１６（ａ）は、ルール＜Ｔａｒｏ，／ａ／／ｄ，−Ｒ＞に基づき生成部２１５が生成するルール関数の一例を示す。位置を示す文字列／ａ／／ｄは、１行目において、正規表現のパターンｐａｔｔｅｒｎに置換される。より具体的には、位置／ａ／／ｄは、aとdが親子関係となる'／ａ／ｄ'の場合、および、aとdが親子関係以外の祖先と子孫の関係となる'／ａ／．＊／ｄ'の場合の両方に場合分けすることができる。ここで、'．＊'は、任意の文字（正規表現'．'）を１以上含む文字列を表す正規表現であり、aの子孫かつdの祖先となる１または複数のノードの名前にパターンマッチされる。
【０１０２】
また、本ルールのアクセス制御効果は、子孫に伝播する−Ｒであるから、'／ａ／ｄ'または'／ａ／．＊／ｄ'の子孫ノードに対してもパターンマッチされる必要がある。そこで、生成部２１５は、 アクセスの対象ノードの文字列を、'／ａ／ｄ'および'／ａ／．＊／ｄ'と、これらの全ての子孫ノードを表す'／ａ／ｄ／．＊'および'／ａ／．＊／ｄ／．＊'とのいずれかにマッチさせるパターンｐａｔｔｅｒｎを用意する。なお、本例においては、Ｊａｖａ（登録商標）の基本パッケージの一つであるｊａｖａ．ｕｔｉｌ．ｒｅｇｅｘパッケージを利用して、正規表現を表すパターンのコンパイル（１行目）およびパターンマッチ（４行目）を行っている。
【０１０３】
２行目において、ルール関数ｍｅｔｈｏｄＤｅｓｃは、要求元を示す文字列ｓｂｊ、および、アクセスの対象ノードの位置を示す文字列ａｃｃｅｓｓｅｄＰａｔｈを入力する。次に、要求元が'Ｔａｒｏ'であり（３行目）、かつ、位置を示す文字列ａｃｃｅｓｓｅｄＰａｔｈが予め用意したパターンｐａｔｔｅｒｎとマッチする場合に（４行目から５行目）、当該ルールにより指定されたアクセス制御効果−Ｒに応じてアクセス拒否を返す。
【０１０４】
図１６（ｂ）は、要求元Ｔａｒｏに対応付けて生成されたルール関数の一例であり、アクセスの対象ノードの位置を示す文字列を入力し、要求元Ｔａｒｏについてのアクセス許否を返す他は図１６（ａ）と同様である。
【０１０５】
また、ルール４００が、任意の１階層分のノード名にマッチされることを示す'＊'を含む場合においても、生成部２１５は、'／／'の場合と同様にしてルール関数を生成することができる。すなわち、ルール内の'＊'を、階層毎のノード名の区切りを示す'／'以外の任意の１または複数の文字にマッチされる正規表現［＾／］＊に変換し、アクセスの対象ノードとパターンマッチされるべきパターン"ｐａｔｔｅｒｎ"として用意する。
【０１０６】
以上において、生成部２１５は、'／／'または'＊'を含むルールを、クラス毎にそれぞれ１つのメソッド関数にまとめることにより、クラス毎に１つのルール関数として提供してもよい。この場合、実行部２３５は、まず当該ルール関数を呼び出して、アクセスの対象ノードの位置が当該ルール関数によりアクセスを拒否されなかった場合に、'／／'および'＊'の処理を含まないルール関数を呼び出してアクセス許否を判定してもよい。
【０１０７】
以上に示したルール関数を用いることにより、ポリシー４１０の設定者が'／／'および'＊'を用いて分かりやすくルール４００を作成した場合においても、当該ルール４００を適切に処理することができる。
【０１０８】
図１７は、本実施形態に係るコンピュータ１９００の構成の一例を示す。本実施形態に係るコンピュータ１９００は、ホスト・コントローラ２０８２により相互に接続されるＣＰＵ２０００、ＲＡＭ２０２０、グラフィック・コントローラ２０７５、及び表示装置２０８０を有するＣＰＵ周辺部と、入出力コントローラ２０８４によりホスト・コントローラ２０８２に接続される通信インターフェイス２０３０、ハードディスクドライブ２０４０、及びＣＤ−ＲＯＭドライブ２０６０を有する入出力部と、入出力コントローラ２０８４に接続されるＲＯＭ２０１０、フレキシブルディスク・ドライブ２０５０、及び入出力チップ２０７０を有するレガシー入出力部とを備える。
【０１０９】
ホスト・コントローラ２０８２は、ＲＡＭ２０２０と、高い転送レートでＲＡＭ２０２０をアクセスするＣＰＵ２０００及びグラフィック・コントローラ２０７５とを接続する。ＣＰＵ２０００は、ＲＯＭ２０１０及びＲＡＭ２０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィック・コントローラ２０７５は、ＣＰＵ２０００等がＲＡＭ２０２０内に設けたフレーム・バッファ上に生成する画像データを取得し、表示装置２０８０上に表示させる。これに代えて、グラフィック・コントローラ２０７５は、ＣＰＵ２０００等が生成する画像データを格納するフレーム・バッファを、内部に含んでもよい。
【０１１０】
入出力コントローラ２０８４は、ホスト・コントローラ２０８２と、比較的高速な入出力装置である通信インターフェイス２０３０、ハードディスクドライブ２０４０、ＣＤ−ＲＯＭドライブ２０６０を接続する。通信インターフェイス２０３０は、ネットワークを介して他の装置と通信する。ハードディスクドライブ２０４０は、コンピュータ１９００内のＣＰＵ２０００が使用するプログラム及びデータを格納する。ＣＤ−ＲＯＭドライブ２０６０は、ＣＤ−ＲＯＭ２０９５からプログラム又はデータを読み取り、ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供する。
【０１１１】
また、入出力コントローラ２０８４には、ＲＯＭ２０１０と、フレキシブルディスク・ドライブ２０５０、及び入出力チップ２０７０の比較的低速な入出力装置とが接続される。ＲＯＭ２０１０は、コンピュータ１９００が起動時に実行するブート・プログラムや、コンピュータ１９００のハードウェアに依存するプログラム等を格納する。フレキシブルディスク・ドライブ２０５０は、フレキシブルディスク２０９０からプログラム又はデータを読み取り、ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供する。入出力チップ２０７０は、フレキシブルディスク・ドライブ２０５０や、例えばパラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポート等を介して各種の入出力装置を接続する。
【０１１２】
ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供されるプログラムは、フレキシブルディスク２０９０、ＣＤ−ＲＯＭ２０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、記録媒体から読み出され、ＲＡＭ２０２０を介してコンピュータ１９００内のハードディスクドライブ２０４０にインストールされ、ＣＰＵ２０００において実行される。
【０１１３】
コンピュータ１９００にインストールされ、コンピュータ１９００をアクセス管理装置１００として機能させるプログラムは、データ記憶部２００を管理するデータ管理モジュールと、ポリシー記憶部２１０を管理するポリシー管理モジュールと、生成モジュールと、関数記憶部２２０を管理する関数管理モジュールと、受信モジュールと、選択モジュールと、インスタンス記憶部２３２を管理するインスタンス管理モジュールと、実行モジュールと、制御モジュールと、登録モジュールと、検索モジュールと、判定モジュールとを備える。これらのプログラム又はモジュールは、ＣＰＵ２０００等に働きかけて、コンピュータ１９００を、データ記憶部２００と、ポリシー記憶部２１０と、生成部２１５と、関数記憶部２２０と、受信部２２５と、選択部２３０と、インスタンス記憶部２３２と、実行部２３５と、制御部２４０と、登録部２４５と、検索部２５０と、判定部２５５としてそれぞれ機能させる。
【０１１４】
以上に示したプログラム又はモジュールは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク２０９０、ＣＤ−ＲＯＭ２０９５の他に、ＤＶＤやＣＤ等の光学記録媒体、ＭＯ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ１９００に提供してもよい。
【０１１５】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【０１１６】
【図１】本発明の実施形態に係る情報システム１０の構成を示す。
【図２】本発明の実施形態に係るアクセス管理装置１００の構成を示す。
【図３】本発明の実施形態に係るデータ記憶部２００に記憶される構造化文書３００の一例を示す。
【図４】本発明の実施形態に係るポリシー記憶部２１０に記憶されるポリシー４１０の一例を示す。
【図５】本発明の実施形態に係るマッピングテーブル２２２の一例を示す。
【図６】本発明の実施形態に係るインスタンス記憶部２３２の一例を示す。
【図７】本発明の実施形態に係るアクセス管理装置１００によりルール関数を作成する動作フローを示す。
【図８】本発明の実施形態に係る関数記憶部２２０に記憶されるルール関数の一例を示す。
【図９】本発明の実施形態に係るアクセス管理装置１００によりアクセスを制御する動作フローを示す。
【図１０】本発明の実施形態の第１変形例に係るマッピングテーブル２２２の一例を示す。
【図１１】本発明の実施形態の第１変形例に係るルール関数の一例を示す。
【図１２】本発明の実施形態の第１変形例に係るアクセス許否判定フローを示す。
【図１３】本発明の実施形態の第２変形例に係るマッピングテーブル２２２の一例を示す。
【図１４】本発明の実施形態の第３変形例に係る実行部２３５の構成を示す。
【図１５】本発明の実施形態の第３変形例に係るルール関数の一例を示す。
【図１６】本発明の実施形態に係るルール関数の他の一例を示す。
【図１７】本発明の実施形態に係るコンピュータ１９００の構成の一例を示す。
【符号の説明】
【０１１７】
１０  情報システム
１００  アクセス管理装置
１１０  クライアント装置
２００  データ記憶部
２１０  ポリシー記憶部
２１５  生成部
２２０  関数記憶部
２２２  マッピングテーブル
２２４  パッケージ
２２５  受信部
２３０  選択部
２３２  インスタンス記憶部
２３５  実行部
２４０  制御部
２４５  登録部
２５０  検索部
２５５  判定部
３００  構造化文書
４００ａ〜ｌ  ルール
４１０  ポリシー
１４００  判定プロセス
１４１０  ルール関数
１４２０  読出関数
１９００  コンピュータ
２０００  ＣＰＵ
２０１０  ＲＯＭ
２０２０  ＲＡＭ
２０３０  通信インターフェイス
２０４０  ハードディスクドライブ
２０５０  フレキシブルディスク・ドライブ
２０６０  ＣＤ−ＲＯＭドライブ
２０７０  入出力チップ
２０７５  グラフィック・コントローラ
２０８０  表示装置
２０８２  ホスト・コントローラ
２０８４  入出力コントローラ
２０９０  フレキシブルディスク
２０９５  ＣＤ−ＲＯＭ
【図１】
2006344057.tif 000003
【図２】
2006344057.tif 000004
【図３】
2006344057.tif 000005
【図４】
2006344057.tif 000006
【図５】
2006344057.tif 000007
【図６】
2006344057.tif 000008
【図７】
2006344057.tif 000009
【図８】
2006344057.tif 000010
【図９】
2006344057.tif 000011
【図１０】
2006344057.tif 000012
【図１１】
2006344057.tif 000013
【図１２】
2006344057.tif 000014
【図１３】
2006344057.tif 000015
【図１４】
2006344057.tif 000016
【図１５】
2006344057.tif 000017
【図１６】
2006344057.tif 000018
【図１７】
2006344057.tif 000019