(57)【要約】【課題】  ユーザ属性などの属性情報に基づいたデータベースアクセス制御において、属性情報が変更された場合の管理負荷を軽減しながら、データベースへアクセスするデータアクセスプログラムの性能の低下を防止することを目的とする。【解決手段】  コンテキスト記憶部４３０は、属性管理サーバ２００から取得したデータオブジェクトにアクセスするユーザなどに関する属性情報を記憶する。また、ポリシー関数記憶部４４０は、コンテキスト記憶部４３０が記憶する属性情報に基づいて制御条件を生成するポリシー関数を記憶する。関数実行部４５０は、ユーザがデータアクセスプログラムでデータオブジェクトにアクセスする場合、ポリシー関数を実行する。制御条件付加部４６０は、ポリシー関数によって生成された制御条件をデータアクセスプログラムに付加する。実行部４７０は、制御条件を付加したデータアクセスプログラムを実行する。【選択図】        図１
2007018309.tif 000002
【特許請求の範囲】
【請求項１】
業務サーバに関する属性情報を管理記憶する属性管理サーバと、上記属性管理サーバから属性情報を取得するＤＢアクセス制御装置とに、ネットワークを介して接続され、データオブジェクトを管理するＤＢ（データベース）装置において、
業務サーバがデータオブジェクトへアクセスする場合、ＤＢアクセス制御装置が上記属性管理サーバから取得した上記業務サーバに関する属性情報をＤＢアクセス制御装置から取得して記憶するコンテキスト記憶部と、
属性情報を埋め込んだ制御条件を返値とする、データオブジェクトに関連付けられたポリシー関数を記憶するポリシー関数記憶部と、
上記業務サーバがデータオブジェクトへアクセスするために発行したデータアクセスプログラムを受信するプログラム受信部と、
上記プログラム受信部がデータアクセスプログラムを受信した場合、上記コンテキスト記憶部が記憶した属性情報を入力して、上記ポリシー関数記憶部が記憶したポリシー関数を実行して属性情報を埋め込んだ制御条件を返値として出力する関数実行部と、
上記関数実行部が出力したポリシー関数の返値である制御条件を取得し、制御条件を上記データアクセスプログラムに付加する制御条件付加部と、
上記制御条件付加部が制御条件を付加したアクセスプログラムを実行することによりデータオブジェクトへアクセスする実行部と
を備えることを特徴とするデータベース装置。
【請求項２】
上記属性管理サーバは、データオブジェクトへアクセスする業務サーバを使用するユーザに関するユーザ属性情報を上記属性情報として管理記憶し、
上記コンテキスト記憶部は、上記ユーザ属性情報を属性情報として記憶する
ことを特徴とする請求項１記載のデータベース装置。
【請求項３】
上記ポリシー関数記憶部は、データオブジェクトの属性に関連付けられたポリシー関数を記憶する
ことを特徴とする請求項１記載のデータベース装置。
【請求項４】
上記データベース装置は、さらに、
データオブジェクトへアクセスされた場合に結果ファイルを出力する結果出力部と、
上記結果出力部が出力した結果ファイルに上記ポリシー関数を付加する関数付加部とを備え、
上記コンテキスト記憶部は、業務サーバが結果ファイルへアクセスする場合、ＤＢアクセス制御装置が上記属性管理サーバから取得した上記業務サーバに関する属性情報をＤＢアクセス制御装置から取得して記憶し、
上記プログラム受信部は、上記業務サーバが結果ファイルへアクセスするために発行したデータアクセスプログラムを受信し、
上記関数実行部は、上記プログラム受信部がデータアクセスプログラムを受信した場合、上記コンテキスト記憶部が記憶した属性情報を入力して、上記関数付加部が結果ファイルに付加したポリシー関数を実行して属性情報を埋め込んだ制御条件を返値として出力し、
上記制御条件付加部は、上記関数実行部が出力したポリシー関数の返値である制御条件を取得し、制御条件を上記データアクセスプログラムに付加し、
上記実行部は、上記制御条件付加部が制御条件を付加したアクセスプログラムを実行することにより結果ファイルへアクセスする
ことを特徴とする請求項１記載のデータベース装置。
【請求項５】
属性情報を管理する属性管理サーバとネットワークを介して接続されるＤＢ（データベース）装置が管理するデータオブジェクトへのアクセスを制御するＤＢアクセス制御装置において、
データオブジェクトのレコードに対して設定されたアクセス制御情報を取得する制御情報取得部と、
上記制御情報取得部が取得したアクセス制御情報を記憶する制御情報記憶部と、
上記制御情報記憶部が記憶したアクセス制御情報に基づき、上記属性管理サーバが管理する属性情報を入力し、上記属性情報を埋め込んだ制御条件を返値とするポリシー関数を生成する関数生成部と、
上記関数生成部が生成したポリシー関数をデータオブジェクトに関連付けし、ＤＢに記憶させる関数制御部と
を備えることを特徴とするＤＢアクセス制御装置。
【請求項６】
制御情報取得部は、データオブジェクトのレコードを構成するフィールドに対して設定されたアクセス制御情報を取得し、
上記関数制御部は、上記関数生成部が生成したポリシー関数をデータオブジェクトの属性に対して関連付けし、ＤＢに記憶させる
ことを特徴とする請求項５記載のＤＢアクセス制御装置。
【請求項７】
上記関数生成部は、上記属性管理サーバが管理する属性情報が階層構造を持つ場合、入力された属性情報に対して下位の属性情報を埋め込んだ制御条件を返値とするポリシー関数を生成する
ことを特徴とする請求項５記載のＤＢアクセス制御装置。
【請求項８】
上記関数生成部は、上記属性管理サーバが管理する属性情報に基づいてアクセスを認容するかを判定し、アクセスを認容する場合、常にアクセスを許可する制御条件を返値とするポリシー関数を生成する
ことを特徴とする請求項５記載のＤＢアクセス制御装置。
【請求項９】
上記関数生成部は、上記属性管理サーバが管理する属性情報に基づいてアクセスを認容するかを判定し、アクセスを認容しない場合、常にアクセスを許可しない制御条件を返値とするポリシー関数を生成する
ことを特徴とする請求項５記載のＤＢアクセス制御装置。
【請求項１０】
業務サーバに関する属性情報を管理記憶する属性管理サーバと、データオブジェクトを管理するＤＢ（データベース）装置と、上記データベース装置が管理するデータオブジェクトへの業務サーバのデータアクセスプログラムによるアクセスを制御するＤＢアクセス制御装置とがネットワークを介して接続されるアクセス制御システムにおいて、
上記ＤＢアクセス制御装置は、
業務サーバがデータオブジェクトへアクセスする場合、上記属性管理サーバから上記業務サーバに関する属性情報を取得する属性取得部と、
上記属性取得部が取得した属性情報を記憶する属性記憶部と、
上記属性記憶部が記憶した属性情報を上記データベース装置へ送信する属性送信部とを備え、
上記データベース装置は、
上記属性送信部が送信した属性情報を受信する属性受信部と、
上記属性受信部が受信した属性情報を記憶するコンテキスト記憶部と、
属性情報を入力し、上記属性情報を埋め込んだ制御条件を返値とする、データオブジェクトに関連付けられたポリシー関数を記憶するポリシー関数記憶部と、
上記業務サーバがデータオブジェクトへアクセスするために発行したデータアクセスプログラムを受信するプログラム受信部と、
上記プログラム受信部がデータアクセスプログラムを受信した場合、上記コンテキスト記憶部が記憶した属性情報を入力して、上記ポリシー関数記憶部が記憶したポリシー関数を実行して属性情報を埋め込んだ制御条件を返値として出力する関数実行部と、
上記関数実行部が出力したポリシー関数の返値である制御条件を取得し、制御条件を上記データアクセスプログラムに付加する制御条件付加部と、
上記制御条件付加部が制御条件を付加したアクセスプログラムを実行することによりデータオブジェクトへアクセスする実行部と
を備えることを特徴とするアクセス制御システム。
【請求項１１】
上記ＤＢアクセス制御装置は、さらに、
データオブジェクトのレコードに対して設定されたアクセス制御情報を取得する制御情報取得部と、
上記制御情報取得部が取得したアクセス制御情報を記憶する制御情報記憶部と、
上記制御情報記憶部が記憶したアクセス制御情報に基づき、上記属性管理サーバが管理する属性情報を入力し、上記属性情報を埋め込んだ制御条件を返値とするポリシー関数を生成する関数生成部と、
上記関数生成部が生成したポリシー関数をデータオブジェクトに関連付けする関数制御部とを備え、
上記ポリシー関数記憶部は、上記関数制御部がデータオブジェクトに関連付けしたポリシー関数を記憶する
ことを特徴とする請求項１０記載のアクセス制御システム。
【請求項１２】
業務サーバに関する属性情報を管理記憶する属性管理サーバと、上記属性管理サーバから属性情報を取得するＤＢアクセス制御装置とに、ネットワークを介して接続され、データオブジェクトを管理するＤＢ（データベース）装置のアクセス制御方法において、
業務サーバがデータオブジェクトへアクセスする場合、ＤＢアクセス制御装置が上記属性管理サーバから取得した上記業務サーバに関する属性情報をＤＢアクセス制御装置から取得してコンテキスト記憶部に記憶するコンテキスト記憶ステップと、
属性情報を埋め込んだ制御条件を返値とする、データオブジェクトに関連付けられたポリシー関数をポリシー関数記憶部に記憶するポリシー関数記憶ステップと、
上記業務サーバがデータオブジェクトへアクセスするために発行したデータアクセスプログラムを受信するプログラム受信ステップと、
上記プログラム受信ステップでデータアクセスプログラムを受信した場合、上記コンテキスト記憶ステップで上記コンテキスト記憶部に記憶した属性情報を入力して、上記ポリシー関数記憶ステップで上記ポリシー関数記憶部に記憶したポリシー関数を実行して属性情報を埋め込んだ制御条件を返値として出力する関数実行ステップと、
上記関数実行ステップで出力したポリシー関数の返値である制御条件を取得し、制御条件を上記データアクセスプログラムに付加する制御条件付加ステップと、
上記制御条件付加ステップで制御条件を付加したアクセスプログラムを実行することによりデータオブジェクトへアクセスする実行ステップと
を備えることを特徴とするアクセス制御方法。
【請求項１３】
業務サーバに関する属性情報を管理記憶する属性管理サーバと、上記属性管理サーバから属性情報を取得するＤＢアクセス制御装置とに、ネットワークを介して接続され、データオブジェクトを管理するＤＢ（データベース）装置で動作するアクセス制御プログラムにおいて、
業務サーバがデータオブジェクトへアクセスする場合、ＤＢアクセス制御装置が上記属性管理サーバから取得した上記業務サーバに関する属性情報をＤＢアクセス制御装置から取得してコンテキスト記憶部に記憶するコンテキスト記憶ステップと、
属性情報を埋め込んだ制御条件を返値とする、データオブジェクトに関連付けられたポリシー関数をポリシー関数記憶部に記憶するポリシー関数記憶ステップと、
上記業務サーバがデータオブジェクトへアクセスするために発行したデータアクセスプログラムを受信するプログラム受信ステップと、
上記プログラム受信ステップでデータアクセスプログラムを受信した場合、上記コンテキスト記憶ステップで上記コンテキスト記憶部に記憶した属性情報を入力して、上記ポリシー関数記憶ステップで上記ポリシー関数記憶部に記憶したポリシー関数を実行して属性情報を埋め込んだ制御条件を返値として出力する関数実行ステップと、
上記関数実行ステップで出力したポリシー関数の返値である制御条件を取得し、制御条件を上記データアクセスプログラムに付加する制御条件付加ステップと、
上記制御条件付加ステップで制御条件を付加したアクセスプログラムを実行することによりデータオブジェクトへアクセスする実行ステップと
をコンピュータに実行させることを特徴とするアクセス制御プログラム。
【請求項１４】
属性情報を管理する属性管理サーバとネットワークを介して接続されるＤＢ（データベース）装置が管理するデータオブジェクトへのアクセスを制御するＤＢアクセス制御装置のアクセス制御方法において、
データオブジェクトのレコードに対して設定されたアクセス制御情報を取得する制御情報取得ステップと、
上記制御情報取得ステップで取得したアクセス制御情報を制御情報記憶部に記憶する制御情報記憶ステップと、
上記制御情報記憶ステップで上記制御情報記憶部に記憶したアクセス制御情報に基づき、上記属性管理サーバが管理する属性情報を入力し、上記属性情報を埋め込んだ制御条件を返値とするポリシー関数を生成する関数生成ステップと、
上記関数生成ステップで生成したポリシー関数をデータオブジェクトに関連付けし、ＤＢに記憶させる関数制御ステップと
を備えることを特徴とするアクセス制御方法。
【請求項１５】
属性情報を管理する属性管理サーバとネットワークを介して接続されるＤＢ（データベース）装置が管理するデータオブジェクトへのアクセスを制御するＤＢアクセス制御装置で動作するアクセス制御プログラムにおいて、
データオブジェクトのレコードに対して設定されたアクセス制御情報を取得する制御情報取得ステップと、
上記制御情報取得ステップで取得したアクセス制御情報を制御情報記憶部に記憶する制御情報記憶ステップと、
上記制御情報記憶ステップで上記制御情報記憶部に記憶したアクセス制御情報に基づき、上記属性管理サーバが管理する属性情報を入力し、上記属性情報を埋め込んだ制御条件を返値とするポリシー関数を生成する関数生成ステップと、
上記関数生成ステップで生成したポリシー関数をデータオブジェクトに関連付けし、ＤＢに記憶させる関数制御ステップと
をコンピュータに実行させることを特徴とするアクセス制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース装置で管理するデータへのアクセスの制御に関するものである。
【背景技術】
【０００２】
従来のＤＢ（データベース）に格納された情報を不正利用から保護する方策としては、表またはビュー単位にユーザの登録を行い、ユーザの所属や役職などの属性に応じてユーザのアクセス権限を設定するという方法があった。つまり、ユーザが表またはビューへアクセスする場合、アクセスする表またはビューに設定されたアクセス権限に応じて、ＤＢの内容を表示したり、非表示にしたりしていた。ところが、ＤＢで管理している情報は増加しており、それに比例し、ＤＢを使用するユーザ数なども増加していた。また、従来の方策では、人事異動や組織変更などによりユーザの役職や所属などの属性に変更が発生した場合にも、様々な設定変更を行う必要があった。このため、上述した方策でＤＢに格納された情報を不正利用から保護するのは、管理者の負荷が大きかった。
これに対し、特開２００５−３１８６２号公報では、ＤＢの表定義や表の列定義などのメタデータとユーザ属性を管理しているディレクトリ情報などとを用いることによりアクセス制御を行う技術が開示されている。特開２００５−３１８６２号公報では、ユーザなどの属性情報に変更があった場合にも、既存のＤＢの表などに設定された制御情報への変更を加えることなくＤＢへのアクセス制御を維持する技術が開示されている。特開２００５−３１８６２号公報の実現に当たっては、アクセス実行時にＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）プログラムなどのデータアクセスプログラムを解釈し、ディレクトリ情報と照らし合わせてＤＢへのアクセス制御条件を生成する必要があった。ここで、アクセス条件は、例えば、ＳＱＬプログラムであれば、ＷＨＥＲＥ句として生成されるものである。
【特許文献１】特開２００５−３１８６２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来の方法では、属性情報が変更された場合の管理負荷が大きいという課題があった。
また、特開２００５−３１８６２号公報の方法では、ＤＢへのアクセス実行時に、データアクセスプログラムを解釈し、解釈に基づきデータアクセスプログラムを書き換えする必要があった。この処理は、場合によっては複雑になり、データアクセスプログラムの性能が低下するという課題があった。
本発明は、これらの課題を解決し、ＤＢアクセス実行時にＤＢアクセス制御装置が行う処理を最小限に止めることを目的とする。
【課題を解決するための手段】
【０００４】
本発明は、業務サーバに関する属性情報を管理記憶する属性管理サーバと、上記属性管理サーバから属性情報を取得するＤＢアクセス制御装置とに、ネットワークを介して接続され、データオブジェクトを管理するＤＢ（データベース）装置において、業務サーバがデータオブジェクトへアクセスする場合、ＤＢアクセス制御装置が上記属性管理サーバから取得した上記業務サーバに関する属性情報をＤＢアクセス制御装置から取得して記憶するコンテキスト記憶部と、属性情報を埋め込んだ制御条件を返値とする、データオブジェクトに関連付けられたポリシー関数を記憶するポリシー関数記憶部と、上記業務サーバがデータオブジェクトへアクセスするために発行したデータアクセスプログラムを受信するプログラム受信部と、上記プログラム受信部がデータアクセスプログラムを受信した場合、上記コンテキスト記憶部が記憶した属性情報を入力して、上記ポリシー関数記憶部が記憶したポリシー関数を実行して属性情報を埋め込んだ制御条件を返値として出力する関数実行部と、上記関数実行部が出力したポリシー関数の返値である制御条件を取得し、制御条件を上記データアクセスプログラムに付加する制御条件付加部と、上記制御条件付加部が制御条件を付加したアクセスプログラムを実行することによりデータオブジェクトへアクセスする実行部と
を備えることを特徴とする。
【発明の効果】
【０００５】
本発明にかかるデータベース装置によれば、属性管理サーバから取得した属性情報に基づいた制御条件を、ポリシー関数を実行することにより生成するため、属性情報が更新された場合に、ＤＢの設定を変更する手間がかからない。また、あらかじめ設定されたポリシー関数を実行するため、ＤＢアクセス実行時の処理が複雑とならず、データアクセスプログラムの性能が低下することもない。
【発明を実施するための最良の形態】
【０００６】
以下、本発明を図面に示す実施の形態に基づいて説明する。
【０００７】
実施の形態１．
まず、実施の形態１について説明する。実施の形態１では、ＤＢが管理するデータオブジェクトのレコード（行）に対して、属性情報に基づいたアクセス制御をかける方法について説明する。
【０００８】
図１は、実施の形態１にかかるアクセス制御システム１０００の機能を示す機能ブロック図である。図１に基づいて、実施の形態１にかかるアクセス制御システム１０００の機能を説明する。
【０００９】
アクセス制御システム１０００は、業務サーバ１００、属性管理サーバ２００、ＤＢアクセス制御装置３００、データベース装置４００を備える。業務サーバ１００、属性管理サーバ２００、ＤＢアクセス制御装置３００、データベース装置４００は、それぞれがネットワークを介して接続されているものとする。
【００１０】
業務サーバ１００は、ユーザ２０がデータベース装置４００へアクセスする場合、ユーザ２０からの指示を受け、データベース装置４００からの応答を返す。業務サーバ１００は、データアクセスプログラムを発行することにより、データベース装置４００が管理するデータオブジェクトへアクセスする。ここでは、データアクセスプログラムは、ＳＱＬプログラムであるとする。
【００１１】
属性管理サーバ２００は、属性情報を管理記憶する。属性管理サーバ２００は、例えば、ＬＤＡＰ（Ｌｉｇｈｔｗｅｉｇｈｔ  Ｄｉｒｅｃｔｏｒｙ  Ａｃｃｅｓｓ  Ｐｒｏｔｏｃｏｌ）のようなインターフェースを備えたディレクトリである。属性管理サーバ２００は、後述する図２に示すような、ユーザ情報や組織情報などの階層構造を扱うのに適した機能を持つことができる。属性管理サーバ２００は、属性情報記憶部２１０、定義情報記憶部２２０を備える。
属性情報記憶部２１０は、業務サーバ１００に関する属性情報を管理記憶する。属性情報記憶部２１０は、例えば、業務サーバ１００を使用するユーザ２０に関する属性情報を管理記憶する。ここでは、属性情報記憶部２１０は、業務サーバ１００を使用するユーザ２０に関するユーザ情報と組織情報とを属性情報として管理記憶するものとする。定義情報記憶部２２０は、データベース装置４００が管理するデータオブジェクトの定義情報やアクセスの制御情報などを記憶する。ここでは、データベース装置４００は、ＲＤＢ（Ｒｅｌａｔｉｏｎａｌ  ＤａｔａＢａｓｅ）などであるとする。そのため、定義情報記憶部２２０は、データベース装置４００が管理する表の定義情報である表定義情報と、行制御情報と、列制御情報とを記憶する。定義情報記憶部２２０は、表の定義情報に行制御情報と列制御情報とを関連付けして記憶する。表定義情報は、より一般的にはデータオブジェクト定義情報である。また、列制御情報は、より一般的にはレコードの項目（フィールド）に関連付けられたアクセス制御条件であり、行制御情報は、より一般的にはレコードの値に基づくレコードへのアクセス制御条件である。また、データオブジェクトとしては、表に限定されるわけではなく、ビューや索引などであっても構わない。
【００１２】
ＤＢアクセス制御装置３００は、業務サーバ１００からのデータベース装置４００が管理するデータオブジェクトへのアクセスを制御する。ＤＢアクセス制御装置３００は、ＤＢアクセス制御実行部３１０、ＤＢアクセス制御管理部３５０とを備える。
ＤＢアクセス制御実行部３１０は、業務サーバ１００が、データベース装置４００が管理するデータオブジェクトへのアクセスする場合に、業務サーバ１００に関連する属性情報に基づいてデータベース装置４００が管理するデータオブジェクトへのアクセスを制御する。ＤＢアクセス制御実行部３１０は、属性取得部３２０、属性記憶部３３０、属性送信部３４０を備える。属性取得部３２０は、業務サーバ１００が、データベース装置４００が管理するデータオブジェクトへのアクセスする場合に、属性情報記憶部２１０が記憶する属性情報を取得する。まず、業務サーバ１００が、属性情報記憶部２１０が記憶する属性情報を取得し、次に、属性取得部３２０が、業務サーバ１００から属性情報を取得しても構わない。属性記憶部３３０は、属性取得部３２０が取得した属性情報を記憶する。属性送信部３４０は、属性記憶部３３０が記憶した属性情報をデータベース装置４００へ送信する。
ＤＢアクセス制御管理部３５０は、管理者１０などの指示により、業務サーバ１００が、データベース装置４００が管理するデータオブジェクトへのアクセスする場合の制御情報を作成する。ここで、ＤＢアクセス制御管理部３５０が行う処理を、プロビジョニングと呼ぶ。ＤＢアクセス制御管理部３５０は、制御情報取得部３６０、制御情報記憶部３７０、関数生成部３８０、関数制御部３９０を備える。制御情報取得部３６０は、定義情報記憶部２２０が記憶した制御情報を取得する。つまり、ここでは制御情報取得部３６０は、定義情報記憶部２２０が記憶した行制御情報と列制御情報とを取得する。制御情報記憶部３７０は、制御情報取得部３６０が取得した制御情報を記憶する。関数生成部３８０は、制御情報記憶部３７０が記憶した制御情報に基づき、ポリシー関数を生成する。ポリシー関数は、入力された属性情報を埋め込んだ制御条件を返値とする関数である。つまり、関数生成部３８０は、制御情報記憶部３７０が記憶した制御情報に基づいた制御条件を返値とするポリシー関数を生成する。関数制御部３９０は、関数生成部３８０が生成したポリシー関数を、データオブジェクトに関連付けしてデータベース装置４００に記憶させる。関数制御部３９０は、制御情報記憶部３７０が記憶した制御情報が関連付けされている表定義情報に基づいて、ポリシー関数をデータオブジェクトに関連付けする。
【００１３】
データベース装置４００は、データオブジェクトを管理記憶する。データベース装置４００は、ＲＤＢなどのデータベースシステムを備え、データオブジェクトを管理記憶する。データベース装置４００は、プログラム受信部４１０、属性受信部４２０、コンテキスト記憶部４３０、ポリシー関数記憶部４４０、関数実行部４５０、制御条件付加部４６０、実行部４７０、結果出力部４８０、関数付加部４９０を備える。
プログラム受信部４１０は、業務サーバ１００が発行したデータアクセスプログラムを受信する。属性受信部４２０は、属性送信部３４０が送信した属性情報を受信する。コンテキスト記憶部４３０は、属性受信部４２０が受信した属性情報を記憶する。データベース装置４００は、データオブジェクトにアクセスするセッション毎にコンテキスト記憶部を作成することで、セッション毎に属性情報を管理することができる。あるいは、データベース装置４００は、単一のコンテキスト記憶部４３０を用いて、データオブジェクトにアクセスするセッションごとに属性情報を管理できるようにしても構わない。コンテキスト記憶部４３０は、データベース装置４００の外部の装置として実現しても構わない。ポリシー関数記憶部４４０は、関数制御部３９０がデータオブジェクトに関連付けしたポリシー関数を記憶する。ポリシー関数記憶部４４０は、複数のポリシー関数を記憶することが可能である。また、ポリシー関数記憶部４４０は、１つのデータオブジェクトに対して、複数のポリシー関数を関連付けて記憶することも可能である。関数実行部４５０は、コンテキスト記憶部４３０が記憶した属性情報を入力して、ポリシー関数記憶部４４０が記憶したポリシー関数を実行する。制御条件付加部４６０は、関数実行部４５０が実行したポリシー関数の返値を、プログラム受信部４１０が受信したデータアクセスプログラムの制御条件に付加する。制御条件付加部４６０は、例えば、プログラム受信部４１０が受信したデータアクセスプログラムがＳＱＬプログラムであった場合、関数実行部４５０が実行したポリシー関数の返値をＷＨＥＲＥ区に追加する。実行部４７０は、制御条件付加部４６０が制御条件を付加したデータアクセスプログラムを実行する。実行部４７０は、データアクセスプログラムを実行することにより、データオブジェクトにアクセスする。つまり、実行部４７０は、属性管理サーバ２００が管理する制御情報と、業務サーバ１００に関する属性情報とに基づいて生成された制御条件の下で、データオブジェクトにアクセスする。
【００１４】
次に、実施の形態１にかかるアクセス制御システム１０００の動作の一例を説明する。図２は、属性情報記憶部２１０が記憶する属性情報の一例である。図３は、データベース装置４００が管理記憶するデータオブジェクトの一例である売上表６００である。図２、図３に基づき、実施の形態１にかかるアクセス制御システム１０００の動作の一例を説明する。
【００１５】
ここでは、図２における営業１課５２０の社員ａ５２１が、図３における売上表６００にアクセスする場合の処理を説明する。図３において、月６０１は、何月かを示す月の情報を記憶する。売上６０２は、売上の金額を記憶する。部門６０３は、部門の名称を記憶する。ここでは、売上表６００の部門６０３がアクセスするユーザ２０の所属部門と等しい行のみアクセスを許可するという制御を行うための操作と処理の流れを示す。
アクセス制御システム１０００の処理は、事前準備であるプロビジョニングと、データオブジェクトへのアクセス実行の２つのフェーズに分けて実現される。
【００１６】
まず、プロビジョニングについて説明する。
初めに、管理者１０は、定義情報記憶部２２０に対して、売上表６００の定義情報に行制御情報と列制御情報とを関連付けして定義する。ここでは、管理者１０は、売上表６００の部門６０３がアクセスするユーザ２０の所属部門と等しい行のみアクセスを許可するという行制御情報を定義するものとする。
図４は、管理者１０によって定義された行制御情報の一例である。図４において、コード６１１は、行制御情報を一意に識別するインデックス情報を記憶する。表名６１２は、行制御情報が関連付けされている表の名前を記憶する。列名６１３は、行制御情報が制御に使用する列名を記憶する。ユーザ属性６１４は、行制御情報が制御に使用する属性情報を記憶する。演算条件６１５は、行制御情報が行う制御の演算内容を記憶する。図４では、売上表６００に対して、売上表６００の列である部門６０３と、アクセスするユーザ２０のｓｏｓｈｉｋｉ（所属部門）とが等しい場合にアクセスを許可することを示している。
【００１７】
次に、管理者１０からＤＢアクセス制御管理部３５０へプロビジョニングの指示をする。プロビジョニングの指示を受けたＤＢアクセス制御管理部３５０は、定義情報記憶部２２０が記憶した行制御情報に基づきポリシー関数を生成する。そして、ＤＢアクセス制御管理部３５０は、生成したポリシー関数をポリシー関数記憶部４４０に登録する。ポリシー関数の生成については、後述する。
【００１８】
プロビジョニングを終了した後、ユーザ２０である社員ａ５２１は、業務サーバ１００へログインし、売上表６００へアクセスする。初めに、業務サーバ１００は、属性情報記憶部２１０から社員ａ５２１の属性情報を取得する。ここでは、業務サーバ１００は、属性情報記憶部２１０から社員ａ５２１の属性情報として所属部門である営業１課５２０を取得する。次に、業務サーバ１００は、データベース装置４００へデータアクセスプログラムを発行する。また、一方で、業務サーバ１００は、ＤＢアクセス制御実行部３１０へ売上表６００へのアクセスの指示をするとともに、取得した社員ａ５２１の属性情報を渡す。業務サーバ１００から指示を受けたＤＢアクセス制御実行部３１０は、取得した属性情報をコンテキスト記憶部４３０に登録する。つまり、コンテキスト記憶部４３０は、社員ａ５２１の属性情報として所属部門である営業１課５２０を記憶する。また、ＤＢアクセス制御実行部３１０は、データベース装置４００へ売上表６００へのデータアクセスプログラムによるアクセスの指示をする。データベース装置４００は、コンテキスト記憶部４３０に登録された属性情報を入力して、プロビジョニングにおいてポリシー関数記憶部４４０が記憶したポリシー関数を実行する。データベース装置４００は、実行したポリシー関数の返値である制御条件をデータアクセスプログラムに付加して、データアクセスプログラムを実行する。ここでは、ポリシー関数は、部門６０３がアクセスするユーザ２０の所属部門と等しい行のみアクセスを許可するというという制御条件を返値とする。つまり、データベース装置４００は、データアクセスプログラムに対して、部門６０３がアクセスするユーザ２０の所属部門と等しい行のみアクセスを許可するという制御条件を付加してデータアクセスプログラムを実行する。
上記では、業務サーバ１００が属性情報記憶部２１０から社員ａ５２１の属性情報を取得し、ＤＢアクセス制御実行部３１０へ渡した。しかし、ＤＢアクセス制御実行部３１０の属性情報の取得方法は、これに限られるわけではなく、例えば、ＤＢアクセス制御実行部３１０が直接属性情報記憶部２１０から取得しても構わない。
【００１９】
上述した図４では、１つの行に対して、行制御情報が１つのみ存在していた。１つの行に対して、行制御情報が複数存在する場合には、それぞれの行制御情報の論理積を制御条件とすることで対応することができる。制御条件を論理和として扱う必要がある場合には、各制御条件の下でデータオブジェクトへアクセスし、アクセスした結果の論理和をとることで実現することができる。また、制御条件を論理和として扱う必要がある場合、行制御情報を拡張し、制御条件の論理和を記述できるようにすることで対応することもできる。図５は、行制御情報を拡張し、制御条件の論理和を記述できるようにした一例である。図５において、コード６１１、表名６１２、列名６１３、ユーザ属性６１４は、図４に示す、コード６１１、表名６１２、列名６１３、ユーザ属性６１４と同様である。演算条件６１５は、行制御情報が行う制御の演算内容または制御条件の論理演算内容を示す。条件ａ６２６と条件ｂ６２７とは、演算条件６１５が論理演算内容を示す場合に、論理演算の対象となる制御条件を記憶する。図５の例では、コード６１１が０００１である行では、コード６１１が０００２と０００３との行の制御条件の論理和を取ることを示している。ここでは、行制御情報の拡張は、論理和についてのみ説明したが、これに限られるわけではなく、論理積などに対しても適用可能である。
【００２０】
次に、プロビジョニングの処理について詳細に説明する。
ＤＢアクセス制御管理部３５０は、定義情報記憶部２２０が記憶する制御情報に基づき、ポリシー関数を生成する。ここでは、ＤＢアクセス制御管理部３５０は、定義情報記憶部２２０が記憶する行制御情報に基づき、ポリシー関数を生成する。
【００２１】
初めに、プロビジョニングの処理で生成するポリシー関数について説明する。ここでは、図４に示す行制御情報に基づいてポリシー関数を説明する。図６は、図４に示す行制御情報に基づいて生成したポリシー関数の一例を示した図である。
図６において、関数部７１０は、ポリシー関数を示す。行番号７２０は、ポリシー関数である関数部７１０の行番号を示す。以下何行目と示した場合、行番号７２０の該当する番号の行を意味する。
【００２２】
図６において、１行目に示すｃｒｅａｔｅ  ｏｒ  ｒｅｐｌａｃｅ  ｆｕｎｃｔｉｏｎは、ポリシー関数の宣言部である。売上表＿ｒｏｗは、ポリシー関数の関数名である。２行目は、空行である。３行目は、ポリシー関数の実行部の開始を示すコマンドである。４行目に示すｓｙｓ＿ｃｏｎｔｅｘｔは、コンテキスト記憶部４３０から属性情報を取得するコマンドである。ここでは、ｓｙｓ＿ｃｏｎｔｅｘｔコマンドにより、属性情報としてｓｏｓｈｉｋｉを取得する。また、ｇｃｎは、コンテキスト記憶部４３０を示す識別子である。また、ｖｓｏｓｈｉｋｉは、ポリシー関数で使用する変数である。つまり、４行目では、ｇｃｎで示されるコンテキスト記憶部４３０から属性情報ｓｏｓｈｉｋｉを取得し、変数ｖｓｏｓｈｉｋｉに格納することを示す。５行目は、コメントを示すものである。６行目に示すＲｅｔｕｒｎに続く部分は、ポリシー関数の返値を生成する部分である。６行目に示すｖｓｏｓｈｉｋｉは、４行目で取得した属性情報ｓｏｓｈｉｋｉの値に置換される。また、｜｜は文字列の結合演算子である。つまり、部門＝と、ｖｓｏｓｈｉｋｉを属性情報ｓｏｓｈｉｋｉに置換した値を引用符で囲ったものを結合した文字列を返す。すなわち、図４に示す例では、属性情報ｓｏｓｈｉｋｉの値が営業１課５２０であるため、返値は、「売上表．部門＝‘営業１課’」となる。７行目は、ポリシー関数の実行部の終了を示すコマンドである。
つまり、図６に示すポリシー関数は、上述した図２における営業１課５２０の社員ａ５２１が、図３における売上表６００にアクセスする場合の例において、「売上表．部門＝‘営業１課’」を返値とする。
ここで、属性情報ｓｏｓｈｉｋｉは、属性管理サーバ２００で属性情報を特定するために管理されている属性名称である。ポリシー関数の返値では、属性情報ｓｏｓｈｉｋｉは、コンテキスト記憶部４３０が記憶した値に置換される。属性情報ｓｏｓｈｉｋｉを特定するために使用される属性名称は、ＤＢアクセス制御装置３００とデータベース装置４００とにあらかじめ登録しておいても、ＤＢアクセス制御実行部３１０から属性情報が登録される場合に動的に登録を行っても構わない。
【００２３】
ＤＢアクセス制御管理部３５０は、生成したポリシー関数を、表に関連付けてデータベース装置４００のポリシー関数記憶部４４０に登録する。ＤＢアクセス制御管理部３５０は、例えば、図７に示すコマンドを用いてポリシー関数を表に関連付ける。図７は、表とポリシー関数とを関連付けするコマンドの一例である。図７において、関数部７１０は、ポリシー関数を表に関連付けるコマンドを示す。行番号７２０は、関数部７１０の行番号を示す。
図７において、表名とポリシー関数名とは、それぞれ、関連付けされる表とポリシー関数の名称である。また、ポリシー名は、表とポリシー関数の結びつきを示す任意の名称である。ポリシー名を用いることにより、データベース装置４００が管理記憶する表は複数のポリシー関数との関連付けを持つことができる。
【００２４】
上述したポリシー関数である売上表＿ｒｏｗを表である売上表６００に関連付ける場合、上記のコマンドは、図８に示すようになる。図８は、図７に示すコマンドに表とポリシー関数を割り当てした一例である。図８において、関数部７１０と行番号７２０とは、図７に示す関数部７１０と行番号７２０と同様である。図７において、売上表＿ｒｏｗポリシーと売上表＿ＲＯＷとは、任意の名称であり、表名および行制御条件よりＤＢアクセス制御管理部３５０が任意に生成することができる。
【００２５】
ポリシー関数は、業務サーバ１００が発行したデータアクセスプログラムによってデータベース装置４００が管理記憶する売上表６００にアクセスする場合、データベース装置４００により実行される。ポリシー関数は、返値として制御条件を出力し、データアクセスプログラムに、出力した制御条件を付加する。例えば、データアクセスプログラムがＳＱＬプログラムであった場合、ポリシー関数は、ＷＨＥＲＥ区に制御条件を付加する。上記の例では、「ＷＨＥＲＥ  売上表．部門＝‘営業１課’」という制御条件を付加する。
【００２６】
次に、ＤＢアクセス制御管理部３５０がプロビジョニングを行う動作の流れについて説明する。図９は、ＤＢアクセス制御管理部３５０がプロビジョニングを行う動作を示すフローチャートである。図９に基づいて、ＤＢアクセス制御管理部３５０がプロビジョニングを行う動作について説明する。
【００２７】
制御情報取得ステップＳ１０１では、制御情報取得部３６０は、定義情報記憶部２２０から表に対する制御情報を取得する。ここでは、制御情報取得部３６０は該当する表に対する行制御情報を取得する。
【００２８】
制御情報記憶ステップＳ１０２では、制御情報記憶部３７０は、制御情報取得部３６０が取得した制御情報を記憶する。
【００２９】
関数名生成ステップＳ１０３では、関数生成部３８０は、行制御情報に基づくポリシー関数の関数名を生成する。関数生成部３８０は、例えば、制御情報記憶部３７０が記憶した表名および行制御条件よりに基づいて関数名を生成する。関数生成部３８０は、例えば、「表名」＋「＿ｒｏｗ」のように規則的に関数名の生成を行うことができる。
【００３０】
返値初期化ステップＳ１０４では、関数生成部３８０は、ポリシー関数の返値を示す変数を初期化する。関数生成部３８０は、例えば、「１＝１」のように、アクセス制御条件として評価してみると、結果が常に真となる値で初期化しておく。
【００３１】
関数生成部３８０は、ステップＳ１０５からステップＳ１０７までの処理を、制御情報記憶部３７０が記憶した行制御情報がなくなるまで繰り返す。ステップＳ１０５からステップＳ１０７までの処理は、ポリシー関数生成ステップである。
【００３２】
属性情報抽出ステップＳ１０５では、関数生成部３８０は、行制御情報に用いられている属性情報を抽出する。
【００３３】
コマンド追加ステップＳ１０６では、関数生成部３８０は、抽出した属性情報について、コンテキスト記憶部４３０から属性情報の値を取り出すコマンドをポリシー関数に追加する。コンテキスト記憶部４３０から属性情報の値を取り出すコマンドとは、図６に示す例においては、ｓｙｓ＿ｃｏｎｔｅｘｔコマンドである。
【００３４】
制御条件追加ステップＳ１０７では、関数生成部３８０は、行制御情報における属性情報に対する制御条件を、ポリシー関数の返値を示す変数に追加する。１つの行に対して、行制御情報が複数存在する場合は、例えば、通常は制御条件を論理積で結合するようにする。しかし、制御条件を結合する方法については、行制御情報を、例えば図５のように拡張することにより、論理和で結合することも可能である。
【００３５】
制御情報記憶部３７０が記憶した行制御情報全てに対してステップＳ１０５からステップＳ１０７までの処理を終了した場合、関数制御ステップＳ１０８へ進む。ステップＳ１０８では、関数制御部３９０は、ポリシー関数と表との関連付けを行う。関数制御部３９０は、例えば、上述したような関連付けのコマンドを生成し、生成したコマンドを実行する。
【００３６】
ポリシー関数記憶ステップＳ１０９では、関数制御部３９０コマンドを実行することにより、ポリシー関数記憶部４４０は、表と関連付けされたポリシー関数を記憶する。
【００３７】
次に、プロビジョニングが終了した後に業務サーバ１００よりデータオブジェクトへのアクセス実行処理について詳細に説明する。ここでは、上記と同様に、社員ａ５２１が業務サーバ１００へログインし、売上表６００へアクセスする動作の例を用いて説明する。
【００３８】
ユーザ２０である社員ａ５２１は、業務サーバ１００へログインし、売上表６００へアクセスする。初めに、業務サーバ１００は、属性情報記憶部２１０から社員ａ５２１の属性情報を取得する。業務サーバ１００による属性情報の取得については、予め決められた属性情報の組について取得するようにしても、業務サーバ１００が発行するデータアクセスプログラムなどに基づいて取得する属性情報を指定するようにしても構わない。ここでは、業務サーバ１００は、属性情報記憶部２１０から社員ａ５２１の属性情報として所属部門である営業１課５２０を取得する。つまり、業務サーバ１００は、上述したポリシー関数における属性情報ｓｏｓｈｉｋｉの値として営業１課５２０を取得する。次に、業務サーバ１００は、ＤＢアクセス制御実行部３１０へ売上表６００へのアクセスの指示をするとともに、取得した社員ａ５２１の属性情報を渡す。つまり、属性取得部３２０は、属性情報ｓｏｓｈｉｋｉの値として営業１課５２０を取得する。ここでは、属性取得部３２０は、業務サーバ１００が属性情報記憶部２１０から取得した属性情報を渡されることにより属性情報を取得した。しかし、属性取得部３２０が属性情報を取得する方法は、これに限られるわけではなく、例えば、ＤＢアクセス制御実行部３１０が直接属性情報記憶部２１０から取得しても構わない。属性記憶部３３０は、属性取得部３２０が取得した属性情報を記憶する。次に、属性送信部３４０は、属性記憶部３３０が記憶した属性情報をデータベース装置４００へ送信し、コンテキスト記憶部４３０に登録する。つまり、コンテキスト記憶部４３０は、社員ａ５２１の属性情報として所属部門である営業１課５２０を記憶する。属性情報の送信と併せて、ＤＢアクセス制御実行部３１０は、データベース装置４００へデータアクセスプログラムによって売上表６００へのアクセスの指示をする。
ＤＢアクセス制御実行部３１０へアクセスの指示をする一方で、業務サーバ１００は、データベース装置４００へデータアクセスプログラムを発行する。データベース装置４００のプログラム受信部４１０は、業務サーバ１００が発行したデータアクセスプログラムを受信する。
ＤＢアクセス制御実行部３１０からアクセスの指示があり、実行部４７０が、プログラム受信部４１０が受信したデータアクセスプログラムを実行する場合、関数実行部４５０は、データアクセスプログラムがアクセスするデータオブジェクトに関連付けしてポリシー関数記憶部４４０が記憶したポリシー関数を実行する。制御条件付加部４６０は、関数実行部４５０が実行したポリシー関数の返値をデータアクセスプログラムの制御条件に付加する。ここで、関数実行部４５０は、ポリシー関数を実行する場合にコンテキスト記憶部４３０が記憶した属性情報を入力する。そして、ポリシー関数は、返値として入力した属性情報を埋め込んだ制御条件を出力する。例えば、図６に示したポリシー関数実行する場合、関数実行部４５０は、コンテキスト記憶部４３０が記憶した営業１課５２０を入力する。そして、ポリシー関数は、「売上表．部門＝‘営業１課’」を返値として出力する。つまり、制御条件付加部４６０は、「売上表．部門＝‘営業１課’」を制御条件として、データアクセスプログラムに付加する。
【００３９】
図１０は、業務サーバ１００が発行するデータアクセスプログラムとしてＳＱＬプログラムを用いた場合の一例である。図１０において、関数部７１０は、データアクセスプログラムを示す。行番号７２０は、データアクセスプログラムである関数部７１０の行番号を示す。
【００４０】
図１１は、業務サーバ１００が図１０に示すデータアクセスプログラムを発行した場合の、制御条件付加部４６０によって制御条件を付加されたデータアクセスプログラムである。図１１において、関数部７１０は、制御条件を付加されたデータアクセスプログラムを示す。行番号７２０は、制御条件を付加されたデータアクセスプログラムである関数部７１０の行番号を示す。つまり、業務サーバ１００が図１０に示すデータアクセスプログラムを発行した場合、実行部４７０は、図１１に示すデータアクセスプログラムを実行する。
上述した処理により、売上表６００の部門６０３が社員ａ５２１の属性情報の１つである所属部門を表す営業１課と等しい行のみ、社員ａ５２１のアクセスを許可するように制御される。
【００４１】
次に、上述した社員ａ５２１が、営業１課から営業２課へ異動した場合の動作について説明する。ここでは、プロビジョニングについては、上記と同様に処理されているものとする。
異動後の社員ａ５２１が業務サーバ１００にログインし、業務サーバ１００が発行するデータアクセスプログラムによって売上表にアクセスする。業務サーバ１００は、属性情報記憶部２１０から所属部門である属性情報「ｓｏｓｈｉｋｉ」の値を取得する。社員ａ５２１は、営業１課から営業２課へ異動しているため、属性情報「ｓｏｓｈｉｋｉ」の値は営業２課である。従って、ＤＢアクセス制御実行部３１０によりコンテキスト記憶部４３０に属性情報「ｓｏｓｈｉｋｉ」の値として営業２課を登録する。よって、ポリシー関数が返値として出力する制御条件は、「売上表．部門＝’営業２課’」となる。そのため、データアクセスプログラムがＳＱＬプログラムの場合には、Ｗｈｅｒｅ句に「売上表．部門＝’営業２課’」が付加される。
【００４２】
図１２は、業務サーバ１００が図１０に示すデータアクセスプログラムを発行した場合の、制御条件付加部４６０によって制御条件を付加されたデータアクセスプログラムである。つまり、業務サーバ１００が図１０に示すデータアクセスプログラムを発行した場合、実行部４７０は、図１２に示すデータアクセスプログラムを実行する。
そのため、売上表６００の部門６０３が社員ａ５２１の属性情報の１つである所属部門を表す営業２課と等しい行のみ、社員ａ５２１のアクセスを許可するように制御される。つまり、ポリシー関数を変更することなく、人事異動を制御条件に反映することが可能である。
【００４３】
次に、上述した処理の流れを説明する。図１３は、上述した処理のシーケンスを示した図である。図１３に基づいて上述した処理の流れを説明する。
【００４４】
属性問合せステップＳ２０１では、業務サーバ１００は、属性情報記憶部２１０から属性情報を取得するため、属性管理サーバ２００へ問合せを行う。例えば、業務サーバ１００は、属性情報の問合せを行う場合に、属性管理サーバ２００で属性情報を特定するために管理されている属性名称などを送信して問合せを行う。
【００４５】
属性返答ステップＳ２０２では、属性管理サーバ２００は、業務サーバ１００からの属性情報の問合せに対して返答する。
【００４６】
初期化要求ステップＳ２０３では、業務サーバ１００は、ＤＢアクセス制御実行部３１０へ取得した属性情報を送信する。業務サーバ１００は、併せて、ＤＢアクセス制御実行部３１０にコンテキスト記憶部４３０に属性情報を登録するという指示をする。ここでは、この指示をアプリケーション初期化要求と呼ぶ。
【００４７】
コンテキスト記憶ステップＳ２０４では、ＤＢアクセス制御実行部３１０はコンテキスト記憶部４３０に取得した属性情報の値を登録する。
【００４８】
登録完了通知ステップＳ２０５では、コンテキスト記憶部４３０はＤＢアクセス制御実行部３１０に属性情報の登録結果を通知する。
【００４９】
初期化完了通知ステップＳ２０６では、ＤＢアクセス制御実行部３１０は、業務サーバ１００へアプリケーション初期化完了を通知する。
【００５０】
アクセス要求ステップ（プログラム受信ステップ）Ｓ２０７では、業務サーバ１００は、データベース装置４００へデータアクセスプログラムを送信することにより、データオブジェクトへのアクセスを要求する。データベース装置４００のプログラム受信部４１０は、データアクセスプログラムを受信する。
【００５１】
関数実行ステップＳ２０８では、関数実行部４５０は、ポリシー関数記憶部４４０が記憶したポリシー関数を起動する。
【００５２】
コンテキスト情報参照ステップＳ２０９では、ポリシー関数は、コンテキスト記憶部４３０が記憶した属性情報を参照するため問合せを送信する。
【００５３】
属性情報通知ステップＳ２１０では、コンテキスト記憶部４３０は、問合せされた属性情報を通知する。
【００５４】
制御条件付加ステップＳ２１１では、関数実行部４５０は、属性情報を反映したポリシー関数の返値をデータベース装置４００の制御条件付加部４６０へ渡す。制御条件付加部４６０は、プログラム受信部４１０が受信したデータアクセスプログラムの制御条件に、ポリシー関数の返値を付加する。
【００５５】
実行ステップＳ２１２では、実行部４７０は、制御条件付加部４６０が制御条件にポリシー関数の返値を付加したデータアクセスプログラムを実行し、データオブジェクトへアクセスした結果を業務サーバ１００へ送信する。
【００５６】
上述したように、一旦プロビジョニングを行うと、人事異動などで所属や役職などのユーザ属性の値が変更になっても、属性管理サーバ２００の管理する属性値を変更することにより、データベース装置４００の制御に使用する属性値の変更が反映される。そのため、データアクセスプログラムやデータオブジェクトの設定を変更する必要がない。データオブジェクトへアクセスする場合の処理は、ユーザ属性値のコンテキスト受渡装置への設定のみである。データオブジェクトへアクセスする場合に、ユーザのデータアクセスプログラムを解釈し、書き換えたりする必要がない。そのため、実施の形態１に示したアクセス制御システム１０００によれば、データオブジェクトへアクセスする場合に、処理が複雑とならず、データアクセスプログラムの性能が低下することもない。
【００５７】
実施の形態２．
実施の形態１では、データオブジェクトである表に対しての行制御情報に基づく制御の実現について説明した。実施の形態２では、列制御情報に基づく制御の方法について説明する。
【００５８】
実施の形態２にかかるアクセス制御システム１０００の機能ブロック図は、図１に示す実施の形態１にかかるアクセス制御システム１０００の機能ブロック図と同様である。また、実施の形態２にかかるアクセス制御システム１０００の処理も実施の形態１と同様、事前準備であるプロビジョニングと、データオブジェクトへのアクセス実行の２つのフェーズに分けて実現される。
【００５９】
図１４は、定義情報記憶部２２０が記憶する列制御情報の一例である。図１４は、売上表６００の列定義情報と、各列（データオブジェクトの属性）に対するアクセス制御の条件の有無を示す。列名６３１は、売上表６００の各列の属性名である。データ型６３２は、各列が保持するデータの型である。条件６３３は、各列に対して設定された制御条件である。月６０１と部門６０３との条件ＡＮＹは誰でも当該列にアクセスできることを示す。また、売上６０２は、条件Ｃ０１が適用されることを示す。
【００６０】
図１４に基づいて、列制御情報に基づく制御の方法について説明する。以下の説明では、条件Ｃ０１として、属性情報ｐｏｓｉｔｉｏｎの値が‘０２’である場合には、売上６０２の列へのアクセスを許可し、それ以外場合には売上６０２の列へのアクセスを許可しない、という情報が設定されているものとする。アクセスを許可されない属性情報を持つユーザ２０の指示により発行されたデータアクセスプログラムが売上６０２の列を参照しようとした場合、データベース装置４００は、例えば、Ｎｕｌｌ値を返すようにしても、値を返さないようにするなどしても構わない。
【００６１】
まず、プロビジョニングについて説明する。
図１５は、列制御情報に基づく制御を実現するポリシー関数の一例である。図１５に基づき、プロビジョニングの処理で生成するポリシー関数について説明する。
図１５において、関数部７１０は、ポリシー関数を示す。行番号７２０は、ポリシー関数である関数部７１０の行番号を示す。
【００６２】
図１５に示すポリシー関数は、図６に示すポリシー関数と概ね同様である。そのため、図１５に示すポリシー関数について、図６に示すポリシー関数と異なる部分について説明する。４行目では、属性情報ｐｏｓｉｔｉｏｎを取得し、変数ｖｐｏｓｉｔｉｏｎに格納する。６行目と７行目とは、変数ｖｐｏｓｉｔｉｏｎが‘０２’であった場合、「１＝１」を返値とする。８行目と９行目とは、変数ｖｐｏｓｉｔｉｏｎが‘０２’でなかった場合、「１＝２」を返値とする。つまり、図６に示すポリシー関数は、変数ｖｐｏｓｉｔｉｏｎが‘０２’であった場合、制御条件として常に真の値を取る条件を返値とし、変数ｖｐｏｓｉｔｉｏｎが‘０２’でなかった場合、制御条件として常に偽の値を取る条件を返値とする。
【００６３】
次に、ポリシー関数を表の列に関連付けてポリシー関数記憶部４４０に登録する。図１６は、ポリシー関数を表の列に関連付けてポリシー関数記憶部４４０に登録するコマンドの一例を示す。
図１６において、関数部７１０は、ポリシー関数を表の列に関連付けるコマンドを示す。行番号７２０は、関数部７１０の行番号を示す。
図１６では、図７に示すコマンドに１つパラメータが追加されている。売上表は、図６の表名である。売上表＿売上＿ｃｏｌは、図６のポリシー関数の関数名である。売上表＿売上＿ｃｏｌポリシーは、図６のポリシー名であり、ＤＢアクセス制御管理部３５０が任意に生成することができる。ＤＢアクセス制御管理部３５０は、例えば、接尾辞ｃｏｌを加えることで、列制御に用いられるポリシー関数であることを示す。４行目のｓｅｃ＿ｒｅｌｅｖａｎｔ＿ｃｏｌｓ＝＞は、後ろに示すパラメータが列制御対象となる列名を保持するオプションパラメータである。ここでは、このポリシー関数は、売上表６００の売上６０２にアクセスしようとすると起動されることを示す。また、ｓｅｃ＿ｒｅｌｅｖａｎｔ＿ｃｏｌｓ＝＞の後ろに複数の列名を含む文字列を設定しても構わない。
【００６４】
上述したプロビジョニングを行った後に、業務サーバ１００が発行したデータアクセスプログラムが売上表６００の売上６０２にアクセスしようとすると、ポリシー関数である売上表＿売上＿ｃｏｌが実行される。この場合、業務サーバ１００へ指示をしたユーザ２０の属性情報ｐｏｓｉｔｉｏｎの値が‘０２’であると、売上表＿売上＿ｃｏｌは、返値として「１＝１」を出力する。つまり、ポリシー関数は、制御条件としては常に真の値をとる条件である。従って、ユーザ２０は、売上６０２へのアクセスが許可される。一方、業務サーバ１００へ指示をしたユーザ２０の属性情報ｐｏｓｉｔｉｏｎの値が‘０２’でないと、売上表＿売上＿ｃｏｌは、返値として「１＝２」を出力する。つまり、ポリシー関数は、制御条件としては常に偽の値をとる条件である。従って、ユーザ２０は、売上６０２へのアクセスが拒否される。
【００６５】
次に、列制御情報に基づく制御を行う場合のプロビジョニングを行う動作について説明する。図１７は、列制御情報に基づく制御を行う場合のプロビジョニングを行う動作を示すフローチャートである。
【００６６】
制御情報取得ステップＳ３０１では、制御情報取得部３６０は、定義情報記憶部２２０から表に対する制御情報を取得する。ここでは、制御情報取得部３６０は該当する表に対する列制御情報を取得する。
【００６７】
制御情報記憶ステップＳ３０２では、制御情報記憶部３７０は、制御情報取得部３６０が取得した制御情報を記憶する。
【００６８】
関数生成部３８０と関数制御部３９０とは、制御情報記憶部３７０が記憶した列制御情報における制御条件毎に、ステップＳ３０３からステップＳ３１１までの処理を実行する。つまり、図１４の条件６３３の値が異なるもの毎にステップＳ３０３からステップＳ３１１までの処理を実行する。ただし、図１４の条件６３３の値がＡＮＹの場合は対象外とする。
ステップＳ３０３からステップＳ３１０までの処理は、ポリシー関数生成ステップである。また、ステップＳ３１１の処理は、関数制御ステップである。
【００６９】
変数生成ステップＳ３０３では、関数生成部３８０は、表の列制御対象となる列名を格納する変数を用意する。
【００７０】
列名抽出ステップＳ３０４では、関数生成部３８０は、表の列制御情報より、制御対象となる列名を抽出する。
【００７１】
列名格納ステップＳ３０５では、関数生成部３８０は、制御条件の制御対象となる列名を変数に格納する。
【００７２】
対象判定ステップＳ３０６では、関数生成部３８０は、制御条件の制御対象となる列名をすべて変数に格納したかを確認する。格納していない列名が存在する場合、ステップＳ３０５へ戻り、列名を変数に格納する。全ての列名を格納している場合、ステップＳ３０７へ進む。
【００７３】
関数名生成ステップＳ３０７では、関数生成部３８０は、列制御情報に基づくポリシー関数の関数名と、表の列と列制御情報に基づくポリシー関数とを関連付けるポリシー名とを生成する。関数生成部３８０は、例えば、実施の形態１と同様に、制御情報記憶部３７０が記憶した表名および行制御条件よりに基づいて関数名を生成する。関数生成部３８０は、例えば、この場合のポリシー関数名を「表名」＋「＿列名」＋「＿ｃｏｌ」のように規則的に生成することができる。ここで、列が複数ある場合には、上述した「表名」＋「＿列名」＋「＿ｃｏｌ」の「＿列名」を含んでいる列名をつなげたものとしても構わない。また、関数生成部３８０は、例えば、ポリシー名を「ポリシー関数名」＋「＿ポリシー」のように規則的に生成することができる。
【００７４】
属性名抽出ステップＳ３０８では、関数生成部３８０は、列制御情報に基づいて、制御条件に用いられている属性名を抽出する。関数生成部３８０は、図１５のポリシー関数の例においては属性情報ｐｏｓｉｔｉｏｎを抽出する。
【００７５】
コマンド追加ステップＳ３０９では、関数生成部３８０は、抽出した属性情報について、コンテキスト記憶部４３０から属性情報の値を取り出すコマンドをポリシー関数に追加する。コンテキスト記憶部４３０から属性情報の値を取り出すコマンドとは、図１５に示す例においては、ｓｙｓ＿ｃｏｎｔｅｘｔコマンドである。
【００７６】
条件句追加ステップＳ３１０では、関数生成部３８０は、制御条件における属性情報に関する条件を、ポリシー関数に追加する。関数生成部３８０は、図１５に示す例においては、ｉｆ文によって示す文を追加する。関数生成部３８０は、併せて、追加した制御条件に基づいて、返値をポリシー関数に追加する。関数生成部３８０は、図１５に示す例においては、ｒｅｔｕｒｎ文によって示す文を追加する。また、関数生成部３８０は、このステップで生成した処理に合わせて、ポリシー関数のその他の部分を生成する。
【００７７】
関数制御ステップＳ３１１では、関数制御部３９０は、ポリシー関数と表との関連付けを行う。関数制御部３９０は、例えば、上述したような関連付けのコマンドを生成し、生成したコマンドを実行する。
【００７８】
ポリシー関数記憶ステップＳ３１２では、関数制御部３９０コマンドを実行することにより、ポリシー関数記憶部４４０は、列と関連付けされたポリシー関数を記憶する。
【００７９】
関数生成部３８０と関数制御部３９０とは、制御情報記憶部３７０が記憶した全ての列制御情報に対して、ステップＳ３０３からステップＳ３１１までの処理を実行し、処理を終了する。
【００８０】
上記の説明では、１つの制御条件において参照される属性情報は、１つであることを前提としている。１つの制御条件に複数の属性情報の参照を許す場合は、ステップＳ３０８において、処理対象となっている制御条件において参照される属性情報を複数抽出し、ステップＳ３０９とステップＳ３１０との処理を属性情報それぞれに対して繰り返し実行することで実現できる。
【００８１】
データオブジェクトへのアクセス実行の処理については、実施の形態１と同様である。
【００８２】
実施の形態２では、列に対する制御に関しても、実施の形態１と同様に、一旦プロビジョニングを行うと、人事異動などで所属や役職などのユーザ属性の値が変更になっても、属性管理サーバ２００の管理する属性値を変更することにより、データベース装置４００の制御に使用する属性値の変更が反映される。そのため、データアクセスプログラムやデータオブジェクトの設定を変更する必要がない。データオブジェクトへアクセスする場合の処理は、ユーザ属性値のコンテキスト受渡装置への設定のみである。データオブジェクトへアクセスする場合に、ユーザのデータアクセスプログラムを解釈し、書き換えたりする必要がない。そのため、実施の形態２に示したアクセス制御システム１０００によれば、データオブジェクトへアクセスする場合に、処理が複雑とならず、データアクセスプログラムの性能が低下することもない。
【００８３】
実施の形態３．
上述した実施の形態では、行制御情報と列制御情報とのそれぞれに基づく制御について別々に説明した。実施の形態３では、ポリシー関数と、ポリシー関数と表との関連付けを拡張することにより、行の制御と列の制御とを組合せた制御を行う方法について説明する。
【００８４】
行の制御と列の制御とを組合せた制御を行う方法は、図１４の列制御情報において、条件６３３の値Ｃ０１に対して実施の形態２で述べた列に対する制御でなく、行に対する制御を関連付けることにより実現できる。この場合、業務サーバ１００が、列制御情報が指定された売上６０２にアクセスするデータアクセスプログラムを発行すると、列制御情報Ｃ０１に関連付けられた行制御情報が評価され、Ｃ０１を満たす行においてのみ売上６０２へのアクセスを許可し、他の行においては売上６０２へのアクセスを許可しない。
【００８５】
実施の形態３にかかるアクセス制御システム１０００の機能ブロック図は、図１に示す実施の形態１にかかるアクセス制御システム１０００の機能ブロック図と同様である。また、実施の形態３にかかるアクセス制御システム１０００の処理も実施の形態１と同様、事前準備であるプロビジョニングと、データオブジェクトへのアクセス実行の２つのフェーズに分けて実現される。
【００８６】
実施の形態３では、図４に示した行制御情報を売上表６００の売上６０２の列にかける例を用いて説明する。
【００８７】
まず、プロビジョニングについて説明する。
図１８は、行の制御と列の制御とを組合せた制御を実現するポリシー関数である。図１８に示すポリシー関数は、関数名を除いて図６に示すポリシー関数と同様である。また、ポリシー関数を表の列に関連付けるコマンドは、図１６に示す例を使用する。つまり、図６に示すポリシー関数と同様の制御が、売上表６００の売上６０２の列に関連付けされる。
【００８８】
業務サーバ１００が発行したデータアクセスプログラムが売上表６００の売上６０２にアクセスしようとすると、ポリシー関数である図１８に示すポリシー関数が実行される。ポリシー関数は、売上表６００の部門６０３の値が、属性情報ｓｏｓｈｉｋｉの値と同じレコードのみ売上６０２の値へのアクセスを許可し、それ以外のレコードについてはアクセスを許可しない。アクセスを許可しないレコードの売上６０２の値として、データベース装置４００は、実施の形態２と同様に、例えば、Ｎｕｌｌ値を返すようにしても、値を返さないようにするなどしても構わない。
【００８９】
次に、行の制御と列の制御とを組合せた制御を行う場合のプロビジョニングを行う動作について説明する。図１９は、行の制御と列の制御とを組合せた制御を行う場合のプロビジョニングを行う動作を示すフローチャートである。
【００９０】
制御情報取得ステップＳ４０１では、制御情報取得部３６０は、定義情報記憶部２２０から表に対する制御情報を取得する。ここでは、制御情報取得部３６０は該当する表に対する行制御情報と列制御情報とを取得する。
【００９１】
制御情報記憶ステップＳ４０２では、制御情報記憶部３７０は、制御情報取得部３６０が取得した制御情報を記憶する。
【００９２】
列制御判定ステップＳ４０３では、関数生成部３８０は、制御情報記憶部３７０が記憶した制御情報に列制御情報が存在するかを判定する。関数生成部３８０は、列制御情報が存在する場合、ステップＳ４０４へ進み、列制御情報が存在しない場合、ステップＳ４０９へ進む。
【００９３】
行列制御判定ステップＳ４０４では、関数生成部３８０は、制御情報記憶部３７０が記憶した列制御情報の条件に関連付けられた行制御情報が存在するかを判定する。関数生成部３８０は、行制御情報が存在する場合、ステップＳ４０５へ進み、行制御情報が存在しない場合、ステップＳ４０７へ進む。
【００９４】
行列ポリシー関数生成ステップＳ４０５では、関数生成部３８０は、行制御情報に基づいたポリシー関数を生成する。
【００９５】
行列関数制御ステップＳ４０６では、関数制御部３９０は、表と列に関連付けられた行制御情報に基づいたポリシー関数の関連付けコマンドを生成し、実行する。
ステップＳ４０５とステップＳ４０６とは、後述する図２０に示すのフローに従って処理を行う。
【００９６】
列ポリシー関数生成ステップＳ４０７では、関数制御部３９０は、行制御情報が関連付けされていない列制御情報に基づいたポリシー関数を生成する。
【００９７】
列関数制御ステップＳ４０８では、関数制御部３９０は、列に関連付けられた列制御情報に基づいたポリシー関数の関連付けコマンドを生成し、実行する。
ステップＳ４０７とステップＳ４０８とは、上述した図１７に示すステップＳ３０３からステップＳ３１２に従って処理を行う。
【００９８】
行制御判定ステップＳ４０９では、関数制御部３９０は、表と関連付けられ、列制御情報に関連付けられていない行制御情報が存在するかを判定する。関数制御部３９０は、表と関連付けられ、列制御情報に関連付けられていない行制御情報が存在する場合、ステップＳ４１０へ進み、存在しない場合、処理を終了する。
【００９９】
行ポリシー関数生成ステップＳ４１０では、関数制御部３９０は、行制御情報に基づいたポリシー関数を生成する。
【０１００】
行関数制御ステップＳ４１１では、関数制御部３９０は、表に関連付けられた行制御情報に基づいたポリシー関数の関連付けコマンドを生成し、実行する。
ステップＳ４１０とステップＳ４１１とは、上述した図９に示すのフローチャートに従って処理を行う。
【０１０１】
図２０は、図１９におけるステップＳ４０５とステップＳ４０６の動作を詳細化したフローチャートである。図２０は、図１７に示すフローチャートのステップＳ３０８とステップＳ３１０との処理を、列制御情報の制御条件に関連付けられた行制御情報についての処理に置換したものである。図２０に示すフローチャートついては、図１７に示すフローチャートとの相違点のみ説明する。
【０１０２】
ステップＳ５０１からステップＳ５０７までについては、それぞれ、図１７に示すステップＳ３０１からステップＳ３０７までと同様である。
【０１０３】
属性名抽出ステップＳ５０８では、関数生成部３８０は、列制御情報の制御条件に関連付けられた行制御情報の制御条件に用いられている属性名を抽出する。
【０１０４】
ステップＳ５０９は、図１７に示すステップＳ３０９と同様である。
【０１０５】
条件句追加ステップＳ５１０では、関数生成部３８０は、列制御情報の制御条件に関連付けられた行制御情報の制御条件における属性情報に関する条件を、ポリシー関数に追加する。
【０１０６】
ステップＳ５１１は、図１７に示すステップＳ３１１と同様である。
【０１０７】
実施の形態３では、行の制御と列の制御とを組合せた制御に関しても、実施の形態１と同様に、一旦プロビジョニングを行うと、人事異動などで所属や役職などのユーザ属性の値が変更になっても、属性管理サーバ２００の管理する属性値を変更することにより、データベース装置４００の制御に使用する属性値の変更が反映される。そのため、データアクセスプログラムやデータオブジェクトの設定を変更する必要がない。データオブジェクトへアクセスする場合の処理は、ユーザ属性値のコンテキスト受渡装置への設定のみである。データオブジェクトへアクセスする場合に、ユーザのデータアクセスプログラムを解釈し、書き換えたりする必要がない。そのため、実施の形態３に示したアクセス制御システム１０００によれば、データオブジェクトへアクセスする場合に、処理が複雑とならず、データアクセスプログラムの性能が低下することもない。
【０１０８】
実施の形態４．
上述した実施の形態では、ＤＢアクセス制御管理部３５０は、プロビジョニングにおいて行制御情報もしくは列制御情報もしくは行制御情報と列制御情報とに基づきポリシー関数を生成する処理の説明をした。実施の形態４では、上記の各制御情報に対して階層構造を持つ属性情報の値が入力される場合の制御について説明する。
【０１０９】
階層構造を持った属性情報の一例として、ここでは、図２に示す属性情報を使用する。図２に示す属性情報において、社員が所属する組織の属性情報である組織名ｓｏｓｈｉｋｉには、部や課というように組織の階層構造における異なるレベルの組織名が設定されている。このような階層構造を持つ属性情報の下では、例えば、部長など部に直属するユーザ２０については、組織名ｓｏｓｈｉｋｉとして営業部や技術部などの部の名称が付けられ、課長や課の一般メンバーなど課に直属するユーザ２０については、組織名ｓｏｓｈｉｋｉとして営業１課や技術１課などの課の名称が付けられる場合がある。このような場合には、各名称が属性情報としてコンテキスト記憶部４３０に設定される。
異なるレベルの組織名が属性情報として使用される場合、例えば、行制御情報を部のレベルの組織名を用いてアクセスの許可をすると、ＤＢアクセス制御実行部３１０は、制御情報においてアクセスが許可されている部に属する課にもアクセスを許可する必要があることが考えられる。
【０１１０】
上記のような場合に対応するため、属性取得部３２０は、属性情報記憶部２１０が管理記憶する属性情報から、指定された属性情報の下位の属性情報を取得する。そして、コンテキスト記憶部４３０は、指定された属性情報の下位の属性情報を含めて記憶する。また、関数生成部３８０は、上位の属性情報のアクセス権限を下位の属性情報に継承するようポリシー関数を生成する。
【０１１１】
実施の形態４にかかるアクセス制御システム１０００の機能ブロック図は、図１に示す実施の形態１にかかるアクセス制御システム１０００の機能ブロック図と同様である。また、実施の形態４にかかるアクセス制御システム１０００の処理も実施の形態１と同様、事前準備であるプロビジョニングと、データオブジェクトへのアクセス実行の２つのフェーズに分けて実現される。
【０１１２】
まず、列制御情報に基づくポリシー関数について説明する。
図２に示す属性情報は、本社の下に営業部５１０があり、営業部５１０の下に営業１課５２０と営業２課５３０とがあるという階層構造を持っている。図３の売上表６００の売上６０２へは、アクセスする社員の所属する部が営業部５１０である場合、アクセスを許可するという列制御情報が設定されているとする。図２１は、上記の列制御情報に基づいて生成したポリシー関数の一例である。図２１において、関数部７１０は、ポリシー関数を示す。行番号７２０は、関数部７１０の行番号を示す。図２１に示すポリシー関数について、図１８に示すポリシー関数との相違点を説明する。
図２１において、６行目に示す条件文は、営業部５１０以下の組織全てを論理和で接続している。そのため、営業部５１０に所属する社員からのアクセスの場合、６行目の条件式を満たし、「１＝１」を返値として出力する。つまり、図２１に示すポリシー関数は、営業部５１０に所属する社員からのアクセスの場合、制御条件として常に真の値を取る条件を返値として出力する。一方、営業部５１０に所属する社員からのアクセスでない場合、６行目の条件式を満たさず、「１＝２」を返値として出力する。つまり、図２１に示すポリシー関数は、営業部５１０に所属する社員からのアクセスでない場合、制御条件として常に偽の値を取る条件を返値として出力する。
【０１１３】
次に、行制御情報に基づくポリシー関数について説明する。
図２に示す属性情報について、図３の売上表６００へ図４の行制御情報を適用する。この場合に、アクセスする社員の所属する部が営業部５１０である場合、売上表６００の部門６０３が営業部５１０に所属する値を持つレコードの参照を許可するという行制御情報であるとする。図２２は、上記の行制御情報に基づいて生成したポリシー関数の一例である。図２２において、関数部７１０は、ポリシー関数を示す。行番号７２０は、関数部７１０の行番号を示す。図２２に示すポリシー関数について、図６に示すポリシー関数との相違点を説明する。
図２２において、６行目に示す条件文は、営業部５１０以下の組織全てを論理和で接続している。そのため、営業部５１０に所属する社員からのアクセスの場合、６行目の条件式を満たし、「部門＝’営業部’  ＯＲ  部門＝’営業１課’  ＯＲ  部門＝’営業２課’」を返値として出力する。この返値の制御条件は、売上表６００の部門６０３が営業部５１０に所属する値を持つレコードの場合、満たされる。従って、このポリシー関数を使用することにより、アクセスする社員の所属する部が営業部５１０である場合、売上表６００の部門６０３が営業部５１０に所属する値を持つレコードの参照が許可される。
【０１１４】
属性情報が階層構造を持っているおり、かつ、行制御情報や列制御情報において属性情報と即値との比較を行う場合には、上述した方法により、プロビジョニングを行う必要がある。ここで、即値とは、指定された値を意味する。
【０１１５】
次に、階層構造を持つ属性情報の値に基づくプロビジョニングを行う動作について説明する。図２３は、階層構造を持つ属性情報の値に基づくプロビジョニングの処理を行う動作を示すフローチャートである。図２３に示すフローチャートは、行制御情報に基づくプロビジョニングの処理である図９に示すフローチャートのステップＳ１０７と、行の制御と列の制御とを組合せた制御を行う場合のプロビジョニングの処理である図２０に示すフローチャートのステップＳ５１０と置き換わる。
【０１１６】
関数生成部３８０は、行制御情報における属性情報に関する制御条件に対して、ステップＳ６０１からステップＳ６０７までの処理を実行する。
【０１１７】
階層構造判定ステップＳ６０１では、関数生成部３８０は、行制御情報における属性情報に関する制御条件が、階層構造を持つ属性情報を含むかどうかを判定する。関数生成部３８０は、階層構造を持つ属性情報を含む場合、ステップＳ６０２へ進み、階層構造を持つ属性情報を含まない場合、ステップＳ６０７へ進む。
関数生成部３８０は、例えば、階層構造を持つ属性情報の属性名をＤＢアクセス制御管理部３５０にあらかじめ登録しておくことにより、属性情報が階層構造を持つかどうかを判定できる。あるいは、関数生成部３８０は、全ての属性情報について、属性管理サーバ２００に階層構造の有無を問い合わせることにより、属性情報が階層構造を持つかどうかを判定できる。
【０１１８】
即値比較判定ステップＳ６０２では、関数生成部３８０は、階層構造を持つ属性情報を含む制御条件は、属性値と即値との比較を含むかどうかを判定する。関数生成部３８０は、属性値と即値との比較を含む場合、ステップＳ６０３へ進み、属性値と即値との比較を含まない場合、ステップＳ６０７へ進む。
【０１１９】
属性管理サーバ接続ステップＳ６０３では、関数生成部３８０は、属性管理サーバ２００にアクセスする。
【０１２０】
属性値取得ステップＳ６０４では、関数生成部３８０は、属性情報の階層構造情報を参照し、即値を含むノードの属性値と、当該ノードの下位にある属性値を取得する。ここで、ノードとは、図２に示す木構造により表現された属性情報において、本社５００や営業部５１０などの属性を表す節の部分である。また、下位とは、図２においては、指定されたノードに接続されるノードで、下に描かれているノードである。営業１課５２０の下位とは、社員ａ５２１と社員ｂ５２２である。また、営業部５１０の下位とは、営業１課５２０と営業２課５３０と、営業１課５２０と営業２課５３０とのそれぞれの下位のノードを含むものである。
【０１２１】
条件句追加ステップＳ６０５では、関数生成部３８０は、行制御情報における属性情報に関する制御条件を、ステップＳ６０４で取得した属性情報についての条件として展開し、論理和で結合する。関数生成部３８０は、論理和で結合した条件文を表へのアクセスを許可するかを判定する条件文をポリシー関数追加する。関数生成部３８０は、例えば、図２２の６行目に示すｉｆ文などを条件文として追加する。
【０１２２】
返値追加ステップＳ６０６では、関数生成部３８０は、論理和で結合した条件文をポリシー関数の返値を示す変数に追加する。関数生成部３８０は、例えば、図２２の７行目に示すｒｅｔｕｒｎ文などを返値として追加する。
【０１２３】
直接追加ステップＳ６０７では、関数生成部３８０は、行制御情報における属性情報に関する条件を、ポリシー関数の返値を示す変数に追加する。
【０１２４】
また、実施の形態４では、列制御情報に基づいたポリシー関数を生成するプロビジョニングの処理である図１７に示すフローチャートのステップＳ３１０は、図２３において行制御情報を列制御情報に置換した処理に置き換わる。ただし、列制御情報に基づいたポリシー関数を生成するプロビジョニングの処理である図１７に示すフローチャートでは、図２３におけるステップＳ６０６の処理は行わない。
【０１２５】
実施の形態４では、階層構造を持つ属性情報の値に基づく制御について説明した。実施の形態４に示した方法により、一旦プロビジョニングを行うと、人事異動などで所属など階層構造を持つユーザ属性の値が階層を越えて変更になっても、属性管理サーバ２００の管理するユーザ属性の値を変更するだけでデータベース装置４００の制御に使用する属性値の変更が反映される。そのため、データアクセスプログラムやデータオブジェクトの設定を変更する必要がない。データオブジェクトへアクセスする場合の処理は、ユーザ属性値のコンテキスト受渡装置への設定のみである。データオブジェクトへアクセスする場合に、ユーザのデータアクセスプログラムを解釈し、書き換えたりする必要がない。そのため、実施の形態４に示したアクセス制御システム１０００によれば、データオブジェクトへアクセスする場合に、処理が複雑とならず、データアクセスプログラムの性能が低下することもない。
【０１２６】
実施の形態５．
上述した実施の形態では、データベース装置４００が管理記憶するデータオブジェクトへのアクセス制御について説明した。しかし、データベース装置４００が管理記憶するデータオブジェクトの不正利用などからの保護を徹底するためには、データオブジェクトに対してのデータアクセスプログラムによる検索結果を保存した結果ファイルについても、データオブジェクトと同様のアクセス制御を行う必要がある。実施の形態５では、データオブジェクトに対してのデータアクセスプログラムによる検索結果を保存した結果ファイルのアクセス制御について説明する。
【０１２７】
図２４は、実施の形態５にかかるアクセス制御システム１０００の機能ブロック図である。図２４に示すアクセス制御システム１０００の機能ブロック図について、図１に示すアクセス制御システム１０００の機能ブロック図との相違点のみを説明する。
データベース装置４００は、さらに、結果出力部４８０と関数付加部４９０とを備える。結果出力部４８０は、実行部４７０がデータアクセスプログラムを実行し、データオブジェクトにアクセスした結果を記憶する結果ファイルを出力する。関数付加部４９０は、結果出力部４８０が出力した結果ファイルに、ポリシー関数を付加する。
【０１２８】
データベース装置４００は、ポリシー関数が付加された結果ファイルへアクセスする場合にも、データオブジェクトへのアクセスと同様にポリシー関数によるアクセス制御を行う。つまり、結果ファイルに対してアクセスする場合のアクセス制御の処理は、実行するポリシー関数がポリシー関数記憶部４４０に記憶されたものでなく、結果ファイルに付加されたものであることを除き、実施の形態１に示したデータオブジェクトへのアクセス実行の処理と同様である。つまり、結果ファイルに付加されたポリシー関数により参照を許可されたユーザのみ、結果ファイルを参照することができる。
【０１２９】
結果ファイルに対してもポリシー関数によるアクセス制御を行うことで、データオブジェクトに対してのデータアクセスプログラムによる検索結果を保存した結果ファイルについても、データベース装置４００が管理記憶するデータオブジェクトへのアクセス制御と同様のアクセス制御が可能である。
また、結果ファイルを暗号化するなどの方法で併せて保護することも可能である。
【０１３０】
図２５は、実施の形態１におけるアクセス制御システム１０００の外観の一例を示す図である。
図２５において、アクセス制御システム１０００は、サーバ９１０、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）表示装置９０１、キーボード（Ｋ／Ｂ）９０２、マウス９０３、コンパクトディスク装置（ＣＤＤ）９０５、データベース９０８、システムユニット９０９を備え、これらはケーブルで接続されている。
さらに、アクセス制御システム１０００は、ローカルエリアネットワーク（ＬＡＮ）９４２、ゲートウェイ９４１を介してインターネット９４０に接続されている。
上述した実施の形態において、「業務サーバ１００」、「属性管理サーバ２００」、「ＤＢアクセス制御装置３００」などは、例えば、サーバ９１０である。また、「データベース装置４００」、「〜記憶部」として説明するものは、例えば、データベース９０８である。また、「管理者１０」、「ユーザ２０」などは、例えば、システムユニット９０９を使用して業務サーバ１００やＤＢアクセス制御装置３００へ指示をする。
【０１３１】
図２６は、実施の形態１におけるアクセス制御システム１０００の備えるサーバ９１０、データベース９０８、システムユニット９０９などのハードウェア構成の一例を示す図である。
図２６において、サーバ９１０、データベース９０８、システムユニット９０９などは、プログラムを実行するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９１１を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４、通信ボード９１５、ＣＲＴ表示装置９０１、Ｋ／Ｂ９０２、マウス９０３、ＦＤＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）９０４、磁気ディスク装置９２０、ＣＤＤ９０５、プリンタ装置９０６、スキャナ装置９０７と接続されている。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部１２０の一例である。
通信ボード９１５は、ＦＡＸ機９３２、電話器９３１、ＬＡＮ９４２、無線アンテナ９４３等に接続されている。
例えば、通信ボード９１５、Ｋ／Ｂ９０２、スキャナ装置９０７、ＦＤＤ９０４などは、入力部の一例である。
また、例えば、通信ボード９１５、ＣＲＴ表示装置９０１などは、出力部の一例である。
【０１３２】
ここで、通信ボード９１５は、ＬＡＮ９４２に限らず、直接、インターネット９４０、或いはＩＳＤＮ等のＷＡＮ（ワイドエリアネットワーク）に接続されていても構わない。直接、インターネット９４０、或いはＩＳＤＮ等のＷＡＮに接続されている場合、アクセス制御システム１０００は、インターネット９４０、或いはＩＳＤＮ等のＷＡＮに接続され、ゲートウェイ９４１は不用となる。
磁気ディスク装置９２０には、オペレーティングシステム（ＯＳ）９２１、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３は、ＣＰＵ９１１、ＯＳ９２１、ウィンドウシステム９２２により実行される。
【０１３３】
上記プログラム群９２３には、上述した実施の形態の説明において「〜部」として説明した機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、上述した実施の形態の説明において、「〜の判定」として説明したものが、「〜ファイル」として記憶されている。
また、上述した実施の形態の説明において説明したフローチャートの矢印の部分は主としてデータの入出力を示し、そのデータの入出力のためにデータは、磁気ディスク装置９２０、ＦＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ）、光ディスク、ＣＤ（コンパクトディスク）、ＭＤ（ミニディスク）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のその他の記録媒体に記録される。あるいは、信号線やその他の伝送媒体により伝送される。
【０１３４】
また、上述した実施の形態の説明において「〜部」として説明したものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、ハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。
【０１３５】
また、上述した実施の形態を実施するプログラムは、また、磁気ディスク装置９２０、ＦＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ）、光ディスク、ＣＤ（コンパクトディスク）、ＭＤ（ミニディスク）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のその他の記録媒体による記録装置を用いて記憶されても構わない。
【図面の簡単な説明】
【０１３６】
【図１】実施の形態１にかかるアクセス制御システム１０００の機能を示す機能ブロック図である。
【図２】属性情報記憶部２１０が記憶する属性情報の一例である。
【図３】データベース装置４００が管理記憶するデータオブジェクトの一例である売上表６００である。
【図４】管理者１０によって定義された行制御情報の一例である。
【図５】行制御情報を拡張し、制御条件の論理和を記述できるようにした一例である。
【図６】図４に示す行制御情報に基づいて生成したポリシー関数の一例を示した図である。
【図７】表とポリシー関数とを関連付けするコマンドの一例である。
【図８】図７に示すコマンドに表とポリシー関数を割り当てした一例である。
【図９】ＤＢアクセス制御管理部３５０がプロビジョニングを行う動作を示すフローチャートである。
【図１０】業務サーバ１００が発行するデータアクセスプログラムとしてＳＱＬプログラムを用いた場合の一例である。
【図１１】業務サーバ１００が図１０に示すデータアクセスプログラムを発行した場合の、制御条件付加部４６０によって制御条件を付加されたデータアクセスプログラムである。
【図１２】業務サーバ１００が図１０に示すデータアクセスプログラムを発行した場合の、制御条件付加部４６０によって制御条件を付加されたデータアクセスプログラムである。
【図１３】データオブジェクトへアクセスする処理のシーケンスを示した図である。
【図１４】定義情報記憶部２２０が記憶する列制御情報の一例である。
【図１５】列制御情報に基づく制御を実現するポリシー関数の一例である。
【図１６】ポリシー関数を表の列に関連付けてポリシー関数記憶部４４０に登録するコマンドの一例を示す。
【図１７】列制御情報に基づく制御を行う場合のプロビジョニングを行う動作を示すフローチャートである。
【図１８】行の制御と列の制御とを組合せた制御を実現するポリシー関数である。
【図１９】行の制御と列の制御とを組合せた制御を行う場合のプロビジョニングを行う動作を示すフローチャートである。
【図２０】図１９におけるステップＳ４０５とステップＳ４０６の動作を詳細化したフローチャートである。
【図２１】列制御情報に基づいて生成したポリシー関数の一例である。
【図２２】行制御情報に基づいて生成したポリシー関数の一例である。
【図２３】階層構造を持つ属性情報の値に基づくプロビジョニングの処理を行う動作を示すフローチャートである。
【図２４】実施の形態５にかかるアクセス制御システム１０００の機能ブロック図である。
【図２５】実施の形態１におけるアクセス制御システム１０００の外観の一例を示す図である。
【図２６】実施の形態１におけるアクセス制御システム１０００のハードウェア構成の一例を示す図である。
【符号の説明】
【０１３７】
１００  業務サーバ、１０００  アクセス制御システム、２００  属性管理サーバ、２１０  属性情報記憶部、２２０  定義情報記憶部、３００  ＤＢアクセス制御装置、３１０  ＤＢアクセス制御実行部、３２０  属性取得部、３３０  属性記憶部、３４０  属性送信部、３５０  ＤＢアクセス制御管理部、３６０  制御情報取得部、３７０  制御情報記憶部、３８０  関数生成部、３９０  関数制御部、４００  データベース装置、４１０  プログラム受信部、４２０  属性受信部、４３０  コンテキスト記憶部、４４０  ポリシー関数記憶部、４５０  関数実行部、４６０  制御条件付加部、４７０  実行部、４８０  結果出力部、４９０  関数付加部、６００  売上表、６０１  月、６０２  売上、６０３  部門、６１０  売上表の行制御情報、６１１  コード、６１２  表名、６１３  列名、６１４  ユーザ属性、６１５  演算条件、６２６  条件ａ、６２７  条件ｂ、６３０  売上表の列制御情報、６３１  列名、６３２  データ型、６３３  条件、９０１  ＣＲＴ表示装置、９０２  Ｋ／Ｂ、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０８  データベース、９０９  システムユニット、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  磁気ディスク装置、９２１  ＯＳ、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群、９３１  電話器、９３２  ＦＡＸ機、９４０  インターネット、９４１  ゲートウェイ、９４２  ＬＡＮ。
【図１】
2007018309.tif 000003
【図２】
2007018309.tif 000004
【図３】
2007018309.tif 000005
【図４】
2007018309.tif 000006
【図５】
2007018309.tif 000007
【図６】
2007018309.tif 000008
【図７】
2007018309.tif 000009
【図８】
2007018309.tif 000010
【図９】
2007018309.tif 000011
【図１０】
2007018309.tif 000012
【図１１】
2007018309.tif 000013
【図１２】
2007018309.tif 000014
【図１３】
2007018309.tif 000015
【図１４】
2007018309.tif 000016
【図１５】
2007018309.tif 000017
【図１６】
2007018309.tif 000018
【図１７】
2007018309.tif 000019
【図１８】
2007018309.tif 000020
【図１９】
2007018309.tif 000021
【図２０】
2007018309.tif 000022
【図２１】
2007018309.tif 000023
【図２２】
2007018309.tif 000024
【図２３】
2007018309.tif 000025
【図２４】
2007018309.tif 000026
【図２５】
2007018309.tif 000027
【図２６】
2007018309.tif 000028