(57)【特許請求の範囲】
【請求項１】
それぞれが少なくとも一つの機能を有する少なくとも一つのアプリケーションを実行し、データベースを維持することができるコンピュータシステムにおいて、前記少なくとも一つの機能に対するユーザのアクセスを規定する方法であって、
少なくとも一つの属性を前記ユーザに割り当てるステップと、
前記少なくとも一つの属性を前記データベース中の第一のテーブルに格納するステップと、
前記少なくとも一つの属性の実効値ごとに親値を割り当て、それにより、一つ以上の親子値関係を生成するステップと、
前記一つ以上の親子値関係を前記データベース中の第二のテーブルに格納するステップと、
前記コンピュータシステム中でアプリケーションを実行するステップと、
前記第一のテーブルから、ユーザに割り当てられた前記少なくとも一つの属性の一つ以上を検索するステップと、
前記一つ以上の親子値関係を前記第二のテーブルから検索するステップと、
検索された親子値関係にしたがって、検索された属性の数を減らすステップと、
前記アプリケーションの前記少なくとも一つの機能に対するユーザのアクセスに対し、減らされた数の前記検索された属性によって規定されるアクセス制限を課すステップと、
を含む方法。
【請求項２】
前記少なくとも一つのアプリケーションの機能の少なくとも一つが、データにアクセスする能力に関する、請求項１記載の方法。
【請求項３】
それぞれが少なくとも一つの機能を有する少なくとも一つのアプリケーションを実行し、データベースを維持することができるコンピュータシステムにおいて、前記少なくとも一つの機能に対するユーザのアクセスを規定する方法であって、
（ａ）少なくとも一つの属性を前記ユーザに割り当てるステップと、
（ｂ）前記少なくとも一つの属性を前記データベース中の第一のテーブルに格納するステップと、
（ｃ） 前記少なくとも一つの属性の実効値ごとに親値を割り当てるステップと、
（ｄ）親子値関係を前記データベース中の第二のテーブルに格納するステップと、
（ｅ）前記コンピュータシステム中でアプリケーションを実行するステップと、
（ｆ）データベース中の前記第一のテーブルから、ユーザに割り当てられた前記少なくとも一つの属性の一つ以上を検索するステップと、
（ｇ）検索した属性を前記実行中のアプリケーションに提供するステップと、
（ｈ）前記親子値関係を前記第二のテーブルから検索するステップと、
（ｉ）検索された親子値関係にしたがって、検索された属性の数を減らすステップと、
（ｊ）前記アプリケーションの前記少なくとも一つの機能に対するユーザのアクセスに対し、減らされた数の前記検索された属性によって規定されるアクセス制限を課すステップと
を含む方法。
【請求項４】
前記アプリケーションを実行するステップ（ｅ）の前に、前記ユーザに割り当てられた少なくとも一つの属性にしたがって実行すべき一つ以上のアプリケーションの選択を前記ユーザに提供するステップをさらに含む、請求項３記載の方法。
【請求項５】
前記少なくとも一つのアプリケーションの機能の少なくとも一つが、データにアクセスする能力に関する、請求項３記載の方法。
【請求項６】
それぞれが少なくとも一つの機能を有する少なくとも一つのアプリケーションを実行し、データベースを維持することができるコンピュータシステムにおいて、前記少なくとも一つの機能に対するユーザのアクセスを規定する方法であって、
少なくとも一つの属性をグループに割り当てるステップと、
前記グループを少なくとも一つのユーザに割り当てるステップと、
前記グループを前記データベース中の第一のテーブルに格納するステップと、
前記少なくとも一つの属性の実効値ごとに親値を割り当て、それにより、一つ以上の親子値関係を生成するステップと、
前記一つ以上の親子値関係を前記データベース中の第二のテーブルに格納するステップと、
前記コンピュータシステム中でアプリケーションを実行するステップと、
前記第一のテーブルから、前記グループに割り当てられた属性の少なくとも一つを検索するステップと、
前記一つ以上の親子値関係を前記第二のテーブルから検索するステップと、
検索された親子値関係にしたがって、検索された属性の数を減らすステップと、
前記アプリケーションの前記少なくとも一つの機能に対するユーザのアクセスに対し、減らされた数の前記検索された属性によって規定されるアクセス制限を課すステップと、
を含む方法。
【請求項７】
前記グループに割り当てられた前記少なくとも一つの属性が、前記アプリケーションのみに対するアクセスを規定する、請求項６記載の方法。
【請求項８】
少なくとも一つの機能を有するアプリケーションを実行するための手段と、
データベースを維持するための手段と、
少なくとも一つの属性をユーザに割り当てるための手段と、
前記少なくとも一つの属性を前記データベース中の第一のテーブルに格納するための手段と、
前記少なくとも一つの属性の実効値ごとに親値を割り当て、それにより、一つ以上の親子値関係を生成する手段と、
前記一つ以上の親子値関係を前記データベース中の第二のテーブルに格納する手段と、
前記第一のテーブルから、ユーザに割り当てられた前記少なくとも一つの属性を検索するための手段と、
前記一つ以上の親子値関係を前記第二のテーブルから検索する手段と、
検索された親子値関係にしたがって、検索された属性の数を減らす手段と、
前記アプリケーションの前記少なくとも一つの機能に対するユーザのアクセスに対し、減らされた数の前記検索された属性によって規定されるアクセス制限を課す手段と、
を含むコンピュータシステム。
【請求項９】
前記少なくとも一つのアプリケーションの機能の少なくとも一つが、データにアクセスする能力に関する、請求項８記載のシステム。
【請求項１０】
少なくとも一つの機能を有するアプリケーションを実行するための手段と、
データベースを維持するための手段と、
少なくとも一つの属性をユーザに割り当てるための手段と、
前記少なくとも一つの属性の実効値ごとに親値を割り当て、それにより、一つ以上の親子値関係を生成する手段と、
前記親子値関係を前記データベース中の第二のテーブルに格納する手段と、
前記少なくとも一つの属性を前記データベース中の第一のテーブルに格納するための手段と、
前記第一のテーブルから、ユーザに割り当てられた前記少なくとも一つの属性を検索するための手段と、
検索された属性を前記アプリケーションに提供するための手段と、
前記親子値関係を前記第二のテーブルから検索する手段と、
検索された親子値関係にしたがって、検索された属性の数を減らす手段と、
前記アプリケーションの少なくとも一つの機能に対するユーザのアクセスに対し、減らされた数の前記検索された属性によって規定されるアクセス制限を課す手段と、
を含むコンピュータシステム。
【請求項１１】
前記ユーザに割り当てられた前記少なくとも一つの属性にしたがって実行すべき一つ以上のアプリケーションの選択を前記ユーザに提供するための手段をさらに含む、請求項１０記載のシステム。
【請求項１２】
前記少なくとも一つのアプリケーションの機能の少なくとも一つが、データにアクセスする能力に関する、請求項１０記載のシステム。
【請求項１３】
少なくとも一つの機能を有するアプリケーションを実行するための手段と、
データベースを維持するための手段と、
少なくとも一つの属性をグループに割り当てるための手段と、
前記グループをユーザに割り当てるための手段と、
前記グループを前記データベース中の第一のテーブルに格納するための手段と、
前記少なくとも一つの属性の実効値ごとに親値を割り当て、それにより、一つ以上の親子値関係を生成する手段と、
前記一つ以上の親子値関係を前記データベース中の第二のテーブルに格納する手段と、
前記第一のテーブルから、前記グループに割り当てられた属性の少なくとも一つを検索するための手段と、
前記一つ以上の親子値関係を前記第二のテーブルから検索する手段と、
検索された親子値関係にしたがって、検索された属性の数を減らす手段と、
前記アプリケーションの少なくとも一つの機能に対するユーザのアクセスに対し、減らされた数の前記属性によって規定されるアクセス制限を課す手段と、
を含むコンピュータシステム。
【請求項１４】
前記グループに割り当てられた前記少なくとも一つの属性が、前記アプリケーションのみに対するアクセスを規定する、請求項１３記載のシステム。
【発明の詳細な説明】
【０００１】
発明の技術分野
本発明は一般に、コンピュータシステムに対するユーザアクセスを規定することに関し、特に、コンピュータシステム上で稼働することができる一つ以上のアプリケーションの機能に対する複数のユーザそれぞれのアクセスの限界を選択的かつ融通性に規定する能力に関する。
【０００２】
発明の背景
多くの従業員および／または顧客が、多数のアプリケーションを実行することができるコンピュータシステムに対するアクセスを有する共用リソースサービスビューロ環境のような環境では、そのようなアプリケーションの一つ以上の機能に対する特定のユーザまたはユーザのクラスによるアクセスを制限する能力を有することがしばしば望ましい。本明細書で使用する「機能」は、たとえば、データベーステーブルからデータにアクセスする機能、レポートを作成し、閲覧し、プリントする機能およびｅメールを送受信する機能など、ほぼ無限の可能なアプリケーション機能のいずれをも含む。
【０００３】
現在、ユーザアクセスを制限する際のそのような融通性は利用不可能である。データに対するアクセスの制限に関して、Oracle（登録商標）Corporationによって現在そのデータベースプログラムの中で使用されている一つの方法は、特定のデータテーブルにアクセスするユーザの能力をデータベースレベルで制限する方法である。Oracle（登録商標）Corporationは、具体的にデータそのものに対するアクセスではなく、そのデータを保持するテーブルに対するアクセスを制限する、ユーザへの「役割」の割り当てを許容することにより、これを達成している。
【０００４】
Oracle（登録商標）役割によって制限されるデータアクセス機能をはじめとする、アプリケーション機能に対するアクセスを制限する際のいっそうの融通性の必要性は、簡単な例によって実証することができる。以下は、１９９８年６月１５日の朝に顧客Ａ、ＢおよびＣによって実行された機密金融取引の仮想データ表である（表中、ＷＤＲＷＬは引き出しを示し、ＤＰＳＴは預け入れを示し、ＰＹＭＮＴは支払いを示す）。
【０００５】
【表１】
0004571746.tif 000002
【０００６】
顧客Ａだけの６月分の機密取引に関するレポートを作成するためには、列１、４および６のデータにアクセスしなければならないが、行２、３、５および７にアクセスする必要はない。このデータは非常に機密にかかわるものであるため、アクセスを、割り当て（すなわち、顧客Ａの取引の報告）に関するデータだけに制限することが非常に望ましい。
【０００７】
加えて、Ａの過去の取引のレポートを作成するために使用されるアプリケーションは、過去の実績を示すことに加えて将来の実績を予測するレポートを含む、いくつかの異なるタイプのレポートを作成する能力を有するかもしれない。だれが割り当てを与えられるかに依存して、両方のタイプのレポート作成能力に対するアクセスを許可することは望ましくないかもしれない。また、作成されたレポートのプリントを許可することは望ましくないかもしれない。
【０００８】
発明の概要
本発明にしたがって、一つ以上の「属性」が、多数のアプリケーションを実行することができるコンピュータシステムのユーザに割り当てられる。各属性は名称−数値対であり、名称が、アクセスが規定されているアプリケーション機能（たとえば、データにアクセスする、レポートを作成する）を指定し、数値がアクセスの限界（たとえば全データまたは一部のデータ）をセットする。属性をグループで割り当てて、ユーザごとに個々の属性割り当てを生成する負担を除くこともできる。
【０００９】
本発明にしたがって、アプリケーションの少なくとも一つの機能を実行するユーザの能力を規定するためのシステムおよび方法が提供される。本システムおよび方法にしたがって、ユーザは少なくとも一つの属性を割り当てられる。属性はデータベース中のテーブルに格納される。アプリケーションがユーザによって実行され、そのユーザに割り当てられた属性が検索される。属性は、アプリケーションの機能に対するユーザのアクセスが、検索された属性にしたがって規定されるよう、アプリケーションによって強制される。
【００１０】
本発明のさらなる態様にしたがって、グループが少なくとも一つの属性を割り当てられ、そのグループがユーザに割り当てられる、アプリケーションの少なくとも一つの機能を実行するユーザの能力を規定するためのシステムおよび方法が提供される。グループはデータベース中のテーブルに格納される。アプリケーションがユーザによって実行され、そのユーザに割り当てられたグループが検索される。グループに割り当てられた属性は、アプリケーションの機能に対するユーザのアクセスが、検索された属性にしたがって規定されるよう、アプリケーションによって強制される。
【００１１】
したがって、本発明の目的は、コンピュータシステムの所与のユーザまたはユーザのグループに利用可能なアプリケーション機能に対するアクセスを選択的に規定する能力を提供することである。
【００１２】
本発明のさらなる目的は、テーブル指向データベースに含まれるデータに対するユーザアクセスを制限する能力において現在利用可能であるよりも大きな融通性を提供することである。
【００１３】
本発明を他の目的およびさらなる目的とともにいっそう理解するため、添付図面と併せて読まれる以下の説明を参照し、その範囲を請求の範囲で指摘する。
【００１４】
発明の詳細な説明
ユーザ属性
図１は、本発明のシステムの例を示すブロック図である。コンピュータ５が、テーブル１１、１３および１５によって表されるデータテーブルを維持するデータベースソフトウェア８を実行する。また、アプリケーションＡＢＣ、ＤＥＦおよびＧＨＩによって表される多数のアプリケーションがコンピュータ５上で稼働し、テーブル１１、１３および１５中のデータを検索し、加工するための手段を提供するものもある。システムの各ユーザＸ、ＹおよびＺは、それぞれコンピュータ１８、２１および２４によって表される端末機を介してコンピュータ５へのアクセスを有している。本発明にしたがって、ユーザＸ、ＹおよびＺは、一つ以上の「属性」を割り当てられる。各属性は、アクセスが規定されているアプリケーション機能（たとえば、データベース内のデータにアクセスする能力）を指定する名称と、以下さらに詳細に説明する、アクセスの限界を規定する値とを有する。別段指定しない限り、本明細書で使用する「属性」は、名称−値対を示すために使用する。
【００１５】
属性は、データベースソフトウェア８によってテーブル中に維持され、アプリケーションＡＢＣ、ＤＥＦおよびＧＨＩを実行するユーザそれぞれの能力を規定する。一例として、二つの有用な属性がDATA_SCOPEおよびUSER_LEVELである。DATA_SCOPEは、ユーザがアクセスを許可されているデータを規定し、前記表１を例として使用するならば、それぞれ顧客Ａ、Ｂ、Ｃまたは３顧客すべてに対応するデータを表すＡ、Ｂ、ＣまたはALLの可能な値を有している。USER_LEVELは、ユーザが実行することを選択する所与のアプリケーションの特定の機能に対するアクセスのレベルを一般に規定する広い属性である。USER_LEVELは、好ましくは、ADMIN、REGULARおよびRESTRICTEDの値を有する。ADMINは、最も制限的でなく、特定のアプリケーションの利用可能なすべての機能、たとえばレポート検索、ｅメール、プリントに対するアクセスを許可する。RESTRICTEDは、ユーザを、最も基本的なアプリケーション機能、たとえばレポート作成に制限する。REGULARレベルユーザは、ADMINレベルユーザよりも少ない機能に対するアクセスしか許可されないが、RESTRICTEDレベルユーザよりも多くの機能に対するアクセスを許可される。各アプリケーションは、それが提供する種々の機能に基づいてUSER_LEVEL属性を解釈することができる。USER_LEVEL属性に代えて、たとえばレポート作成またはプリントに関するいくつかの集束的な属性を使用してもよい。
【００１６】
二つの属性DATA_SCOPEおよびUSER_LEVELならびにそれぞれの数値はもちろん単なる例である。当業者は、アプリケーション機能に対するアクセスを制限する属性を規定する無限の潜在性を理解するであろう。
【００１７】
グループ分け
属性は、ユーザ個々に割り当てることもできるし、好ましい実施態様では、グループ分け方法を実現することもできる。その一例を図２に示す。DATA_SCOPEおよびUSER_LEVELのような属性が四角によって表され、「属性グループ」が三角形によって表され、「割り当て対象グループ」が円によって表されている。属性グループは、属性およびそれらの値のみからなり、割り当て対象グループは、属性グループおよび／または他の割り当て対象グループからなるが、個々の属性からなるものではない。グループ分け方法の好ましい実施態様では、各属性グループを一つのアプリケーションに関する属性に制限し、それにより、種々のアプリケーションのための種々の属性および値を割り当てる能力を提供する。代替態様では、一つのグループがすべてのアプリケーションのための属性を含むことができるよう、特定のアプリケーションから独立して属性グループを生成することもできる。個々のアプリケーションの機能に対するアクセスを規定する際の融通性は少なくなるが、そのようなシステムは、より実現しやすいであろう。
【００１８】
好ましい実施態様では、APP_CODEと呼ばれる少なくとも一つの列を含むテーブルＡＰＰＳが、対応する属性を有することができる有効なアプリケーションのリストを規定する。再び図１を参照すると、この例で有効なAPP_CODE値は、ＡＢＣ、ＤＥＦおよびＧＨＩである。ＡＰＰＳテーブル中の他の列は、各アプリケーションによって必要である情報を含むであろう。たとえば、ユーザが実行するアプリケーションを選択するためのアイコンを提供するメニューシステムでは、列APP_NAMEが、APP_CODE列中のアプリケーションに対応するアイコンの可視ラベルとして使用される文字列を含むであろう。
【００１９】
各属性グループは、APP_CODEによって特定される具体的なアプリケーションのためのゼロ以上の属性のセットを規定する。ゼロ属性の属性グループは、属性のためのデフォルト値をそのアプリケーションに割り当てるべきであることを示すために使用することができる。通常、デフォルト値は最も制限的である。あるいはまた、ゼロ属性の属性グループは、アプリケーションを実行する能力以外には、アクセスが規定されるAPP_CODEによって特定されるアプリケーションの機能がないことを示すために使用することもできる。
【００２０】
図２のグループ分け例は、図１および表１に関して先に論じた例よりも複雑なユーザ構造を示す。図２の属性グループ１０６、１１５、１３０、１４５および１４８は、以下のように割り当てられた属性を有している。
【００２１】
【表２】
0004571746.tif 000003
【００２２】
この好ましい実施態様では、各属性グループが当てはまるアプリケーションは、グループが生成される時点で指定され、論じる例では、前記表２の第二列に示されている。
【００２３】
図２に戻ると、ユーザ割り当て属性グループ１０６は、属性DATA_SCOPE１０７およびUSER_LEVEL１０８を、それぞれ表２に示すALLおよびADMINの値とともに有する。属性にしたがって、ユーザは、アプリケーションＧＨＩに対するADMINアクセスを許可されるべきであり、そのアプリケーションを実行しているとき、各顧客Ａ、ＢおよびＣに関するデータに対するアクセスを許可される。ユーザ割り当て属性グループ１３０は、三つの属性DATA_SCOPE１３３、DATA_SCOPE１３６およびUSER_LEVEL１３９を、それぞれＡ、ＢおよびREGULARの値とともに有する。属性にしたがって、このユーザは、クライアントＡまたはＢに関するデータにアクセスすることができ、REGULAR状態のユーザに事前に規定されているアプリケーションＡＢＣの機能にアクセスすることができる。ユーザ割り当て属性グループ１４５は、アプリケーションＡＢＣに対するRESTRICTEDアクセスを有し、顧客ＡおよびＢに関するデータに対するアクセスを許可される。ユーザ割り当て属性グループ１４８は、アプリケーションＤＥＦに対するRESTRICTEDアクセスを許可され、顧客ＢおよびＣに関するデータに対するアクセスを許可される。
【００２４】
一つ以上の属性グループを割り当て対象グループに割り当てることができる。図２では、たとえば割り当て対象グループ１４２は、属性グループ１４５および１４８からなることができ、以下の表３の最後二列に掲載された属性名−値対のすべてを含むことができる。
【００２５】
【表３】
0004571746.tif 000004
【００２６】
割り当て対象グループは、他の割り当て対象グループに割り当てることもできる。これは、図２では、割り当て対象グループ１４２中のすべての属性ならびに属性グループ１３０および１１５中のすべての属性を含む割り当て対象グループ１０３によって示されている。図の一番上の割り当て対象グループ１００は、割り当て対象グループ１０３および属性グループ１０６からなる。したがって、割り当て対象グループ１００は、五つの各属性グループ１３０、１４５、１４８、１１５および１０６中のすべての属性を含む。
【００２７】
属性グループ分けシステムは、異なる責任レベルの従業員に属性を割り当てるのに特に適している。たとえば、属性グループ１１５、１３０、１４５および１４８は、低レベルまたは中レベルの従業員に割り当てることができるが、割り当て対象グループ１００、１０３および１４２ならびに属性グループ１０６は、より低レベルの従業員の仕事を監督し、属性グループ１０６に関して、自らのアプリケーションを実行する責任を負う管理職に割り当てることができる。
【００２８】
この好ましいグループ分けシステムでは、属性グループ、割り当て対象グループおよびユーザに対する属性の割り当ては、テーブルATTRIBUTESの中に維持される。ATTRIBUTESテーブルは、三つの列ASSIGNEE、ATTRIBUTE_NAMEおよびATTRIBUTE_VALUEを有している。ASSIGNEEは、属性グループ名、割り当て対象グループ名またはユーザであることができる。ATTRIBUTE_NAMEは、属性の名称（たとえばDATA_SCOPE）である。ATTRIBUTE_VALUEは、指定された属性の特定の値（たとえばALL）である。
【００２９】
ATTRIBUTESテーブルは、７種の基本コマンドを使用して維持される。これらのコマンドの例を、Oracle（登録商標）データベース環境で使用するためのOracle（登録商標）手続きとして以下に記す。当業者は、他の環境の場合に類似したコマンドを導出しうることを理解するであろう。以下の記述では、パラメータを一重引用符で示し、リテラル列を二重引用符で示す。
【００３０】
コマンドNo.１
attr_utils.create_group('group_name'、'group_type'、'app_code')
'group_name'：グループ名
'group_type'："ATTRIBUTE"または"ASSIGNEE"
'app_code'：'group_type'が"ATTRIBUTE"であるならば、このフィールドが必要である。そうでなければ、このフィールドは無視される。
【００３１】
この手続きは、指定されたタイプのグループを生成する。'group_name'がグループまたはOracle（登録商標）ユーザとしてすでに存在するならば、エラーで出る。
【００３２】
手続きにしたがって、'group_name'および'group_type'の値が大文字に変換される。すると、以下の列値を有するレコードがATTRIBUTESテーブルに挿入される。
ASSIGNEE='group_name'にセットし、
ATTRIBUTE_NAME="ASSIGNEE_TYPE"にセットし、
'group_type'の値に基づき、ATTRIBUTE_VALUE="ATTRIBUTE_GROUP"または"ASSIGNEE_GROUP"にセットせよ。
【００３３】
加えて、'group_type'が"ATTRIBUTE"であるならば、以下の列値を有する別のレコードがATTRIBUTESテーブルに挿入される。
ASSIGNEE='group_name'にセットし、
ATTRIBUTE_NAME="APP_CODE"にセットし、
ATTRIBUTE_VALUE='app_code'にセットせよ。
【００３４】
コマンドNo.２
attr_utils.assign_group('assignee'、'group_name')
'assignee'：'group_name'を割り当てられるユーザまたは割り当て対象グループ
'group_name'：割り当て対象に割り当てられるグループ
【００３５】
この手続きは、一つのグループを別のグループまたはユーザに割り当てる。'assignee'が割り当て対象グループまたはユーザとして存在しないならば、エラーが返される。'group_name'が存在しない場合にも、エラーが返される。
【００３６】
この手続きは、第一に、'assignee'および'group_name'の値を大文字に変換する。第二に、以下の列値を有するレコードをATTRIBUTESテーブルに挿入する。
ASSIGNEE='assignee'にセットし、
ATTRIBUTE_NAME="ASSIGNED_GROUP"にセットし、
ATTRIBUTE_VALUE='group_name'にセットせよ。
【００３７】
コマンドNo.３
attr_utils.assign_attribute('assignee'、'attribute_name'、'attribute_value')
'assignee'：属性グループ名。これは属性グループでなければならない。
'attribute_name'：属性の名称
'attribute_value'：指定された属性の値
【００３８】
この手続きは、特定された値を有する属性を'assignee'に割り当てる。割り当て対象が属性グループとして存在しないか、attribute_nameが予約されているならば、エラーが返される。
【００３９】
この手続きは、まず、'assignee'および'attribute_name'の値を大文字に変換し、次に、以下の列値を有するレコードをATTRIBUTESテーブルに挿入する。
ASSIGNEE='assignee'にセットし、
ATTRIBUTE_NAME="attribute_name"にセットし、
ATTRIBUTE_VALUE='attribute_value'にセットせよ。
【００４０】
コマンドNo.４
attr_utils.drop_group('group_name')
'group_name'：グループまたはユーザに対するすべての参照とともに削除されるグループまたはユーザの名称
【００４１】
この手続きは、グループまたはユーザをそのグループまたはユーザに対するすべての参照とともに省略する。'group_name'が存在しないならば、エラーが返される。
【００４２】
この手続きは、まず、'group_name'値を大文字に変換し、次に、ASSIGNEE列中の値が'group_name'にマッチするATTRIBUTESテーブル中のすべてのレコードを削除する。加えて、以下の規準の両方にマッチするATTRIBUTESテーブル中のすべてのレコードを削除する。
ａ．ATTRIBUTE_NAME列中の値が"ASSIGNED_GROUP"である。
ｂ．ATTRIBUTE_VALUE列中の値が'group_name'にマッチする。
【００４３】
コマンドNo.５
attr_utils.rescind_group('assignee'、'group_name')
'assignee'：'group_name'を除かれるユーザまたは割り当て対象グループ
'group_name'：割り当て対象から除かれるグループ
【００４４】
この手続きは、'assignee'から指定された'group_name'を除く。'group_name'または'assignee'が存在しないならば、エラーが返される。
【００４５】
この手続きはまず、'assignee'および'group_name'を大文字に転換し、次に、以下の三つの規準にマッチするATTRIBUTESテーブル中のすべてのレコードを削除する。
ａ．ATTRIBUTE_NAME列中の値が"ASSIGNED_GROUP"である。
ｂ．ATTRIBUTE_VALUE列中の値が'group_name'にマッチする。
ｃ．ASSIGNEE列中の値が'assignee'にマッチする。
【００４６】
コマンドNo.６
attr_utils.rescind_attribute('assignee'、'attribute_name')
'assignee'：属性グループ名。これは、属性グループでなければならない。
'attribute_name'：属性の名称
【００４７】
この手続きは、'assignee'から指定された'attribute_name'を除く。attribute_nameまたは割当て対象が存在しないか、attribute_nameが予約されているならば、エラーが返される。
【００４８】
この手続きはまず、'assignee'および'attribute_name'を大文字に転換し、次に、以下の両方の規準にマッチするATTRIBUTESテーブル中のすべてのレコードを削除する。
ａ．ASSIGNEE列中の値が"assignee"にマッチする。
ｂ．ATTRIBUTE  NAME列中の値が'attribute_name'にマッチする。
【００４９】
コマンドNo.７
attr_utils.update_attribute('assignee'、'attribute_name'、'attribute_value')
'assignee'：属性グループ名。これは属性グループでなければならない。
'attribute_name'：属性の名称
'attribute_value'：指定された属性の新たな値
【００５０】
この手続きは、特定された'assignee'および'attribute_name'に指定された'attribute_value'を更新する。attribute_nameまたは割り当て対象が存在しないか、attribute_nameが予約されているならば、エラーが返される。
【００５１】
この手続きはまず、'assignee'および'attribute_name'を大文字に転換し、次に、以下の両方の規準にマッチするすべてのレコードについてATTRIBUTE_VALUE列を'attribute_value'にセットすることにより、ATTRIBUTESテーブルを更新する。
ａ．ASSIGNEE列中の値が'assignee'にマッチする。
ｂ．ATTRIBUTE_NAME列中の値が'attribute_name'にマッチする。
【００５２】
前記コマンドを使用してATTRIBUTESテーブルが維持される。コマンドNo.１および２で示すように、好ましい実施態様では、ATTRIBUTESテーブル中でいくつかの予約されたATTRIBUTE_NAMEを使用して、システム内で使用される特定の情報を識別する。"APP_CODE"のATTRIBUTE_NAMEが自動的に属性グループに割り当てられて、そのグループに対応するアプリケーションを特定する。"ASSIGNED_GROUP"のATTRIBUTE_NAMEを使用して、属性を属性グループに割り当て、属性グループおよび割り当て対象グループを割り当て対象グループに割り当て、属性グループおよび割り当て対象グループをユーザに割り当てる。"ASSIGNEE_TYPE"のATTRIBUTE_NAMEを使用して、グループが、属性グループであるのか、割り当て対象グループであるのかを識別する。手続きは、ATTRIBUTE_NAMEパラメータを有効にして、それらが予約されていないことを立証し、予約されているATTRIBUTE_NAMEが使用されようとするならば、エラーを返す。
【００５３】
一例として、図２の割り当て対象グループ１４２に関するATTRIBUTESテーブルの一部は、以下の表４のように見える。
【００５４】
【表４】
0004571746.tif 000005
【００５５】
属性グループが特定のアプリケーションに限定されない、前記で論じた本発明の代替態様では、create_group手続きは'app_code'入力を必要とせず、APP_CODE属性はATTRIBUTESテーブル中で維持されないであろう。しかし、アプリケーションに対する大規模アクセスは、APP_CODEを直接ユーザに割り当てるさらなるテーブルを使用して制御することができる。ユーザが特定のAPP_CODEを割り当てられないならば、対応するアプリケーションはユーザにとって完全に利用不可能になるであろう。
【００５６】
親子階層
一つの割り当て対象グループに多数の属性グループおよび／または割り当て対象グループを割り当てる能力は、しばしば、同じ属性に関して重複し、反復し、さらには競合する値をグループまたはユーザに割り当てる結果をもたらす。たとえば、図２の一番上に示す割り当て対象グループ１００は、図中のすべての属性を含み、したがって、前記表２に示すように、同じアプリケーションＤＥＦの場合で、DATA_SCOPE属性について異なる値Ｂ、ＣおよびALLを含み、USER_LEVEL属性について異なる値REGULARおよびRESTRICTEDを含む。この理由のため、好ましい実施態様では、属性値ごとに「親値」が割り当てられて、たとえばDATA_SCOPE属性の値Ｂが親値ALLに割り当てられるような属性階層則が設けられる。実際には、ユーザの割り当てられた属性が呼び出され、同じ属性およびアプリケーションに関して親値および子値が存在する場合、親が維持され、子が捨てられる。加えて、反復値は捨てられる。
【００５７】
親子割り当ては、三つの列ATTRIBUTE_NAME、CHILD_VALUEおよびPARENT_VALUEを有するテーブルATTRIBUTE_LEVELSの中に維持される。ATTRIBUTE_NAMEは、属性の名称（たとえばDATA_SCOPE）である。CHILD_VALUEは、属性の実効値（たとえばＣ）である。PARENT_VALUEは、実効値がサブセットである値（たとえばALL）である。実際の属性値が階層中の最高値、たとえばALLである場合、割り当てられる親値はNULLである。
【００５８】
ATTRIBUTE_LEVELSテーブルは、４種の基本コマンドを使用して維持される。これらのコマンド例を、Oracle（登録商標）データベース環境で使用するためのOracle（登録商標）手続きとして以下に記す。当業者は、他のデータベース環境の場合に類似したコマンドを導出しうることを理解するであろう。以下の記述では、パラメータを一重引用符で示し、リテラル列を二重引用符で示す。
【００５９】
コマンドNo.１
attr_utils.add_attr_level('attribute_name'、'child_value'、'parent_value')
'attribute_name'：属性の名称
'child_value'：指定された'attribute_name'の子値
'parent_value'：指定された'attribute_name'に指定された'child_value'の親値
【００６０】
この手続きは、指定されたパラメータについて新たな属性レベルを加える。'child_value'が指定された'attribute_name'の最高レベルの権限を有するならば、'parent_value'は"NULL"であることができる。親値がヌルではなく、存在しないならば、エラーが返される。
【００６１】
この手続きは、まず、'attribute_name'を大文字に変換し、次に、以下の列値を有するレコードをATTRIBUTE_LEVELSテーブルに挿入する。
ATTRIBUTE_NAME='attribute_name'にセットし、
CHILD_VALUE='child_value'にセットし、
PARENT_VALUE='parent_value'にセットせよ。
【００６２】
コマンドNo.２
attr_utils.update_attr_level('attribute_name'、'child_value'、'parent_value')
'attribute_name'：属性の名称
'child_value'：指定されたattribute_nameの子値
'parent_value'：指定された属性名に指定された子値の親値
【００６３】
この手続きは、指定されたパラメータの親値を更新する。'child_value'が指定された'attribute_name'の最高レベルの権限を有するならば、'parent_value'は"NULL"であることができる。親値がヌルではなく、存在せず、また、attribute_nameとchild_valueとの組み合わせが存在しないならば、エラーが返される。
【００６４】
この手続きは、まず、'attribute_name'を大文字に変換し、次に、以下の両方の規準にマッチするすべてのレコードについてPARENT_VALUE列値を'parent_value'にセットすることにより、ATTRIBUTE_LEVELSテーブルを更新する。
ａ．ATTRIBUTE_NAME列中の値が'attribute_name'にマッチする。
ｂ．CHILD_VALUE列中の値が'child_value'にマッチする。
【００６５】
コマンドNo.３
attr_utils.delete_attr_levels('attribute_name'、'child_value')
'attribute_name'：属性の名称
'child_value'：指定されたattribute_nameの子値
【００６６】
この手続きは、指定されたパラメータの属性レベルおよびすべての子属性レベルを削除する。組み合わせが存在しないならば、エラーが返される。
【００６７】
この手続きは、まず、'attribute_name'を大文字に変換し、次に、'attribute_name'および'child_value'の指名された対の「子」であるATTRIBUTE_LEVELSテーブル中のすべてのレコードを削除する。一例として、以下のＳＱＬステートメントを使用してこれら最初の２ステップを達成することができる。
【００６８】
0004571746.tif 000006
【００６９】
この手続きは、以下の規準の両方にマッチするATTRIBUTE_LEVELSテーブル中のすべてのレコードを削除する。
ａ．ATTRIBUTE_NAME列中の値が'attribute_name'にマッチする。
ｂ．CHILD_VALUE列中の値が'child_value'にマッチする。
【００７０】
コマンドNo.４
attr_utils.delete_all_levels('attribute_name')
'attribute_name'：属性の名称
【００７１】
この手続きは、指定されたattribute_nameのすべての属性レベルを削除する。attribute_nameが存在しないならば、エラーが返される。
【００７２】
この手続きは、まず、'attribute_name'を大文字に変換し、次に、ATTRIBUTE_NAME列中の値が'attribute_name'にマッチするATTRIBUTE_LEVELSテーブル中のすべてのレコードを削除する。
【００７３】
前記コマンドを使用してATTRIBUTE_LEVELSテーブルが維持される。一例として、前記で論じたサンプル属性のATTRIBUTE_LEVELSテーブルは、以下の表５のように見える。
【００７４】
【表５】
0004571746.tif 000007
【００７５】
表５にしたがって、ALLのDATA_SCOPEが同じアプリケーションについて同じユーザに割り当てられるならば、値Ａ、ＢまたはＣを有するDATA_SCOPE属性の割り当ては捨てられる。同様に、より低いUSER_LEVEL値の割り当てが、割り当てられる最高値の代わりに捨てられる。
【００７６】
好ましくは、属性値が、ATTRIBUTESテーブルに割り当てられているが、ATTRIBUTE_LEVELSテーブル中で規定されていないならば、それは、NULLの親値を有し、その親値として割り当てられた値を有する他の値を有さずに、ATTRIBUTE_LEVELSテーブル中で規定されているかのように処理される。
【００７７】
より低レベルの割り当てられた値の完全なセットをより高レベルの値によって置き換えることができることを認識することにより、さらなる最小化を得ることができる。たとえば、Ａ、ＢおよびＣのDATA_SCOPE値が割り当てられるならば、システムは値ALLを返すことができる。この最小化は、より低レベルの値の完全なセットがより高レベルの値と同じものを実際に表す場合にのみ実施すべきである。理由は、より高レベルの値は、より低レベルの値の合計よりも大きな値を表すことが可能であるからである。
【００７８】
ユーザ属性システムの操作
本発明のユーザ属性システムの使用例の以下の説明に関連して図３を参照する。本発明の好ましい実施態様によると、データベース環境中で実行されるアプリケーションに対するアクセスは、初期グラフィカルユーザインタフェース（ＩＧＵＩ）によって制御される。ＩＧＵＩの例は、ウェブサイトホームページおよびローカルエリアネットワークスタートアップページを含む。
【００７９】
しかし、アプリケーションに対してアクセスする前に、ユーザは通常、ボックス２０１で示すように、コンピュータシステムにログインし、そのとき、コンピュータシステムは、ログインが正常に完了するならば、そのユーザを認識する。ボックス２０４で、ＩＧＵＩは、ユーザが利用可能であるアプリケーションを検索する。好ましい実施態様では、ＩＧＵＩは、矢印２０５で、ユーザのためのグループ割り当てを含むATTRIBUTESテーブルにアクセスすることによってこれを実施する。前記で論じたように、好ましい実施態様では、グループ割り当ては属性グループ割り当てを含み、この属性グループ割り当ては逆に、利用可能なアプリケーションの詳細を含む。Oracle（登録商標）データベースシステムでは、かなりのサイズになりうるATTRIBUTESテーブル全体をサーチするのではなく、繰り返し使用される可能性のある、頻繁に使用されるサーチの結果（たとえば特定のユーザの属性）を含む「ビュー」を生成することができる。属性が特定のアプリケーションに制限されない代替態様では、特定のユーザに利用しうるアプリケーションを別のテーブルに格納したり、別のテーブルから検索したりすることができる。
【００８０】
矢印２０５で、ＩＧＵＩはまた、APP_CODE列を含む有効なアプリケーションのAPPSテーブルにアクセスして、ＩＧＵＩが利用可能なアプリケーションをユーザに表示するボックス２０７で、どの文字列をユーザに表示するのかをＩＧＵＩに教える。ボックス２１０で、ユーザは、利用可能なアプリケーションの一つを選択する。ボックス２１３で、ＩＧＵＩは、矢印２１４でATTRIBUTESテーブルにアクセスし、選択したアプリケーションのためのユーザの属性を検索する。同じくOracle（登録商標）データベースシステムでは、Oracle（登録商標）ビューを使用して属性を検索してもよい。加えて、ＩＧＵＩは、ATTRIBUTE_LEVELSテーブルにアクセスして属性の数を減らすこともできる。
【００８１】
矢印２１５で、ＩＧＵＩは、該当する属性をアプリケーションにパスし、ボックス２１６で、アプリケーションを実行してアプリケーションがそれらの属性を強制する。ユーザが、属性によって規定されたアクセスの制限を超えようとするならば、エラーまたは警告を出すこともできる。
【００８２】
代替態様では、アプリケーションが、ＩＧＵＩの支援を受けずに属性を直接検索し、属性を強制してもよいことが当業者によって理解されよう。
【００８３】
ビュー
前記で論じたように、Oracle（登録商標）ビューを本発明で使用して、テーブルからレコードを検索し、編成することもできる。以下は、本発明の実現に役立つことがわかった１２種のビューのリストである。各ビューおよびＳＱＬ例の説明を記載する。
【００８４】
ビューNo.１
V_ATTRIBUTE_APP_CODES
このビューは、ユーザ属性システムにおけるすべての個別のアプリケーションコードセットアップのリストを返す。このビューは、ATTRIBUTE_NAMEが'APP_CODE'の予約されたATTRIBUTE_NAMEであるレコードについてDISTINCT文節を用いてSELECTを実行する。
ＳＱＬ例
【００８５】
0004571746.tif 000008
【００８６】
ビューNo.２
V_ATTRIBUTE_GROUPS_ATTR
このビューは、すべての個別の属性グループのリストを返す。このビューは、ATTRIBUTE_NAMEが'ASSIGNEE_TYPE'の予約されたATTRIBUTE_NAMEであり、ATTRIBUTE_VALUEが'ATTRIBUTE_GROUP'であるレコードについてDISTINCT文節を用いてSELECTを実行する。
ＳＱＬ例
【００８７】
0004571746.tif 000009
【００８８】
ビューNo.３
V_ATTRIBUTE_GROUPS_ASSIGN
このビューは、すべての個別の割り当て対象グループのリストを返す。このビューは、ATTRIBUTE_NAMEが'ASSIGNEE_TYPE'の予約されたATTRIBUTE_NAMEであり、ATTRIBUTE_VALUEが'ASSIGNEE_GROUP'であるレコードについてDISTINCT文節を用いてSELECTを実行する。
ＳＱＬ例
【００８９】
0004571746.tif 000010
【００９０】
ビューNo.４
V_ATTRIBUTE_USERS
このビューは、すべての個別の属性ユーザのリストを返す。このビューは、ASSIGNEEがOracle  Data  DictionaryテーブルALL＿USERSで見られるUSERNAMEに等しいレコードについてDISTINCT文節を用いてSELECTを実行する。
ＳＱＬ例
【００９１】
0004571746.tif 000011
【００９２】
ビューNo.５
V_ATTRIBUTE_GROUPS_ALL
このビューは、システム中のすべての個別のグループのリストを返す。これは、属性およびAssigneeの両グループを含む。このビューは、ASSIGNEEが属性ユーザではないレコードについてDISTINCT文節を用いてSELECTを実行する。
ＳＱＬ例
【００９３】
0004571746.tif 000012
【００９４】
ビューNo.６
V_USER_GROUPS
このビューは、現在Oracleに接続されたユーザに割り当てられたすべてのグループのリストを返す。結果は、ユーザに直接的に割り当てられたグループおよびユーザに間接的に割り当てられたグループを含む。すなわち、ユーザに割り当てられたASSIGNEE  GROUPSに割り当てられたグループである。このビューは、CONNECT  BY文節を利用して、ファミリツリータイプの問い合わせを実行する。
ＳＱＬ例
【００９５】
0004571746.tif 000013
【００９６】
ビューNo.７
V_USERS_ATTR_APPS
このビューは、現在Oracleに接続されているユーザに割り当てられたすべての属性と、対応するAPP_CODEとのリストを返す。このビューは、ユーザに割り当てられたグループ（V_USER_GROUPS）のリスト、ATTRIBUTESテーブルおよびATTRIBUTE_GROUPSのリストを、対応するAPP_CODE値（V_ATTRIBUTE_APP_CODES）と合わせる。
ＳＱＬ例
【００９７】
0004571746.tif 000014
【００９８】
ビューNo.８
V_USER_ATTR_HIGHEST_VALUES
このビューは、対応するATTRIBUTE_NAMEの最高レベルのATTRIBUTE_VALUEのリストを返す。このビューは、以下に論じるV_USER_ATTRIBUTESビューがこれらの個別の値のリストを検索することができるよう、複製のエントリを含むことができる。このビューは、現在のユーザに割り当てられた属性ごとのAPP_CODE、ATTRIBUTE_NAMEおよびATTRIBUTE_VALUEを関数ATTR_UTILS.HIGHEST_VALUEにパスする。関数は、問い合わせの一部として実行できることと、値を返すことを除き、手続きと同じである。
【００９９】
ここで、関数は、現在ユーザに割り当てられている最高の親値を返す。このビューの場合、この関数の記述はＳＱＬ例に準ずる。
ＳＱＬ例
【０１００】
0004571746.tif 000015
【０１０１】
ATTR_UTILS.HIGHEST_VALUE関数は、３種の入力APP_CODE、ATTRIBUTE_NAMEおよびATTRIBUTE_VALUEを必要とする。関数はまず、所与のユーザに割り当てられたすべての属性値APP_CODEおよびATTRIBUTE_NAMEからなる内部属性値テーブルをロードする。関数は、既存のビューの一つを使用してこれを実施することができる（すなわち、V_USER_ATTR_VALUE_LEVELS）。関数は次に、現在の属性値を使用し、この値の親レコードのすべてを見いだす。関数は、以下のようなＳＱＬ問い合わせを使用する。
【０１０２】
0004571746.tif 000016
【０１０３】
そして、関数は、各親値を属性値テーブル中のレコードと比較して、他の割り当てられた属性値の一つが親レコード、すなわち現在の属性値の親、祖親などであるかどうかを決定する。親レコードであるならば、より高レベルの属性値が返される。そうでなければ、現在の属性値が返される。
【０１０４】
ビューNo.９
V_ATTR_VALUE_LEVELS
このビューは、ATTRIBUTE_NAME、関連するATTRIBUTE_VALUEおよび対応するレベルの値のリストを返す。たとえば、最高レベルのATTRIBUTE_VALUEは１のATTRIBUTE_LEVELを有し、その値の子は２の値を有する。このビューは、CONNECT  BY文節を使用するファミリーツリータイプの問い合わせを実行する。
ＳＱＬ例
【０１０５】
0004571746.tif 000017
【０１０６】
ビューNo.１０
V_USER_ATTR_VALUE_LEVELS
このビューは、ユーザに割り当てられたすべての属性およびそれらの対応するレベルのリストを返す。このビューは、現在Oracleに接続されているユーザに割り当てられた属性のリスト（V_USER_ATTR_APPS）と、属性およびそれらの対応するレベルのリスト（V_ATTR_VALUE_LEVELS）とを合わせる。
ＳＱＬ例
【０１０７】
0004571746.tif 000018
【０１０８】
ビューNo.１１
V_USER_APP_CODES
このビューは、現在のユーザが割り当てられたすべての個別のAPP_CODEのリストを返す。このビューは、CONNECT  BY文節を使用するファミリーツリータイプの問い合わせを実行する。
ＳＱＬ例
【０１０９】
0004571746.tif 000019
【０１１０】
ビューNo.１２
V_USER_ATTRIBUTES
このビューは、ユーザに割り当てられたすべての属性と、対応するATTRIBUTE_NAMEの最高レベルのATTRIBUTE_VALUEのみとのリストを返す。このビューは、V_USER_ATTR_HIGEST_VALUESに対してSELECT  DISTINCTを実行する。(V_USER_ATTR_VALUE_LEVELS)。
ＳＱＬ例
【０１１１】
0004571746.tif 000020
【０１１２】
Oracle（登録商標）環境では、ATTRIBUTESおよびATTRIBUTE_LEVELSテーブル中のデータが正しく維持されることを保証するために、Oracle（登録商標）手続きのみを使用してユーザ属性に対する維持を実行することが好ましい。これは、ユーザ属性システム中の種々のオブジェクト、たとえばテーブル、ビュー、手続きおよび関数に対するアクセスを制限することによって保証することができる。読み取りのみの権限が、ATTRIBUTESおよびATTRIBUTE_LEVELSテーブルならびにビューのすべてに与えられるべきである。これらのテーブルを維持するために使用されるOracle（登録商標）手続きにおける実行権限は、ユーザ属性管理責任者のみに与えられるべきである。これは、権限のないユーザが属性又は属性レベルを操作することができないよう保証する。
【０１１３】
いくつかの代表的な例および実施態様を参照して本発明を説明したが、これらは、属性発明の範囲または本質を限定するものとして解釈されてはならない。実際には、添付の請求の範囲で表す本発明の範囲を逸することなく、当業者によって多くの変形を加えることができる。
【図面の簡単な説明】
【図１】  本発明のシステムの例を示すブロック図である。
【図２】  本発明のユーザ属性システムグループ分け方法の例を示すブロック図である。
【図３】  本発明の方法の一つの実施態様を示す流れ図である。
【図１】
0004571746.tif 000021
【図２】
0004571746.tif 000022
【図３】
0004571746.tif 000023