3.15.3 オブジェクトごとのアクセス制御情報の種類

ここでは,アクセス制御情報のうち,オブジェクトごとに設定するアクセス制御情報について説明します。

オブジェクトごとのアクセス制御情報は,ACFlagまたはACLとして設定します。また,オブジェクトごとに設定されたアクセス制御情報を管理するための情報も,ACLとして設定します。

<この項の構成>
(1) ACFlag(アクセス制御フラグ)
(2) ACL(アクセス制御リスト)

(1) ACFlagアクセス制御フラグ

ここでは,ACFlagについて説明します。

ACFlagは,所有者,プライマリグループおよび全ユーザに対して許可する操作を設定できるアクセス制御情報です。

例えば,「所有者にはすべての操作を許可する」としたり,「プライマリグループに所属するユーザには参照,更新を許可する」としたりできます。また,「すべてのユーザに参照を許可する」といった指定もできます。

ACFlagは,データベース上ではトップオブジェクトと同じテーブルにあるプロパティです。このため,ACLを使用したアクセス権判定に比べて高速なアクセス権判定ができるのが特長です。

(a) ACFlagを表すプロパティ

ACFlagは,次の三つのプロパティで表されます。

これらのプロパティは,クラスライブラリのオブジェクトのトップオブジェクトに存在します。

ACFlagの参照には,GetPropertyValuesメソッドなどのプロパティを参照するメソッドを使用します。設定や更新には,PutPropertyValuesメソッドを使用します。ただし,これらのプロパティを検索に使用することはできません。

(b) ACFlagでアクセス権を設定する対象

ACFlagによってアクセス権を設定できるのは,次の3種類のユーザおよびグループです。

所有者
所有者とは,オブジェクトに設定されているアクセス制御情報を変更することができるユーザです。所有者以外のユーザにアクセス制御情報の変更ができるようにしたい場合,まず所有者によってアクセス制御情報を変更する権利を与える必要があります。また,所有者自身を,自分以外のユーザに変更することもできます。
アクセス制御機能を使用している場合,文書空間で作成した文書やコンテナなどのオブジェクトには必ず所有者が存在します。オブジェクトの作成時には,オブジェクトの作成者が所有者として登録されます。
ACFlagでは,アクセス制御情報の変更および所有者の変更以外に所有者が実行できる操作を設定できます。
注意
所有者がアクセス制御情報を変更したり所有者を変更したりする場合,対象オブジェクトのOIIDを指定して変更します。OIIDを取得するために対象オブジェクトのプロパティを参照する場合は,基本プロパティ参照権が設定されている必要がありますので,注意してください。基本プロパティ参照権については,「3.15.4 パーミッションの種類」を参照してください。また,所有者が基本プロパティ参照権を持たない場合,必要に応じてセキュリティ管理者が所有者に基本プロパティ参照権を設定してください。
所有者は,オブジェクトのdbrProp_OwnerIdプロパティに設定されたユーザ識別子によって表されます。CreateObjectメソッドによってオブジェクトを作成したとき,このメソッドをコールしたユーザのユーザ識別子が,dbrProp_OwnerIdプロパティに設定されます。このプロパティは,検索に使用できます。ただし,検索するときにはプロパティ識別子を「edmProp_OwnerId」と指定してください。
所有者を変更する場合は,dbrProp_OwnerIdプロパティの値を変更します。このプロパティは,所有者自身またはセキュリティ管理者が変更できます。
プライマリグループ
プライマリグループとは,ACFlagの設定によってACLよりも先にアクセス権判定が実行されるグループです。
プライマリグループは,オブジェクトごとに一つ設定できます。そのオブジェクトに対してアクセスが多いグループなどを設定しておくことをお勧めします。
例えば,文書を表すオブジェクトのプライマリグループに「第一設計部」を指定して,ACFlagに「プライマリグループに対して文書の参照,編集を許可する」と設定しておけば,その文書は第一設計部に所属する全員が参照,編集できるようになります。
プライマリグループは,オブジェクトのdbrProp_PrimaryGroupIdに設定されたグループ識別子によって表されるグループです。オブジェクト作成時にこのプロパティに設定されるグループの情報は,連携しているユーザ管理システムによって異なります。
LDAP対応のディレクトリサーバと連携してユーザ管理をしている場合,CreateObjectメソッドをコールしてオブジェクトを作成した時点では,このプロパティは設定されません。
UOCをユーザ管理システムとして使用する場合,ユーザ管理システムにプライマリグループに対応する概念があり,かつそのグループを返却するUOCが作成されているときは,CreateObjectメソッドをコールしたときにプライマリグループが設定されます。それ以外の場合は,CreateObjectメソッドをコールしてオブジェクトを作成した時点でこのプロパティは設定されません。
CreateObjectメソッドをコールしたときにプライマリグループが設定されない場合,または必要に応じてプライマリグループの値を変更したい場合は,アクセス制御情報変更権を持つユーザが明示的にPutPropertyValuesメソッドによって値を設定してください。アクセス制御情報変更権については,「(2)(c)セキュリティACL(Security-ACL)」を参照してください。
このプロパティは,検索に使用できます。ただし,検索するときにはプロパティ識別子を「edmProp_PrimaryGroupId」と指定してください。
全ユーザ
ACFlagでは,所有者およびプライマリグループに所属するユーザ以外のすべてのユーザに対するアクセス権も設定できます。

(2) ACLアクセス制御リスト

ACLは,ユーザやグループそれぞれに対して,許可する操作を設定して,アクセス権を与えるためのリストです。このリストは,操作を許可する対象(ユーザまたはグループなど),その対象が何であるかの種別,および許可する操作の種類を組み合わせたものを,個々の要素とします。個々の要素は,ACEとして作成します。

例えば,文書やコンテナを表すオブジェクトに対して,「ユーザAに対してはすべての操作を許可する」,「ユーザBに対しては参照と編集を許可する」,「グループXに対しては参照だけを許可する」といった詳細なアクセス権の設定ができます。この場合,「ユーザAに対してすべての操作を許可する」や「ユーザBに対して参照と編集を許可する」という,個々の対象に対する設定が,ACEに対応します。ACLとACEの関係を次の図に示します。

図3-75 ACLとACEの関係

[図データ]

ACLは,クラスライブラリのオブジェクトのプロパティである,dbrProp_ACLプロパティとして表されます。dbrProp_ACLプロパティは,CdbrVariableArrayクラスのオブジェクトとして扱う,VariableArray型プロパティです。個々のACEはCdbrCompoundクラスのオブジェクトとして扱います。このため,ACLおよびACEの作成などの操作には,CdbrVariableArrayクラスおよびCdbrCompoundクラスのメソッドを使用します。

VariableArray型プロパティとして作成したACLは,GetPropertyValuesメソッドなどを使用して参照できます。また,PutPropertyValuesメソッドを使用してクラスライブラリのオブジェクトに設定,更新できます。ただし,このプロパティを検索に使用することはできません。

なお,ACLは,設定されるオブジェクトや用途によって,次の3種類に分けられます。

(a) パブリックACL

パブリックACLは,複数のオブジェクトに対して同じアクセス制御情報を設定したい場合に使用します。パブリックACLを使用すると,複数の文書やコンテナの間で,同じアクセス制御情報を共有できます。

パブリックACLは,ACLを共有するために使用する,独立したオブジェクトです。このオブジェクトに共有したいACLを設定し,複数のオブジェクトから参照することで,ACLを共有できます。

例えば,それぞれ異なるユーザが作成した文書Aと文書Bについて,どちらの文書にも「第一設計部に所属するユーザ全員に対して参照と編集を許可したい」,また,「営業部に所属するユーザ全員に対して参照だけを許可したい」場合,まず「第一設計部に所属するユーザ全員に対して参照と編集を許可する」というACEと,「営業部に所属するユーザ全員に対して参照だけを許可する」というACEを作成します。次に,これらのACEを要素として,ACLを作成します。このACLを,パブリックACLを表すオブジェクトのプロパティ(dbrProp_ACLプロパティ)として設定することで,複数のオブジェクト間で共有できるパブリックACLが作成できます。文書Aと文書Bには,このパブリックACLを参照するように設定します。

なお,文書やコンテナを表すオブジェクトからパブリックACLを参照することを,バインドといいます。また,パブリックACLのバインドを解除することを,アンバインドといいます。パブリックACLの概要を,次の図に示します。

図3-76 パブリックACLの概要

[図データ]

パブリックACLは,CdbrPublicACLクラスのオブジェクトとしてCreateObjectメソッドをコールして作成します。このオブジェクトは,DMAオブジェクトの,edmClass_PublicACLクラスのオブジェクトを構成要素とします。パブリックACLとして,複数のオブジェクト間で共有するために設定するアクセス制御情報は,CdbrPublicACLオブジェクトのdbrProp_ACLプロパティとして設定します。

また,パブリックACLは,ローカルACLやセキュリティACLとは異なり,独立して文書空間に存在する,OIIDを持つオブジェクトです。ユーザ定義プロパティを設定したり,OIIDやユーザ定義プロパティを指定して検索も実行したりすることもできます。ユーザ定義プロパティの設定方法については,マニュアル「DocumentBroker Version 3 システム導入・運用ガイド」を参照してください。

なお,パブリックACLには,それ自身をアクセス制御するためのACFlagやローカルACLはありません。パブリックACLに対するアクセス権は,次に示すユーザに与えられています。

表3-14 パブリックACLに対するアクセス権

実行できる操作対象
作成文書空間にオブジェクト作成権限を持つユーザ
参照すべてのユーザ
ローカルACLとユーザプロパティの変更セキュリティACLでアクセス制御情報変更権が与えられているユーザ,パブリックACLの所有者およびセキュリティ管理者
セキュリティACLの変更パブリックACLの所有者およびセキュリティ管理者
削除パブリックACLの所有者およびセキュリティ管理者
(b) ローカルACL

ローカルACLは,オブジェクトごとのアクセス権を設定するためのACLです。

ローカルACLは,個々のオブジェクトのdbrProp_ACLプロパティとして設定します。dbrProp_ACLプロパティは,ACEを表すオブジェクトを構成要素とした,VariableArray型プロパティです。

(c) セキュリティACLSecurity-ACL

DocumentBrokerでは,ACFlagやACLを使用して,オブジェクトに対するユーザのアクセスを制御します。オブジェクトに対してアクセス権を持たないユーザでも,ACFlagやACLを変更すれば,アクセス権を得ることができます。このため,ACFlagやACLは,適切な権利を持つユーザだけが変更でき,それ以外のユーザからは変更されないように制御する必要があります。

アクセス制御情報を変更するための権利を,アクセス制御情報変更権といいます。アクセス制御情報変更権は,各オブジェクトのプロパティに,ACLとして設定されています。アクセス制御情報変更権を制御するためのACLをセキュリティACLといいます。

セキュリティACLは,オブジェクトのdbrProp_SACLプロパティに,VariableArray型プロパティとして設定します。

CreateObjectメソッドをコールしてオブジェクトを作成した時点では,オブジェクトの所有者およびセキュリティ管理者がアクセス制御情報変更権を持っています。また,CreateObjectメソッドの引数としてdbrProp_SACLプロパティの初期値を設定した場合は,初期値として設定されたユーザやグループもアクセス制御情報変更権を持ちます。

作成後のオブジェクトで,アクセス制御情報変更権をほかのユーザやグループに対して与えたい場合は,所有者またはセキュリティ管理者が必要に応じてセキュリティACLを変更してください。

なお,パブリックACLはオブジェクトとして独自のセキュリティACLを持っています。このため,パブリックACLをバインドしている文書やコンテナを表すオブジェクトのアクセス制御情報変更権を持つユーザであっても,パブリックACLに設定されたACLを変更することはできません。また,パブリックACLのアクセス制御情報変更権を持つユーザが,そのパブリックACLをバインドしているオブジェクトのACFlagまたはACLを変更することはできません。