(57)【特許請求の範囲】
【請求項１】
複数のサブオブジェクトによって形成されるオブジェクトを走査するオブジェクト走査装置であって、
各サブオブジェクトを走査する権限を持つ対象を識別する情報をそれぞれ含む各サブオブジェクトの走査権と共にオブジェクトを記憶する記憶手段と、
該オブジェクトに対するアクセスを要求している対象を同定する少なくとも１つの走査ＩＤを記憶する走査ＩＤリスト手段と、
該オブジェクトの走査時に、該走査ＩＤリスト手段に記憶された走査ＩＤと、当該オブジェクトに対して前記記憶手段が記憶する走査権に基づいて、走査すべきサブオブジェクトを選択する走査オブジェクト選択手段と、
前記走査オブジェクト選択手段の選択したサブオブジェクトを当該オブジェクトに対するアクセスの結果として出力する出力手段とからなることを特徴とするオブジェクト走査装置。
【請求項２】
前記記憶手段は、各オブジェクトをアクセスする権限を持つ対象を識別する情報をそれぞれ含む各オブジェクトのアクセス権と共に前記オブジェクトを記憶し、前記走査オブジェクト選択手段は前記走査ＩＤで同定された対象に対するアクセス権が前記記憶手段に記憶されている時にサブオブジェクトを選択することを特徴とする請求項１記載のオブジェクト走査装置。
【請求項３】
前記走査ＩＤで同定された対象のアクセス権により前記オブジェクトにアクセスし、前記出力手段が該オブジェクトに対するアクセスの結果として出力したサブオブジェクトを使って該オブジェクトを操作するプログラムを実行するプロセッサ手段を有することを特徴とする請求項２記載のオブジェクト走査装置。
【請求項４】
前記記憶手段は、各オブジェクトをアクセスする権限を持つ対象を識別する情報をそれぞれ含む各オブジェクトのアクセス権と共に前記オブジェクトを記憶し、更に前記走査オブジェクト選択手段が選択したサブオブジェクトについて前記走査ＩＤで同定された対象に対するアクセス権の有無を検証するアクセス権検証手段を有することを特徴とする請求項１記載のオブジェクト走査装置。
【請求項５】
前記走査ＩＤで同定された対象のアクセス権により前記オブジェクトにアクセスし、前記出力手段が該オブジェクトに対するアクセスの結果として出力したサブオブジェクトを使って該オブジェクトを操作するプログラムを実行するプロセッサ手段を有することを特徴とする請求項４記載のオブジェクト走査装置。
【請求項６】
前記記憶手段は前記オブジェクトを、リンクで関連付けられた複数のサブオブジェクトから形成されるオブジェクトとして記憶することを特徴とする請求項１記載のオブジェクト走査装置。
【請求項７】
前記記憶手段は前記オブジェクトを、該オブジェクトのサブオブジェクトを走査する手順を示す走査制御データと共に記憶することを特徴とする請求項１記載のオブジェクト走査装置。
【請求項８】
前記走査ＩＤリスト手段が記憶する走査ＩＤを変更する走査ＩＤリスト変更手段を有することを特徴とする請求項１記載のオブジェクト走査装置。
【請求項９】
前記走査ＩＤリスト変更手段は前記走査ＩＤリスト手段が記憶する走査ＩＤの内で、どのサブオブジェクトの走査権も無いものを削除することを特徴とする請求項８記載のオブジェクト走査装置。
【請求項１０】
前記走査オブジェクト選択手段が選択したサブオブジェクトの一つは更なるサブオブジェクトを含むもので、前記記憶手段は各更なるオブジェクトを走査する権限を持つ対象を識別する情報をそれぞれ含む該更なるサブオブジェクトの走査権と共に該更なるサブオブジェクトを記憶し、前記走査ＩＤリスト変更手段は前記走査ＩＤリスト手段が記憶する走査ＩＤの内で、どの該更なるサブオブジェクトの走査権も無いものを。該サブオブジェクトの一つを走査する時に削除することを特徴とする請求項８記載のオブジェクト走査装置。
【請求項１１】
前記各サブオブジェクトの走査権は該各サブオブジェクトを走査出来るとされる者に該各サブオブジェクトの走査が許可されるようになるところの該各サブオブジェクトへのアクセスの種類も示すことを特徴とする請求項１記載のオブジェクト走査装置。
【請求項１２】
前記オブジェクトを各サブオブジェクトの走査権を指定してメールとして作成し、作成したメールをメールトアドレスを指定して転送するメール作成手段と、
指定されたメールアドレスに応じて該メール作成手段から転送されたメールを受信し、前記出力手段が出力するサブオブジェクトを受信したメールの内容として取り出すメール受信手段と、
からなるメールツールを有することを特徴とする請求項１記載のオブジェクト走査装置。
【請求項１３】
複数のサブオブジェクトによって形成されるオブジェクトを走査するオブジェクト走査方法であって、
各サブオブジェクトを走査する権限を持つ対象を識別する情報をそれぞれ含む各サブオブジェクトの走査権と共にオブジェクトを記憶するステップと、
該オブジェクトに対するアクセスを要求している対象を同定する少なくとも１つの走査ＩＤを記憶するステップと、
該オブジェクトの走査時に、当該オブジェクトにおいて該走査ＩＤで同定された対象に対して付与された走査権に基づいて、走査すべきサブオブジェクトを選択するステップと、
前記選択するステップにおいて選択されたサブオブジェクトを当該オブジェクトに対するアクセスの結果として出力するステップとからなることを特徴とするオブジェクト走査方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、計算機のファイル・システム、仮想記憶空間、データ・ベースなどの構造化された記憶手段のオブジェクト走査装置に関するものである。
【０００２】
【従来の技術】
従来、リンクで関連突けられた複数のオブジェクトを走査する方法には、ハイパー・テキストのように順次リンクをたどる方法や、計算機のファイル・システムのように与えられた名前から該当するオブジェクト群を検索して呈示する方法がある。また、ユーザによってアクセス可能なオブジェクトを限定する方法や、一時的にアクセス権を変更する方法なども知られている。
【０００３】
また、これらの方法を組み合わせることによってアクセス可能なオブジェクトを一般的に表現することやリンクで関連付けられた複数のオブジェクトを連続した一つのデータとして読み出すことも従来から知られている。
【０００４】
一方、最近では、これらの従来技術を組み合わせ、複数のオブジェクトを組み合わせて階層的に大きなオブジェクトを構成する際に、アクセス権の情報を各サブ・オブジェクトに持たせることによって、パラメータを変えて走査の手順を変え、一つの組み合わせオブジェクトを見かけ上何種類もの組み合わせオブジェクトのように表現することが試みられている。
【０００５】
以下に、このような考えのものについて説明する。
【０００６】
今、高橋さんがグループＡに属する名簿ファイルを作成しているとする。
【０００７】
図２０は名簿本体を一つのオブジェクトとして作成した状態を示し、１２１は名簿本体を示すオブジェクトである。この例ではファイル名が無いものが示されているが名前が付いていてもかまわない。
【０００８】
１２１１は、オブジェクト１２１のオーナーのＩＤを示している。ここに示された番号が高橋さんであることは、図２１のＩＤ表１３１の対応する欄１３１１を参照することにより知ることができる。１２１２はオブジェクト１２１のグループであり、これがグループＡであることは同様にＩＤ表１３１の対応する欄１３１２から知ることができる。１２１３はオブジェクト１２１オーナーに対するアクセス権である。ＲＤ、ＷＲ、ＥＸの各フィールドはそれぞれ、読み出し、書き込み、実行の権限を示している。このオブジェクト１２１は単なるデータで、プログラムではないから実行はできない。ファイルのオーナーは当然読み出しも書き込みも出来るからＲＤとＷＲは１であり、ＥＸは０になっている。１２１４はオブジェクト１２１のグループに対するアクセス権である。グループのデータであるから、読み出しは可能でＲＤが１となっているが、データの改ざんを防ぐために書き込みは不可能でＷＲが０となっている。１２１５はオブジェクト１２１のその他の人に対するアクセス権である。グループの名簿は機密性があり、読み出しも許可しないので、ＲＤが０になっている。そして、１２１６はオブジェクト１２１のデータ本体であり、名簿のデータが記入されている。現実にはここにデータ本体を記入するのではなく、データ本体へのポインタやデータ本体の記入されたブロックのＩＤなどを記入する場合もあるがその例はここでは特に示さない。
【０００９】
次に、このような名簿ファイルを管理するために図２２に示すようなコメントを記入したオブジェクト１４１を作成する。ここで、１４１１はオーナーのＩＤ、１４１２はグループのＩＤである。このファイルのグループはグループＩＤ１４１２に登録された“３２０”からグループＡとなる。このことはＩＤ表１３１の対応するフィールド１３１２からわかる。また、１４１３はオブジェクト１４１のオーナーに対するアクセス権であり、上述の１２１４と同様である。１４１４、１４１５はそれぞれこのオブジェクトのグループおよびその他の人に対するアクセス権である。このオブジェクトの内容は、他人にはもちろんのこと、グループＡのメンバーにもみられてはならないから、ＲＤが共に０になっていることが図２０のオブジェクト１２１の場合とは異なる。
【００１０】
このようにして各オブジェクトごとに異なるアクセス許可を与えることは、従来から広く行われてきた。近年では、この例のような複数のオブジェクトを一つのファイルのように扱うことが試みられている。それを例示したのが図２３である。ここで、オブジェクト１５１はオブジェクト１２１とオブジェクト１４１とを関連付け、１つの組み合わせオブジェクトを表現するためのオブジェクトである。
【００１１】
このオブジェクト１５１にはオブシェクト名１５１１が付いている。これは一般の計算機のファイル・システムにおけるファイル名に相当するものである。また、１５１２はオーナーのＩＤ、１５１３はグループのＩＤ、１５１４はこのオブジェクトのオーナーに対するアクセス権をそれぞれ示している。このアクセス権については、今後名簿に書かれたデータやコメントを変更することはあるが、この「グループＡ名簿」という名簿自体の構造を変更する必要はないから、オーナーに対しても書き込みを不可としてあるためＷＲは０である。１５１５はオブジェクト１５１のグループに対するアクセス権である。１５１６はオブジェクト１５１のその他の人に対するアクセス権である。その他の人に名簿を見られてはならないが、この「グループＡ名簿」というファイルがグループＡの名簿本体とそれに対するコメントから成っているということを隠す理由は特にないから、読み出しを許可している。１５１７はオブジェクト１５１がサブ・オブジェクトを持つことを示すビットであり、１になっている。サブ・オブジェクトをいくつ持つかは、サブ・オブジェクト数フィールド１５１８の内容を読むと２個であることがわかる。２個のサブ・オブジェクトが何であるかは、１番目のサブ・オブジェクトのＩＤ１５１９および２番目のサブ・オブジェクトのＩＤ１５２０を見ればわかる。これらのＩＤはそれぞれサブ・オブジェクト１２１及び１４１を示している。
【００１２】
このようにして複数のオブジェクトを構成することにより、高橋さん（ＩＤ１２８  番）が「グループＡ名簿」を表現しているオブジェクト１５１を読むと、グループＡ名簿本体のデータの格納されたサブ・オブジェクト１２１および、コメントの記入されたサブ・オブジェクト１４１があることがわかり、また、それらサブ・オブジェクトはいずれも高橋さん（ＩＤ１２８  番）にアクセス権があるから、アクセスすることができる。
【００１３】
一方、グループＡ（ＩＤ３２０  番）に属する他の人が「グループＡ名簿」というファイルを読むと、グループＡの名簿本体のデータの格納されたサブ・オブジェト１２１の内容は読むことができるが、コメントの記入されたサブ・オブジェクトを読もうとしても、アクセス権がないから、読むことはできない。
【００１４】
なお、オブジェクト１５１の他の人に対するアクセス権１５１６のＲＤは１であるから、このオブジェクト１５１をたどってオブジェクト１２１およびオブジェクト１４１を走査することはグループ以外の人にもできることになるが、実際にはオブジェクト１２１およびオブジェクト１４１において、その他の人に対する読み出し権を出していないから、名簿のデータが読まれてしまうということは起こらない。
【００１５】
このような方法を用いることにより、ユーザごとにオブジェクトの全部または一部分だけをアクセス可能とすることが実現できる。
【００１６】
しかし、高橋さん（ＩＤ１２８  番）が読むとグループＡ名簿はコメント付きのひとつのファイルであるように見え、その他のグループＡの人（ＩＤ３２０  番）が読むと、コメント無しのファイルであるように見える、といった柔軟な表現をすることはできない。
【００１７】
また、仮にそういった表現が可能になる機構を用意しても、次のような問題点が生じる。
【００１８】
いま、名簿のデータを用い、それを整形して表形式で印刷するようなプログラムがある場合、プログラムは、名簿にはコメントがないものと考えて作成されているものとする。そして、このプログラムをグループＡの人が使えるように考えて作成した場合、高橋さん（ＩＤ１２８  番）がこのプログラムを実行すると、プログラムが必要としていないコメントに対してもアクセス権があるため、読み出すことができ、このプログラムが正常に動作しないことがある。すなわち、プログラムは「グループＡ」という権限で名簿ファイルを読み出そうとしているにもかかわらず、それよりも権利の強い「高橋さん」という権限で名簿ファイルを読み出してしまうことがある。
【００１９】
そこで、こういった状況を回避するのに最もよく使われる方法の一つとして、プログラムの実行と同時にアクセス権を変更するＳＵＩＤ（ＵＳＰ  ４，１３５，２４０  ）がある。このＳＵＩＤはＯＷＮＥＲ  ＩＤとしての権限を変更するためのものであるので、そのままではこの問題の解決にはならないが、ＳＵＩＤに多少の応用を加えることによって実現することができる。以下その解決例を示す。
【００２０】
図２４に示すオブジェクト１６１は名簿整形用の一般プログラムを格納したオブジェクトであり、図２５に示すオブジェクト１７１は、同様に名簿整形用のプログラムである。これら図２４と図２５では、それぞれ同一部分には同一符号を付している。
【００２１】
この場合、オブジェクト１６１において、ＳＡＩＤ（ｓｅｔ  ａｃｃｅｓｓ  ｉｄ  ）１６１１は何も定義されていないので、オブジェクト１６１に記述されたプログラムは通常動作することを意味している。ここで１６１３はオーナーＩＤ、１６１４はグループのＩＤである。また、１６１５と１６１６はそれぞれこのオブジェクトのオーナーおよびグループに対するアクセス権である。さらに１６１７はその他の人のアクセス権で、グループＡ以外の人は実行することができない。そして、１６１８は実行プログラムの本体である。この実行プログラム１６１８は名簿データとしてオブジェクト１５１を用いている。
【００２２】
このようにしても、実行プログラム１６１８を実行した場合、高橋さん（ＩＤ１２８  ）以外の人が実行すると期待した結果が得られるが、高橋さんが実行すると、このプログラムが読むはずでなかったオブジェクト１４１のコメントも読んでしまい、正しく動作しない場合がある。
【００２３】
これに対し、図２５のオブジェクト１７１はオブジェクト１６１とよく似ているが、ＳＡＩＤ１６１２の設定が異なる。ＳＡＩＤ１６１２には３２０番というＩＤがセットされている。これにより、このオブジェクト１７１を高橋さんが実行すると、高橋さんの本来のアクセス権である実行者としての権利を放棄し、３２０番という権利のみが使えるようになる（この動作はＳＵＩＤの仕組みを応用したものである）。
【００２４】
このようなオブジェクト１７１の実行プログラム１６１９では、データとして名簿のオブジェクト１５１およびそのサブ・オブジェクトとしてオブジェクト１２１、オブジェクト１４１をアクセスする場合のアクセス権としては３２０番が使われるので、プログラム１６１９を誰が実行してもアクセス可能なデータは同一になり、プログラム１６１９は期待通りの動作をする。
【００２５】
このような従来の方法では、プログラムと、それが使うデータとを関連付けることにより、特殊なアクセス権によるオブジェクト走査を可能としているが、この方法によると、プログラムにＳＡＩＤを付ける権利が不明確であることに問題がある。すなわち、容易にＳＡＩＤを付けることが出来ると、そのプログラムを使うことにより任意のアクセス権を得ることができ、オブジェクトの持っているアクセス権が意味を為さなくなってしまうことである。
【００２６】
したがって、ＳＡＩＤを付ける権限を別の方法で管理しなければならないのであるが、従来それを解決する優れた方法は行われていなかった。例えば、ルートという特権ユーザにのみＳＡＩＤを付ける権限を与えるといった方法でこの問題を回避していた。
【００２７】
本来、オブジェクトのアクセス権を設定する権利は原則としてそのオブジェクトのオーナーにあるのであるから、その機構を特定のユーザによってしか実現できないというのは大きな制約となる。また、オブジェクト（データ）自体に持たせるはずのアクセス権が、他のプログラムの設定によってのみ制御できるという制約は非常に不便である。オブジェクトに対して当初期待したはずの保護機構が実現されない。
【００２８】
【発明が解決しようとする課題】
このように、従来のオブジェクト走査装置にあっては、オブジェクトに対する走査の条件としてアクセス権そのものを使わざるを得なかったために、オブジェクトの走査方法をその利用方法に応じて変化させることが困難であった。
【００２９】
そこで、この問題を解決するために、プログラムごとに特別のアクセス権を与える方法によりアクセス権を持つ部分を変更することが試みられているが、この方法においても実際にオブジェクトのどの部分をアクセスするかということについては、アプリケーション・プログラムのみに依存するため、作成したオブジェクトに対して、走査方法を規定することが非常に困難であった。また、オブジェクト全体を１つのファイルとみなしてアクセスする場合においても、アクセス権のみを用いたオブジェクトでは、実際にどのようなアクセスが行われるかということをオブジェクト自体に持たせることができなかった。
【００３０】
本発明は、上記事情に鑑みてなされたもので、アプリケーションの動作とは独立に一般ユーザが作成した各々のオブジェクトに対して柔軟なオブジェクト走査手順および走査権を与えることができるオブジェクト走査装置を提供することを目的とする。
【００３１】
【課題を解決するための手段】
本発明は、複数のサブオブジェクトによって形成されるオブジェクトを走査するオブジェクト走査装置にあって、誰が各サブオブジェクトを走査出来るかを示す各サブオブジェクトの走査権と共にオブジェクトを記憶するメモリ手段と、該オブジェクトに対するアクセスを要求しているユーザを同定する少なくとも１つの走査ＩＤを記憶する走査ＩＤリスト手段と、該オブジェクトの走査時に、該走査ＩＤリスト手段に記憶された走査ＩＤと、当該オブジェクトに対して前記記憶手段が記憶する走査権に基づいて、走査すべきサブオブジェクトを選択する走査オブジェクト選択手段と、上記走査オブジェクト選択手段の選択したサブオブジェクトを当該オブジェクトに対するアクセスの結果として出力する出力手段とにより構成されている。
【００３２】
又、本発明は、複数のサブオブジェクトによって形成されるオブジェクトを走査するオブジェクト走査方法であって、誰が各サブオブジェクトを走査出来るかを示す各サブオブジェクトの走査権の付与と共にオブジェクトを記憶するステップと、該オブジェクトに対するアクセスを要求しているユーザを同定する少なくとも１つの走査ＩＤを記憶するステップと、該オブジェクトの走査時に、当該オブジェクトにおいて該走査ＩＤで同定されたユーザに対して付与された走査権に基づいて、走査すべきサブオブジェクトを選択するステップと、前記選択ステップにおいて選択されたサブオブジェクトを当該オブジェクトに対するアクセスの結果として出力するステップとにより構成されている。
【００３３】
【作用】
この結果、本発明によれば、リンクで関連付けられた複数のオブジェクトの走査に際し、オブジェクトを走査する際の条件となる走査ＩＤリストをオブジェクトに定義された走査権データ・リストと照合して実行する。さらには、走査すべきオブジェクトを選択する際に、この選択方法に応じて走査ＩＤリストを書き替えるようになる。
【００３４】
これにより、それらオブジェクトの走査時の走査手順を定義して、走査すべきオブジェクトの選択方法に応じて走査ＩＤリストを定義し、またそれを走査時に動的に書き換えることもできるようになり、走査方法を柔軟に定義しつつ、オブジェクトの保護も容易に行なうことができる。又、複数のオブジェクトにより構成されたデータに対し、オブジェクト単位でのアクセス権利が定義できる。
【００３５】
【実施例】
以下、本発明の実施例を図面に従い説明する。
【００３６】
図１は第一の実施例の概略構成を示している。図において、１は仮想記憶管理部で、物理的な記憶装置への入出力を管理を容易にするための管理部である。
【００３７】
仮想記憶管理部１は、この装置の仮想記憶スペースに仮想的に格納されたオブジェクト１１を管理する。但し、仮想的に格納されるオブジェクトを持つことは本発明に必須のことではなく、公知の記憶管理手段で代用しても良い。又、オブジェクト１１は、リンク１０３で互いに関連づけたものであってもよい。
【００３８】
仮想記憶管理部１の管理するデータは、実際には物理メモリ２や二次記憶装置３に配置される。二次記憶装置３はハードディスク・ドライブやＣＤ−ＲＯＭ、ＩＣカードなどである。
【００３９】
ここで、二次記憶装置３に配置される理由は、パーシステント・オブジェクトとして半永久的に記憶するのが目的である場合と物理メモリ２のスワップ領域として利用される場合などがある。また、オブジェクト情報を提携して持ち歩くために配置する場合もある。
【００４０】
物理メモリ２はさらにキャッシュ・メモリなどを用いて階層化することもできるが、それについては一般的な手法を用いることとし、本実施例では説明を省略する。
【００４１】
また、仮想記憶管理部１は、入出力デバイス４にも接続されている。入出力デバイス４は、例えば、利用するオブジェクトのデータを実際に計算機に記憶することなく、必要に応じて電話回線や無線、ネットワークなどを介してあたかも仮想記憶空間内に常駐するかのように扱うためのものである。これについては単一仮想記憶の管理に関する一般的な手法を用いることとし、本実施例では説明を省略する。
【００４２】
さらに、プログラム記憶部６に蓄えられているプログラムを解釈実行し、仮想記憶管理部１に管理されるオブジェクトデータを処理する実行主体であるプロセッサ５がある。プロセッサ５内には、命令の実行途中に一時的に利用するレジスタ類、現在実行している命令のプログラム記憶部６での位置を示すためのプログラムカウンタ、スタックデータの先頭位置を示すスタックポインタなどが存在し、これら一連のデータを入れ替えることによってプログラムを実行し、必要に応じて仮想記憶管理部１に対し、必要なデータの読み出しおよび書き込みを要求する。
【００４３】
アクセス要求受付部７はプロセッサ５からのアクセス要求を受け付ける。これはデータの読み出し、書き込み、消去などあらゆるデータ処理要求を含む。引数検出部８およびアクセス要求の種類判定部９は、アクセス要求受付部７の受け付けた要求のそれぞれ引数および種類を判定する。受け付けたアクセス要求がオブジェクト読みだしの要求である場合には、その要求をオブジェクト読み出し実行部１０へ送る。その際、実行の引数は引数検出部８から送られる。
【００４４】
オブジェクト１１は一般に仮想記憶空間に存在するものであり、仮想記憶管理部１によって仮想的に記憶されている。なお、このオブジェクト１１は仮想記憶以外のいかなる記憶管理方法によって蓄えられていても、本特許の主旨は変わらない。
【００４５】
ここで言うオブジェクト１１とはあらゆるデータの集まりのことであり、データ・ファイルやプログラムはもちろん、プログラムが一時的に利用する作業用の構造体なども含まれる。また、各オブジェクト１１同士の中には、リンク１０３で関連付けられているものがある。
【００４６】
これにより複数のオブジェクト１１をまとめて一つのオブジェクトとして扱うこともでき、これもオブジェクトと呼ぶ。特に、複数のオブジェクトを一つのオブジェクトとして考えるとき、それを構成するオブジェクトをサブ・オブジェクトと呼ぶこともできる。
【００４７】
走査ＩＤリスト記憶部１２は走査ＩＤリストを管理している。走査ＩＤリストは実行主体（スレッド）ごとにあってもよいし、複数の実行主体で同一の走査ＩＤリストを共有していてもよい。同様にアクセス権記憶部１３はユーザのアクセス権を管理している。
【００４８】
ここに記述した各構成要素は、それを管理する特定のサーバーを持たせるなどの方法を使えば、必ずしも仮想記憶空間１に置く必要はない。
【００４９】
オブジェクト読み出し実行部１０においては、対象オブジェクト取出部１４が、指定されたオブジェクトを仮想記憶管理部１から読み出すことを指定し、得られた走査権データ・リストを記憶部１５に記憶し、また読み出したデータをオブジェクトとデータ読出部２０に送る。
【００５０】
走査権データ・リスト検出部１６は、走査権データ・リスト記憶部１５のデータをもとに走査権データ・リストを取り出し、走査オブジェクト選択部１９へ送る。
【００５１】
走査権ＩＤリスト検出部１７は、現在アクセスしているプロセスに関する走査ＩＤリストを走査ＩＤリスト記憶部１２より取り出し、アクセス権検証部１８は、現在アクセスしているプロセスにオブジェクトのアクセス権があるか否かをアクセス権記憶部１３のデータを基に検証する。
【００５２】
走査オブジェクト選択部１９は、アクセス権検証部１８、走査ＩＤリスト検出部１７、走査権データ・リスト検出部１６からの情報を基に、後に詳述する手順により、走査対象とするオブジェクトを適切に判断し、さらに必要となるオブジェクトの取り出しを対象オブジェクト取出部１４に要求する。
【００５３】
オブジェクト・データ読出部２０は、これら一連の流れの繰り返しによって得られたオブジェクト・データの必要部分を得、プロセッサ５に対し結果としてその内容を返す。
【００５４】
次に、図２は、複数のオブジェクトをリンクで関連付け、一つの意味のあるファイルとして扱った場合のオブジェクトの構成例を示している。
【００５５】
この場合、グループＡの名簿本体のオブジェクト２０１には、名簿作成者のために用意されたコメントのオブジェクト２０２が付随している。そして、両者はリンク２０３で結合され、グループＡの名簿を表現するオブジェクト２０４によって結ばれている。
【００５６】
したがって、これらのオブジェクト２０１、２０２、２０４およびリンク２０３の全部をあわせてグループＡ名簿２０５として捉えることができる。
【００５７】
一方、グループＢの名簿にはコメントが付いていないので、グループＢの名簿本体２０６がグループＢの名簿そのものになっている。
【００５８】
さらに、グループＣの名簿には、やはりコメントが付いていないので、グループＢと同様の構造でも構わないが、図２の例では、グループＣの名簿本体のオブジェクト２０７がリンク２０３でグループＣの名簿を表現するノードであるオブジェクト２０８に結ばれている。そして、これらは、グループＣ名簿２０９として捉らえることができる。
【００５９】
グループＣの名簿２０９は、二つのオブジェクトを組み合わせて表現する必要はなく、一つのオブジェクトとして表現してもよい。ここではコメントの追加などを行う可能性を考えて二つのオブジェクトで表現している。
【００６０】
そして、これらグループＡ名簿のオブジェクト２０４、グループＢ名簿のオブジェクト２０６およびグループＣ名簿のオブジェクト２０８は、それぞれリンク２０３によりグループ名簿オブジェクト２１０に結ばれ、これら全てのオブジェクトおよびリンクの集合をグループ名簿２００として捉らえている。
【００６１】
この場合、以下の説明を簡単にするために、各オブジェクトにはユニークなＩＤ番号が付いているものとする。例えば、ＩＤ番号として、グループ名簿オブジェクト２１０をＩＤＭ、グループＡ、Ｂ、Ｃの名簿オブジェクト２０４，２０６，２０８のそれぞれをＩＤＧＡ、ＩＤＧＢ、ＩＤＧＣ、グループＡ、Ｃの名簿本体オブジェクト２０１，２０７のそれぞれをＩＤＧＡＯ  、ＩＤＧＣＯ  、グループＡの名簿コメントオブジェクト２０２をＩＤＧＡＣ  としている。
【００６２】
図３は、グループ名簿オブジェクト２１０の構造を示したものである。
【００６３】
ここで、３０１はオブジェクト２１０のＩＤ、３０２はこのオブジェクト２１０を作成した人のＩＤ番号である。このＩＤ番号は従来のファイル・システムのオーナーのＩＤに相当するが、このＩＤはユーザのＩＤには限られず、グループのＩＤでも構わない。また、プログラムまたはスレッドに番号を振り、その番号を用いても良い。
【００６４】
また、３０３はオブジェクトのアクセス権を持っているものを定義するアクセス権データ・リストである。これはデータ一つでもよいが一般にはリストとなっている。この例でのアクセス権データ・リスト３０３は、図４に示すように３つのアクセス権データ３０４、３０５、３０６のリストからなっている。
【００６５】
ここで、オブジェクトを作成した人のユーザＩＤを１２８  番とし、その人には書き込みおよび読み出しの権利があるものとする。アクセス権データ３０４のフラグ“Ｒ”及び“Ｗ”は、ユーザＩＤが１２８  番の人は読み出しと書き込みはできることを意味している。但し、実行のためのアクセス権はまだないので他のアクセス権データで許可しない限りできない。同様にアクセス権データ３０５は、グループＩＤ３２０  番から３２２  番の人は読み出しの権利を持つことを示すフラグ“Ｒ”を有し、アクセス権データ３０６は、アクセス権の設定をユーザＩＤやグループＩＤではなく任意のプログラムで指定できることを示している。ここで指定したプログラムＩＤのプログラムを実行した結果が真（ｔｒｕｅ）であれば、このプログラムが読み出しの権利を持つことを示す。
【００６６】
なお、プログラムあるいはその実行主体（スレッド）にもユーザＩＤと等価な番号を振ることにすれば、この例で左端に書いたＩＤまたはｐｒｏｇｒａｍ  という区別のフィールドは不要である。
【００６７】
一方、このオブジェクト２１０へのアクセスは、アクセス権データ・リスト３０３を構成する３つのアクセス権データ３０４、３０５、３０６のいずれかによって指定されている場合に認められる。この場合、アクセス権データの論理的な組み合わせにより、さらに複雑なアクセス権を指定することもできるが、ここでは最も単純な例のひとつを示している。
【００６８】
図３の３０７は走査制御データで、この走査制御データ３０７は、オブジェクト２１０を走査する際に、サブ・オブジェクトをどのように走査するかを規定するものである。ここに走査制御プログラムのプログラムＩＤを記入すれば一般にどのような走査制御も実現することができるが、ここでは説明を理解しやすくするために最も典型的な例を示す。ここで、ＥＶＥＲＹＴＨＩＮＧというフラグは走査可能なサブ・オブジェクト全てをたどることを意味している。すなわち、走査の権利のある全てのサブ・オブジェクトを順次たどって読み出す。複数のグループに属している人がグループ名簿を読んだときには複数のグループ名簿が読めるようにするため、このフラグを設定している。そして、ひとつも走査可能なサブ・オブジェクトがなければ  ｐｅｒｍｉｓｓｉｏｎ  ｄｅｎｉｅｄ  というエラーになる。これに対し、ＥＶＥＲＹＴＨＩＮＧ−ＳＩＬＥＮＴ  というフラグにしておけば、走査可能なサブ・オブジェクトが一つもなければあたかもグループ名簿は中身の空のファイルであるように見え、エラーにはならない。ＥＶＥＲＹＴＨＩＮＧとＥＶＥＲＹＴＨＩＮＧ−ＳＩＬＥＮＴ  の意味はエラー処理を除いて同一であるため、以下の実施例においては、これらを特に区別せずに用いる。又、ＥＶＥＲＹＴＨＩＮＧを用いた場合に本来行わなければならないエラー処理部分についても説明を省略する。
【００６９】
他の走査制御プログラムの例としては、ＯＮＬＹＯＮＥ  フラグにしておくと、走査可能なサブ・オブジェクトが一つでも見つかればそのオブジェクトを走査し、他のサブ・オブジェクトは無視する。ただし、走査可能なサブ・オブジェクトが一つもなければエラーになる。ＯＮＬＹＯＮＥ−ＳＩＬＥＮＴフラグにするとエラーにはならない。
【００７０】
３０８はサブ・オブジェクトの数を示し、ここではサブ・オブジェクト数３０８は３個になっているので、オブジェクト２１０にはサブ・オブジェクトが３個あることがわかり、Ｎｏ１〜Ｎｏ３のサブ・オブジェクトのＩＤがそれぞれサブ・オブジェクトＩＤ３０９に定義される。
Ｎｏ１〜Ｎｏ３のサブ・オブジェクトには、それぞれ走査権データ・リスト３１０が付けられている。ここでの走査権データ・リスト３１０は、いずれも要素は一つだけで、図５に示すように走査権データ３１１として、それぞれグループＩＤが３２０  番、３２１  番、３２２  番の者に走査権を認めている。また、各走査権データ３１１に記述したＲ、Ｗ、Ｘの各フラグはそれぞれ読み出し、書き込み、実行に伴う走査が起こった場合の走査権を表示している。この例では全ての場合に走査権を認めている。
【００７１】
このような走査権データ・リスト３１０は、前に説明したアクセス権データ・リスト３０３と同様の手順で走査権の有無を調べるものであるが、機能は全く別個のものである。すなわち、アクセス権データ・リスト３０３は、そのオブジェクトのアクセスができるか否かを示すものであるのに対して、走査権データ・リスト３１０は、サブ・オブジェクトを自動的に走査すべきか否かを示すものである。例えば、あるサブ・オブジェクトにアクセス権はあるが走査権がない場合、サブ・オブジェクトの組み合わさって出来たオブジェクトを単純に走査すると、該当のサブ・オブジェクトは走査されない（見えない）が、サブ・オブジェクトを明示的に指定して読み出そうとした場合にはアクセス権があるので読み出すことができる。
【００７２】
なお、各走査権データ３１１は、グループのメンバに対してＷの権利を出しており通常のアクセス権機構の感覚では違和感があるかもしれない。このＷのフラグは単に、走査する際の手順を示したものであるから、オブジェクトの保護とは必ずしも関係がない。オブジェクトの保護は各オブジェクトのアクセス権リストで行うものである。仮に、このＷフラグを悪用して、名簿のデータを書き込もうとしても実際にはサブ・オブジェクトに書き込みの権限が無いので、書き込むことはできない。この場合Ｗフラグがどちらになっていても意味は無いと勘違いしやすいが、それは誤りである。Ｗフラグがもし無ければ、書き込みのために走査した際にサブ・オブジェクトに到達できないから、単に書き込みができないだけのことであるが、きちんとＷフラグを立てておけば、書き込みのために走査した際にサブ・オブジェクトまで走査に行き、サブ・オブジェクトのアクセス権がチェックされ、適当なエラー処理が行われるのである。
【００７３】
次に、図６はグループＡの名簿を表現するオブジェクト２０４の構造を示したものである。ここでは、グループ名簿オブジェクト２１０と同一部分には同符号を付して説明を省略する。グループＢ、Ｃの名簿のオブジェクト２０６、２０８も同様の構造であるので説明は省略する。
【００７４】
この場合、アクセス権データ・リスト３０３は、２つのアクセス権データ３１２を有している。これらは、それぞれ、ユーザＩＤが１２８  番の人は読み出しと書き込みの権限があること、グループＩＤが３２０  番の人は読み出しの権限があることを示している。
【００７５】
そして、２つあるＮｏ１とＮｏ２のサブ・オブジェクトのうち１番目のものはグループＡの名簿コメント・オブジェクト２０２を示し、２番目のものはグループＡの名簿本体オブジェクト２０１を示している。そして、それぞれのサブ・オブジェクト２０２、２０１は共に１つの走査権データを持つ走査権データ・リスト．３１０を持っている。これら走査権データ・リスト３１０の走査権データ３１３は、それぞれユーザＩＤが１２８  番の人およびグループＩＤが３２０  番の人にかかるサブ・オブジェクトの走査権があることを示している。
【００７６】
次に、このようなオブジェクトを例として、オブジェクト走査が実施される手順を、いろいろな人がいろいろなオブジェクトを走査しながら読み出すことを例にして説明する。
【００７７】
まず、オブジェクト走査に先立ち、走査ＩＤリスト記憶部１２に走査ＩＤリストを設定する。これはアクセス権が複数あるのと同様に、複数の走査ＩＤを設定することができる。しかし、もともと自分に権利の無いＩＤについて走査権を持っていても意味の無いことが多いので、一般にはデフォルトとして現在自分の持っている全ての権利ＩＤを用いることが多い。
【００７８】
例えば、ユーザＩＤ１２８  番の人がグループＩＤ３２０  番のグループとグループＩＤ３４０  番のグループに属していたとすると図７のように３つの走査ＩＤ６１１をつないだ走査ＩＤリストの初期値６１を設定する。もちろん、明示的にこれ以外のデータを走査ＩＤリストの初期値としても構わない。
【００７９】
この状態で、グループＡの名簿オブジェクト２０４の走査を開始すると、図６において、まず、アクセス権データ・リスト３０３にユーザのＩＤ１２８  が登録されているから、このオブジェクト２０４をアクセスすることができる。グループＡの名簿オブジェクト２０４は２つのサブ・オブジェクトを持っているので、最初のサブ・オブジェクトを走査できるかどうか調べる。ここで、走査権データ・リスト３１０の走査権データ３１３を見ると、読み出しについてユーザＩＤ１２８  に対し走査権があるから、走査ＩＤリスト中の走査ＩＤ６１１  とマッチし、走査権が認められ、走査する。
【００８０】
ここで、走査制御データ３０７はＥＶＥＲＹＴＨＩＮＧであるから、さらに次のサブ・オブジェクトも走査しようと試る。すると走査権データによるとグループＩＤ３２０  に走査権があるから、同様に走査する。すなわち、この人にとっては、グループＡの名簿オブジェクト２０４はコメントと本文のつながったものとして走査されることになる。
【００８１】
同じ操作を今度は同じグループに属するユーザＩＤ１２９  の人が行ったとすると、走査ＩＤリストの初期値６１は、例えば図８のようになるから、グループＡの名簿オブジェクト２０４を走査する際に、１番目のサブ・オブジェクトについては走査権データ・リスト３１０と走査ＩＤリストがマッチせず、走査の対象にならない。すなわち、この人にとっては、グループＡの名簿オブジェクト２０４は名簿の本文だけのものとして走査されることになる。
【００８２】
次に、同じ走査を今度はグループＡに属さない人が行ったとすると、走査ＩＤリストの初期値６１で走査ＩＤ６１２  は、例えば図９のようになるから、グループＡの名簿オブジェクト２０４を走査する際に、１番目のサブ・オブジェクトは前回同様走査対象とならず、２番目のサブ・オブジェクトも走査の対象にならない。すなわち、この人にとっては、グループＡの名簿オブジェクト２０４はまったく中身の無いファイルと同じものになる。
【００８３】
ここで、仮に、この人にも走査権を出すようにデータを定義しておけば、今度は走査をし、サブ・オブジェクトのアクセス権が出ていないとすると、そこでエラーとなる。このようにアクセス権と走査権の微妙な性質の違いを本発明のオブジェクト走査方法においては容易に実現することができる。
【００８４】
なお、以上説明した走査の手順は、各オブジェクトに対して再帰的に行うことが可能である。
【００８５】
すなわち、前の説明と同じユーザＩＤ１２８  番の人がグループ名簿オブジェクト２１０をアクセスすると、まず図３のオブジェクト２１０のアクセス権データ・リスト３０３にはＩＤ１２８  が書かれているからアクセス可能であり、３つのサブ・オブジェクトがあることがわかる。
【００８６】
次に、それぞれのサブ・オブジェクトが走査可能かどうか調べるが、それぞれの走査権データ・リスト３１０のうち、ユーザＩＤ１２８  番の人が属しているグループＩＤ３２０  番の書かれているサブ・オブジェクトＮｏ１だけが走査可能であることがわかるので、そのＩＤ  ＃ＩＤＧＡ  を持つサブ・オブジェクト２０４を次に走査する。以下前に説明した通りである。
【００８７】
このような手順により、ユーザＩＤ１２８  番の人がグループ名簿オブジェクト２１０をアクセスすると、グループＡの名簿のコメントと本文のつながったものとして走査される。
【００８８】
また、前と同じユーザＩＤ１２９  番の人がグループ名簿オブジェクト２１０をアクセスすると、やはりその３つのサブ・オブジェクトのうちＮｏ１だけが走査可能であることがわかり、以下前に説明した通りの手順により、グループＡの名簿本文として走査される。
【００８９】
ここで、上述のオブジェクト走査において、サブ・オブジェクトを選択する手順について図１０により説明する。
【００９０】
即ち、あるユーザによってあるオブジェクトの走査が開始されたとすると、まず、ステップ１１０１において、このオブジェクトに対するアクセス権がこのユーザにあるかどうかが決定される。もしなければ、エラー処理がなされ、ある場合には、ステップ１１０２に進み、以下に説明するように操作ＩＤリストの初期値６１が設定される。
【００９１】
次に、このオブジェクトのサブ・オブジェクト数をステップ１１０３において可変数Ｎに読み込み、ステップ１１０４で数Ｎがゼロであるかどうか判断する。数Ｎがゼロであれば、走査するサブ・オブジェクトはなく、操作は終了する。そうでなければ、次のステップ１１０５において、Ｎ番目のサブ・オブジェクトがこのユーザにとって走査可能かどうかをＮ番目のサブ・オブジェクトの走査権データリストを検索して判断する。もしこのＮ番目のサブ・オブジェクトが走査可能でなければ、変数ＮをＮ−１に更新し、上記ステップ１１０４に戻る。
【００９２】
そうでない場合は、次にステップ１１０９において、このＮ番目のサブ・オブジェクトの走査を開始する。この時、このＮ番目のサブ・オブジェクトが更にサブ・オブジェクトを含んでいる場合は、このＮ番目のサブ・オブジェクトについて再帰的に呼び出しを行い、操作はスタートに戻って図１０の操作をＮ番目のサブ・オブジェクトについて再帰的に繰り返される。
【００９３】
このＮ番目のサブ・オブジェクトの走査が終了した後、このオブジェクトデータの走査管理データ３０７がＥＶＥＲＹＴＨＩＮＧであるかどうかをステップ１１１１において決定する。もしそうでなければ、操作は終了し、ＥＶＥＲＹＴＨＩＮＧであれば、操作は上記ステップ１１０６に戻る。
【００９４】
以上詳述したとおり、オブジェクトの持つ走査権データ・リストの情報を利用し、アクセスする際にどのオブジェクトを走査すれば良いかを判断し、適切に必要なオブジェクトだけを取り出す機構を用意したことにより、従来のアクセス権管理の方式では実現不可能であった柔軟なオブジェクト表現が可能となる。
【００９５】
また、個々のプログラムに特別な定義を行うことなく、オブジェクト自体に走査の手順を記述することができるので、オブジェクトの柔軟な表現を自然な形でプログラムから利用することができる。従って、近年盛んになった共同作業支援のシステムのように、アクセス権やユーザからの見え方などを複雑に記述しなければならない新しいタイプのプログラムの開発も非常に容易に行うことが可能となる。
【００９６】
又、第１の実施例においては、単一のオブジェクトを形成する異なったオブジェクトに異なったアクセス権を設定する際に、プログラムの操作が１つのスレッドから他のスレッドに変更され、プログラム操作がこのように不規則になることによってデバッグを行うのが難しくなるということから生じていた従来の問題を解決することができる。
【００９７】
故に、この実施例によれば、機能的に異なったアクセス権及び走査権を利用することによって、アプリケーションプログラムの操作とは関係なく、一般ユーザが作成した各オブジェクトについてオブジェクト走査手順及び走査権を柔軟に指定することが可能なオブジェクト走査装置を提供することができる。
【００９８】
以下、本発明の第２の実施例について説明する。
【００９９】
図１１は第二の実施例の概略構成を図１と同一部分には同一符号を用いて示している。第一の実施例との違いは、オブジェクト読出し実行部１０に、走査ＩＤリストを動的に変更する走査ＩＤリスト変更部２１を持つことにある。
【０１００】
走査ＩＤリスト変更部２１は、走査オブジェクト選択部１９と走査ＩＤリスト記憶部１２との間に接続されている。
【０１０１】
走査ＩＤリスト２１は、走査するオブジェクトの選択に従い走査オブジェクト選択部１９によって走査ＩＤリスト記憶部１２に格納されている走査ＩＤリストに走査ＩＤの追加および削除を行うものである。
【０１０２】
走査オブジェクト選択部１９は実施例１において説明した動作に加え、オブジェクトを走査する動作と同時に、走査したオブジェクトをいかなる権限でアクセスしたかを判断し、適切な権限によりアクセスすべく、走査ＩＤリストの変更を行う。
【０１０３】
以下、オブジェクトの走査の手順を図面を参照しながら、詳しく説明する。なお、特に断りの無い限り、第１実施例と同一の名称、符号は、同一の意味であるものとする。
【０１０４】
グループ名簿オブジェクト２１０を走査する場合を考える。この場合、例えばユーザＩＤ１２８  番の人がグループＩＤ３２０  番のグループとグループＩＤ３４０  番のグループに属していたとすると、第１実施例の場合と同様、図７のように３つの走査ＩＤ６１１  をつないだ走査ＩＤリストの初期値６１が設定される。
【０１０５】
この場合、図３に示すように、グループ名簿オブジェクト２１０は３つのサブ・オブジェクトを持っている。そして、これら３つのサブ・オブジェクトの走査権データリスト３１０を見ると、１番目のサブ・オブジェクトだけが走査可能であることがわかる。したがって、サブ・オブジェクトであるグループＡの名簿オブジェクト２０４だけを走査する。その際、１番目のサブ・オブジェクトに関しては走査権データリストにはＩＤが３２０  であるユーザの権利しか定義されておらず、それ以外の走査ＩＤは不要となるので、サブ・オブジェクトを走査する際にこれらの不要な走査ＩＤは削除する。
【０１０６】
したがって、図７のような初期値６１を持っていた走査ＩＤリストはこの時点で図１２に示すように変更される。走査ＩＤ１２８  、３４０  は切り離されてＩＤ３２０  のみが有効となる。
【０１０７】
つまり、この走査は、１番目のサブ・オブジェクトはグループＡの権限でアクセスされるべきであるという走査権データリスト３１０からの情報を利用して、本来持っていたユーザＩＤ１２８  のアクセス権を行使せず、より弱いＩＤ３２０  の権利を走査権として用いることを意味している。
【０１０８】
次に、サブ・オブジェクトであるグループＡの名簿オブジェクト２０４を走査する。
【０１０９】
まず、１番目のサブ・オブジェクトの走査権データ・リスト３１０を見るとＩＤ１２８  番の走査権３１３が定義されている。今走査を行っているユーザのＩＤは１２８  番であるが、前述の変動によって現在の走査ＩＤリストは図１２の様にユーザＩＤ１２８  番という走査ＩＤを持っていないから、このサブ・オブジェクト２０１の走査は行われない。また、２番目のサブ・オブジェクトの走査権データ・リスト３１０はグループＩＤ３２０  番に対して走査権を出しているから、走査が行われる。
【０１１０】
このような手順により、ユーザＩＤ１２８  番の人がグループ名簿オブジェクト２１０をアクセスすると、グループＡ名簿の本体のオブジェクト２０１の内容と同一のデータが読み出され、ユーザに元来与えられている強い走査権に基づくオブジェクト２０２のコメントの内容の読み出しは行わない。
【０１１１】
ユーザＩＤが１２８  番のユーザにとってはグループＡ名簿の本体オブジェクト２０１もコメントオブジェクト２０２も共にアクセス権があるのであるから、従来技術においてはそのオブジェクトをアクセスするプログラムに特別の権限を与えない限り、常に両方のオブジェクトが参照されることになっていた。
【０１１２】
他のユーザがグループ名簿オブジェクト２１０を走査した場合の動作は、容易に理解できるので説明を省略する。
【０１１３】
ここで、上述のオブジェクト走査において、サブ・オブジェクトを選択し、また走査ＩＤリストを変更する手順について図１３のフローチャートを用いて説明する。
【０１１４】
この場合、オブジェクト走査開始によりアクセス権があるかどうかを判断し（ステップ１００１）、アクセス権がなければエラーとし、アクセス権があれば走査ＩＤリストの初期値６１を設定し（ステップ１００２）、走査ＩＤリストの先頭要素をポインタＰに、サブ・オブジェクトの個数をＮに設定する（ステップ１００３、１００４）。そして、Ｎ＝Ｏかどうかを判断し（ステップ１００５）、Ｎ＝Ｏならば、走査ＩＤリストからＰの走査ＩＤを削除して（ステップ１００９）、ステップ１０１０に進む。Ｎ≠Ｏならば、Ｎ番目のサブ・オブジェクトの走査権データリストをチェックしてＮ番目のサブ・オブジェクトはポインタＰで示される走査ＩＤで走査可能かどうかを調べる（ステップ１００６）。ここで、走査不可ならばＮをＮ−１にして（ステップ１００７）、ステップ１００５に戻り、走査可能ならば次の走査ＩＤがあるか調べ（ステップ１０１０）、ある場合は次の要素をＰに設定し（ステップ１００８）、ステップ１００４に戻り、なければステップ１０１１に進む。
【０１１５】
サブオブジェクトの個数を再度Ｎに設定する（ステップ１０１１）。そして、Ｎ＝Ｏかどうかを判断し（ステップ１０１２）、ＹＥＳならば処理を終了する。また、ＮＯならばＮ番目のサブオブジェクトは走査可能かどうかを判断し（ステップ１０１３）、ここでＮＯならばＮをＮ−１にして（ステップ１０１４）、ステップ１０１２に戻り、ＹＥＳならば現在の走査ＩＤリストをスタックにセーブし（ステップ１０１５）、Ｎ番目のサブオブジェクトのオブジェクト走査を開始する（ステップ１０１６）。この時Ｎ番目のサブ・オブジェクトはさらにサブ・オブジェクトがあれば、再帰的に呼び出しが行われる。）サブ・オブジェクトの走査が全て終了したらスタックから走査ＩＤを取り出す（ステップ１０１７）。そして、走査制御データ３０７が  ＥＶＥＲＹＴＨＩＮＧ  かどうかを判断し（ステップ１０１８）。ここでＹＥＳならばステップ１０１４に戻り、ＮＯならば処理を終了する。
【０１１６】
従って、図１３により説明したオブジェクト走査においては、走査すべきオブジェクトを選択した際に、走査権のあるサブオブジェクトが１つも存在しない走査ＩＤがあれば、それを削除するようになっている。
【０１１７】
次に、走査すべきオブジェクトを選択した際に、選択したオブジェクトを走査することの不可能な走査ＩＤがあれば、それを削除するようにする手順について図１４により説明する。
【０１１８】
この場合、オブジェクト走査開始によりアクセス権がユーザにあるかどうかを判断し（ステップ１１０１）、アクセス権がなければエラーとし、アクセス権があれば走査ＩＤリストの初期値６１を設定する（ステップ１１０２）。そして、サブ・オブジェクトの個数をＮに設定し（ステップ１１０３）、Ｎ＝Ｏかどうかを判断し（ステップ１１０４）、ＹＥＳならば処理を終了する。また、ＮＯならばＮ番目のサブ・オブジェクトは走査可能かどうか判断し、ＮＯならば、ＮをＮ−１にして（ステップ１１０６）、ステップ１１０４に戻り、ＹＥＳならば、現在の走査ＩＤリストをスタックにセーブし（ステップ１１０７）、Ｎ番目のサブオブジェクトの走査権データリストに含まれない走査ＩＤを走査ＩＤリストから削除し（ステップ１１０８）、Ｎ番目のサブオブジェクトのオブジェクト走査を開始し（ステップ１１０９）、この時、Ｎ番目のサブ・オブジェクトが更にサブ・オブジェクトを含んでいたらＮ番目のサブ・オブジェクトを再帰的に呼び出し、操作はスタートに戻り、図１４のこの操作をＮ番目のサブ・オブジェクトについて再帰的に繰り返す。Ｎ番目のサブ・オブジェクトの走査が全て終了したらスタックから走査ＩＤを取り出す（ステップ１１１０）。そして、このオブジェクトの走査制御データ３０７が  ＥＶＥＲＹＴＨＩＮＧ  フラグかどうかを判断し（ステップ１１１１）、ここでＹＥＳならばステップ１１０６に戻り、ＮＯならば処理を終了する。
【０１１９】
従って、このようにすれば、例えば、ユーザＩＤが１２８  番のユーザが明示的にグループＡ名簿２０４を参照した場合には、ユーザＩＤ１２８  番の権限を使って両方走査が行われ、単純にグループ名簿２１０を参照すると、サブ・オブジェクト２０４を走査した時点で走査権が変更され、グループ３２０  の権限で名簿ファイルをアクセスすることができるようになる。
【０１２０】
これにより、例えば、自分の編集した名簿ファイルを名簿整形プログラムに与えて実行した時に、他のメンバは正しく動作するのに、自分だけはコメントの入った誤ったデータを使って実行するために正しく動作しないというようなことを防止できる。
【０１２１】
つまり、このような構成によれば、複数のオブジェクトにより構成されたデータに対し、オブジェクト単位でアクセス権を定義できるのみならず、それらオブジェクトの走査時の走査手順を定義し、また走査すべきオブジェクトを選択するとともに、この選択に従って走査ＩＤリストを書き換えることができるので、走査方法を柔軟に定義しつつ、オブジェクトの保護も容易に行うことができる。
【０１２２】
すなわち、複数のオブジェクトを一つのファイルとみなして走査する際に、各単位オブジェクトごとに記述された走査権を別個に組み合わせるのではなく、全オブジェクトを統一した権利の基で走査するので、オブジェクトの作成者が意図しなかった走査方法が採用されることを未然に防ぐことができる。
【０１２３】
また、走査すべきオブジェクトを選択した際に、特定の走査ＩＤリストに変更し、または特定の一つまたは複数の走査ＩＤを走査ＩＤリストに追加し、また、特定の一つまたは複数の走査ＩＤを走査ＩＤリストから削除する走査ＩＤリスト変更部を備えることにより、特定のオブジェクト走査時に限り特別の方法を与えることができる。又、ここで説明する電子メールとは、従来から用いられている方式のものに限らず、ある人からある人へ伝達されるあらゆるデータ一般、例えば電子会議において相手に示す提示資料、会議風景のビデオ・データ等も指す。
【０１２４】
また、走査ＩＤリストの変更時においてはオブジェクトの作成者が持っていない走査ＩＤを追加することのできないという制約を設けることにより、従来一般に用いられていたアクセス権管理を廃止し、走査権で代用することとしても、前記特別の走査ＩＤを与える機構を悪用してオブジェクトを不正にアクセスすることを防ぐことができる。
【０１２５】
また、走査ＩＤリストの変更時に、特定の実行プログラムによって指定された走査ＩＤを追加することを認めるように前記制約を緩和すると、より柔軟なオブジェクトの走査を可能にすることができる。
【０１２６】
以下に、図１５を参照して本発明の第３の実施例を説明する。この実施例はオブジェクト走査方法及び装置を電子メール作成ツールに応用したものである。
【０１２７】
図１５は、電子メール作成ツールを組み込んだオブジェクト走査装置の構成図である。図１１と重複する部分は同一とし、説明を省略する。
【０１２８】
まず、電子メール作成部３０について説明する。これは、電子メールを作成、送信しようとするものが利用する部分である。まず、文書入力部３１によって入力された文章はオブジェクト作成部３２に送られ、文章オブジェクトの形で格納するよう仮想記憶管理部１に要求する。ここでいう文章とは、文字で書かれた通常文章はもちろん、画像、音声、データベース等の一般データであって良い。
【０１２９】
文章作成者は必要に応じて作成した文章の一部または全部に走査権を設定することができる。この指示は文章入力部３１から走査権データ・リスト作成部３３に対して送られ、走査権データ・リスト作成部３３は指示に応じて作成文書に対し走査権データ・リストを設定する。この処理にはオブジェクトのサブ・オブジェクトへの分割が伴う場合が一般的である。設定すべき内容はオブジェクト作成部２２に対し適宜要求される。
【０１３０】
以上は電子メールの作成までの説明であり、このようにして作成された文章は適当な走査権およびアクセス権を設定することによりそのまま他の人から参照することができるが、ここでは、従来からある電子メールのように送信相手に対し送り付けるという概念の元に説明する。ただし、本発明はこの概念に限定されたものではない。
【０１３１】
オブジェクト送信部３４は作成された文章オブジェクトを送信する。具体的には、送信相手のメール・アドレス５０（宛名）に従って、受信者が読めるようにメールの送信の連絡をしたり、必要であれば他の計算機に対しネットワークを介してデータ転送を行う。これら処理は従来から  Ｓｅｎｄｍａｉｌ  と呼ばれるプログラムで行われており、詳しい説明は省略する。
【０１３２】
次に、電子メール受信部４０について説明する。これは電子メールを受信し読む者が利用する部分である。まず、オブジェクト受信部４１が電子メールの到着を検出する。これは電子メール読出部４２に伝えられ、読出部４２はプロセッサ５に対し文章オブジェクトの読み出しを命ずる。読み出しを命じてから結果として文章オブジェクトを読み出すまでの手順は実施例２で説明したものと同一である。
【０１３３】
電子メールを受信する者は、受け取った電子メールを読み出す際の走査ＩＤリストを走査ＩＤリスト指示部４３に指令し、指令された内容を走査ＩＤリスト設定部４４に伝え、走査ＩＤリスト設定部４４は走査ＩＤリスト記憶部１２に情報を書き込む。ここで言う走査ＩＤリストとは「誰の権限でこのメールを読むべきか」というものを指定するものであり、もちろん、アクセス権の無いメール（例えば他人宛てのメール）が読めるという意味ではない。
【０１３４】
しかし、一般に電子メールを読む度にユーザに対してこの指令を走査ＩＤリスト指示部４３に送る操作は煩雑であるため、デフォルト走査ＩＤリスト指示部４５は、状況に応じてデフォルトの走査ＩＤリストを決め、走査ＩＤリスト設定部４４にその内容を伝える。デフォルトの走査ＩＤリストを決める方法は一般にユーザがカスタマイズできるように環境設定ファイル等で指示するが、ここでは、オブジェクト送信部３４からオブジェクト受信部４１に指示されたメール・アドレス５０を元に決定するものとする。例えば、その電子メールがグループＡ全員に宛てられたものであれば、デフォルトの走査ＩＤリストはグループＡのみの走査権とする。受信者は、必要や好みに応じてこのデフォルトの変更を走査ＩＤリスト指示部４３に対して行うことができる。
【０１３５】
電子メール読出部４２がプロセッサ５から受け取った結果は電子メール表示部４６に送られ、実際にその電子メールを読むことができる。また、電子メールを読んだ後に、走査ＩＤリスト指示部４３に走査ＩＤリストの変更を要求し、異なる走査権の元で再度電子メールを読むことも可能である。
【０１３６】
以上のような構成による電子メールの送受信に関して、実際に使われる文書を例として具体的にデータ構造がどのように表現されるのかを以下に例示する。
【０１３７】
図１６は、リーダがプロジェクトＡおよびプロジェクトＢの今期の計画を記した文書を作成したものである。この文書作成ツールは文書の一部に走査権設定の属性を付ける機能を持っている。
【０１３８】
通常、文書には特に走査権を指定する必要は無いが、リーダはこの文書が機密性が高いと判断し、各プロジェクトの計画はそれぞれのメンバ以外からは解らないようにしようとした。
【０１３９】
範囲を指定し、前半はプロジェクトＡ、後半はプロジェクトＢに対し走査権を与える指示を行った。また、プロジェクトＡに関する文章の一部は、個人のプライバシーに触れるため、自分だけが走査するように指示した。
【０１４０】
文書作成ツールはこの指示を受け、適切な走査権データ・リストの設定を行い、図１７に示すようなデータ構造を作成した。なお、図１７において、本実施例の説明に直接必要とならないフィールドは記述を省略した。
【０１４１】
リーダはプロジェクトＡとプロジェクトＢの両方の権限を持っているので、作成した文書全体を読むことができる。
【０１４２】
リーダは、プロジェクトＡおよびプロジェクトＢのメンバ全員にこの文書を電子メールで送信した。この文書オブジェクトの走査は、電子メール作成ツールが送信する際に行われても良いし、電子メール作成ツールは文書全体を送信し、受信者が読み出す際にオブジェクトの走査が行われても良いし、その両方でも良いが、ここでは、受信者が読み出す際に行われるものとして記述する。
【０１４３】
プロジェクトＡのみに属しているメンバ１がこの電子メールを受信すると、まず、アクセスに先立ち、図１８のように走査ＩＤリストにプロジェクトＡと自分のＩＤである  ＭＥＭＢＥＲ１を設定する（実際には他のＩＤも設定されるかもしれないが、この部分の説明には関係ないので省略する）。そしてこの文書オブジェクトを走査すると、プロジェクトＡの権限に基づいて走査するため、実施例１の場合と同様の手順にて、文書１の部分だけがアクセスされる。従って、その人には文書１の内容だけが読める。
【０１４４】
一方、プロジェクトＢのみに属しているメンバは同様に文書３の内容だけが読める。
【０１４５】
また、プロジェクトＡとプロジェクトＢの両方に属しているメンバ２がこの電子メールを受信すると、まず図１９のように走査ＩＤリストにプロジェクトＡとプロジェクトＢと自分のＩＤである  ＭＥＭＢＥＲ  ２  を設定する。そしてこの文書オブジェクトを走査すると、プロジェクトＡとプロジェクトＢの両方の権限で走査し、また、ＴＲＡＶＡＲＳＥ  ＩＮＦＯ  が  ＥＶＥＲＹＴＨＩＮＧ  であるため、文書１の内容と文書３の内容の連結したひとつの文書として読める。
【０１４６】
このような手順によって電子メールの送信を行うことによるメリットは次に示すとおり、いくつもある。
【０１４７】
まず、本来ひとつの文書として管理していたものを、メールの送信を行うために必要部分だけを切り貼りして相手に応じて送る必要がなくなる。一旦走査権データ・リストの設定された文書は、誰に送信しても読ませる必要のある部分だけが読めるように自動的に送られる。
【０１４８】
また、誤って読まれてはいけない部分を送ってしまう心配もなくなる。例えば送信する文書の中に文書２のような個人のプライバシに関するコメントの記述された部分が含まれていても、受信者がそれを読んでしまうということは起こらない。あるいは、プロジェクトＡにもプロジェクトＢにも属さない人に送ってしまえば、中身の何もないメールとなるだけである。
【０１４９】
さらには、プロジェクトＡとプロジェクトＢの両方に属した人が受信した場合、従来の方法においては、プロジェクトＡに関する部分はプロジェクトＡのメンバに、プロジェクトＢに関する部分はプロシジェクトＢのメンバにそれぞれ送信する必要があるため、元々ひとつの文章であった文書１と文書３とが別々の電子メールとなってしまい、整理に不便である。
【０１５０】
さらに、近年実用化が試みられている、単一仮想記憶というオペレーティング・システムにおいては、分散計算機環境において同一のオブジェクトを単一（同一の）アドレスでアクセスすることができるが、そういったシステムでは電子メールの送信は単にそのオブジェクトへのポインタを渡すだけで済む。そのような環境において、従来の電子メールの送信方法では送り先の相手ごとにデータを加工し直すことになるので、余分な記憶領域を必要とすることになるが、本発明ではそのような場合にもやはりそのオブジェクトへのポインタを渡すだけで済むので、性能が飛躍的に向上する。
【０１５１】
このように、本発明のオブジェクト走査装置を用いれば、ここで説明したような非常に単純な例でさえ、その有益性は明らかである。こういったオブジェクトをさらに組み合わせた複雑なオブジェクトの走査をも自動的に行うことができるのであるから、その効果は計り知れない。
【０１５２】
なお、本発明は上記実施例のみには限定されず、要旨を変更しない範囲で適宜変形して実施できる。
【０１５３】
【発明の効果】
本発明によれば、複数のオブジェクトにより構成されたデータに対し、オブジェクト単位でアクセス権が定義できるのみならず、それらオブジェクトの走査時の走査手順を定義することにより、柔軟に走査を行い、オブジェクトの保護を容易に行うことができる。さらには、サブオブジェクトの選択に応じて走査ＩＤリストを書き換えることにより、走査権を動的に変更し、一層柔軟なアクセスを行うことができる。
【０１５４】
このことから、複数のオブジェクトを組み合わせてオブジェクトを構成する場合、個々のオブジェクト毎に異なるアクセス権を設定できるようにする試みが近年行われているが、この試みの副作用として、プログラムを実行する主体によってプログラムの動作が変化してしまい、動作が一貫しないためにデバッグが非常に困難になるといった問題が生じて来ているが、アクセス権とは別に走査権を定義することができるので、このような問題点も解決できる。
【図面の簡単な説明】
【図１】本発明に係るオブジェクト走査装置の第１の実施例の概略構成を示す図。
【図２】図１の装置で取り扱うオブジェクトの構成例を示す図。
【図３】図２のオブジェクトのデータの構成例を示す図。
【図４】図３の構成におけるアクセス権データの構成例を示す図。
【図５】図３のデータの構成における走査権データの構成例を示す図。
【図６】図３に示されるオブジェクトのサブ・オブジェクトの構成例を示す図。
【図７】図１の装置における１２８  番のユーザの走査ＩＤリストの初期値を示す図。
【図８】図１の装置における１２９  番のユーザの走査ＩＤリストの初期値を示す図。
【図９】図１の装置における１３０  番のユーザの走査ＩＤリストの初期値を示す図。
【図１０】図１の装置におけるサブ・オブジェクト選択の手順の一例を説明するためのフローチャート。
【図１１】本発明に係るオブジェクト走査装置の第２の実施例の概略構成を示す図。
【図１２】図１１の装置におけるユーザの走査ＩＤリストの変更後を示す図。
【図１３】図１１の装置で走査サブ・オブジェクトの選択及び走査ＩＤリスト変更を行う操作のフロートャート。
【図１４】図１１の装置で走査サブ・オブジェクトの選択及び走査ＩＤリスト変更を行う操作の他の場合におけるフロートャート。
【図１５】電子メールツールを組み込んだ本発明に係るオブジェクト走査装置の第３の実施例を示す概略構成図。
【図１６】図１５の装置で扱うメイル文書の一例を示す図。
【図１７】図１５の装置において図１６の文書を表示するオブジェクトのデータ構成を示す図。
【図１８】図１５の装置におけるユーザの走査ＩＤリストの初期値を示す図。
【図１９】図１５の装置における他のユーザの走査ＩＤリストの初期値を示す図。
【図２０】従来の名簿本体のオブジェクトを説明する図。
【図２１】従来の名簿本体のＩＤリストを説明する図。
【図２２】図２０の名簿のコメントのオブジェクトを説明する図。
【図２３】図２０及び２２のオブジェクトに関連した複数のオブジェクトを連結したオブジェクトを説明する図。
【図２４】従来の名簿整形用のプログラムを登録するオブジェクトの一般的な図。
【図２５】従来のプログラム登録用のオブジェクトの変形例を示す図。
【符号の説明】
１  仮想記憶管理部
２  物理メモリ
３  二次記憶装置
４  入出力デバイス
５  プロセッサ
６  プログラム記憶部
７  アクセス要求受付部
８  引数検出部
９  アクセス要求種類判定部
１０  オブジェクト読出し実行部
１１  オブジェクト
１２  走査ＩＤリスト記憶部
１３  アクセス権記憶部
１４  対象オブジェクト取出部
１５  走査権データ・リスト記憶部
１６  走査権データ・リスト検出部
１７  走査ＩＤリスト検出部
１８  アクセス権検証部
１９  走査オブジェクト選択部
２０  オブジェクトデータ読出部
１０３  リンク
【図１】
0003623979.tif 000002
【図２】
0003623979.tif 000003
【図３】
0003623979.tif 000004
【図４】
0003623979.tif 000005
【図５】
0003623979.tif 000006
【図６】
0003623979.tif 000007
【図７】
0003623979.tif 000008
【図８】
0003623979.tif 000009
【図９】
0003623979.tif 000010
【図１０】
0003623979.tif 000011
【図１１】
0003623979.tif 000012
【図１２】
0003623979.tif 000013
【図１３】
0003623979.tif 000014
【図１４】
0003623979.tif 000015
【図１５】
0003623979.tif 000016
【図１６】
0003623979.tif 000017
【図１７】
0003623979.tif 000018
【図１８】
0003623979.tif 000019
【図１９】
0003623979.tif 000020
【図２０】
0003623979.tif 000021
【図２１】
0003623979.tif 000022
【図２２】
0003623979.tif 000023
【図２３】
0003623979.tif 000024
【図２４】
0003623979.tif 000025
【図２５】
0003623979.tif 000026