![]() | |
Sun™ Identity Manager 8.0 配備に関する技術概要 |
第 1 章
属性の処理この章では、Identity Manager 配備で使用される属性の概念的な概要について説明します。この章で説明するトピックは次のとおりです。
関連する章属性は、Identity Manager のさまざまな処理の中で処理され、このマニュアルセット全体で説明されています。次の章には、属性に関する多くの情報が含まれています。
属性とは属性は、Identity Manager オブジェクトや外部リソースの特性を定義および処理するために使われる名前と値のペアです。フォーム、ワークフロー、規則などの Identity Manager コンポーネントは、通常の処理でデータアクセスやデータ変換の主要部分として属性を呼び出します。
属性のタイプ
Identity Manager 配備のオブジェクトにはさまざまな属性を入れることができますが、通常は次の節で説明するタイプの属性を使用します。
概要の属性
すべての持続オブジェクトは、概要の属性のセットを公開します。概要の属性は Identity Manager Schema Configuration オブジェクトで設定され、リスト処理の結果として各項目に返される値が含まれます。各 PersistentObject サブクラスは、getSummaryAttributes メソッドを上書きすることにより、デフォルトの属性セットを拡張できます。
概要の属性は、直列化されて文字列になったときに概要の属性全体の長さが制限されるため、通常は単一の値です。
ユーザーオブジェクト用のこれらの属性は、Identity Manager Schema Configuration オブジェクトを使って直接設定できます。詳細については、「IDM Schema Configuration オブジェクト」を参照してください。
クエリー可能な属性
すべての持続オブジェクトは、クエリー可能な属性のセットを公開します。クエリー可能な属性には、フィルタや照合に使用する値のセットが含まれ、これらの属性は Identity Manager Schema Configuration オブジェクトで設定されます。クエリー可能な属性は複数の値をとることができます。
インライン属性
オブジェクトの型ごとに、クエリー可能な属性を最大 5 個までインライン属性として指定できます。インライン属性は、Identity ManagerRepository Configuration オブジェクトで設定されます。
属性をインラインとして指定すると、その属性に対するクエリーのパフォーマンスを最適化するようデータストアに要求します。
Identity Manager は、通常、メインオブジェクトテーブルとは別個の属性テーブル内の行としてクエリー可能な属性の各値を格納します。属性テーブルをオブジェクトテーブルに結合することにより、AttributeCondition と一致するオブジェクトを選択できます。
ただし、Identity Manager はインライン属性の値をその型のオブジェクトテーブルに直接格納します。属性をインラインとして指定すると、Identity Manager はより効率的な SQL を生成できます。メインオブジェクトテーブル上の列の式は、対応する属性テーブルへの JOIN (または対応する属性テーブルに対する EXISTS 述語) よりも高速になります。これにより、属性に対するすべてのクエリーのパフォーマンスが向上します。
インライン属性の特徴は次のとおりです。
拡張属性
拡張属性は、組み込み以外の属性 (ユーザーの employeeNumber など) です。 employeeNumber を使用してクエリーを実行したいという顧客がほとんどであるため、設定を介してこの属性をクエリー可能な拡張属性として追加することができます。
拡張属性は組み込みではないため、これらの属性は IDM Schema Configuration オブジェクトの <IDMAttributeConfigurations> セクションに存在する必要があります。このセクションでは属性名、構文 (string、int、date など)、および属性が単一値と複数値のどちらであるかが取得されます。名前を付けられた属性 (MemberObjectGroups など) は複数のオブジェクトクラス中に存在することがあるため、IDMObjectClassConfiguration では、どの属性がどのクラスに存在するのかが取得されます。
User 拡張属性の詳細については、『Identity Manager ワークフロー、フォーム、およびビュー』の「Identity Manager のビュー」章で、ユーザービューの accounts[lighthouse] 属性に関する説明を参照してください。
組み込み属性および拡張属性は、クエリー可能または概要として公開できます。一部の組み込み属性には REFERENCE 構文がありますが、拡張属性は REFERENCE にすることが許可されていません。
効果的なスキーマの <Comments> セクションには、関連するオブジェクトクラスの拡張属性のほかに、使用可能な内部属性に関する情報が含まれています。Identity Manager デバッグページで「Display Schema」ボタンをクリックし、リストから ObjectClass スキーマを選択すると、この情報を参照できます。
オペレーショナル属性
Identity Manager では、リポジトリが正常に機能するために必要ないくつかの属性が事前に定義されています。ID、type、および name は特に重要です。
リポジトリに格納されているすべての PersistentObject には、グローバルに一意な内部識別子 (ID) があります。ID 値は時間と空間を越えて一意であり、生成された ID 値は再使用されません。事前に定義された Identity Manager オブジェクトの中には、プログラム定数として定義された既知の識別子を持つものがあります。これらは、擬似 ID と呼ばれます。リポジトリでは、オブジェクトの ID が変更されないことが保証されます。
同じ型のオブジェクトは、通常、同じ Java クラスにマップされます。つまり、直列化復元されるときに同じ Java クラスのインスタンスとして構築されます。型と Java クラスが 1 対 1 で対応しない場合は、少なくとも同じ型のすべてのオブジェクトが同じ機構を使って、対応する Java クラスを検索します。たとえば、一部の型のオブジェクトが完全修飾クラス名を含む class 属性を公開するなどです。
オブジェクトの名前は、型の中で一意である必要があります。つまり、ある型の 1 つのオブジェクトは特定の名前しか持つことができません。ただし、型の異なる別のオブジェクトが同じ名前を持つことは可能です。これにより、型ごとに従属する名前空間が効果的に定義されます。オブジェクトの名前は変更できますが、オブジェクトの ID は変更できません。
ビュー属性
ビューとは、リポジトリに格納された 1 つ以上のオブジェクトを組み合わせて構成した名前と値のペア、またはリソースから読み取った名前と値のペアの集合です。ビュー属性では、文字列などの個々の値、リストなどの集合、または別のオブジェクトの参照を値として使用できます。
Identity Manager の管理者インタフェースまたはユーザーインタフェースからユーザーアカウントの作成または変更を実行する場合は、ユーザービューを間接的に処理します。ワークフロープロセスも、ユーザービューと連携しています。要求をワークフロープロセスに渡すと、属性がビューとしてプロセスに送信されます。ワークフロープロセスの中で手動プロセスを要求すると、ユーザービューの属性を表示して詳細に変更できます。
ビューの処理については、『Identity Manager ワークフロー、フォーム、およびビュー』の「Identity Manager のビュー」の章で詳細に説明しています。
リソースユーザー属性
リソースユーザー属性 は、Identity Manager のアカウント属性をスキーママップ (右側) のリソースアカウント属性にマップします。属性のリストはリソースごとに異なります。使用していない属性は、スキーママップページから削除できます。ただし、属性の追加には、アダプタのコードを編集する必要がある場合があります。
リソースユーザー属性は、アダプタがリソースと通信しているときにだけ使用されます。
リソースユーザー属性の処理については、『Identity Manager リソースリファレンス』で詳細に説明しています。
アイデンティティーシステムユーザー属性
アイデンティティーシステムユーザー属性は、リソースユーザー属性に対応する Identity Manager 内部の値を定義します。アイデンティティーシステムユーザー属性は、規則、フォーム、およびその他の Identity Manager 固有の機能で使用できます。Identity Manager では、スキーママップの左側にこれらの属性が表示されます。
アイデンティティーシステムユーザー属性の処理については、『Identity Manager リソースリファレンス』で詳細に説明しています。
その他の標準的な属性
その他の標準属性の一部を使用すると、オブジェクト (MemberObjectGroups、subType、authType など) へのアクセスを制限したり、履歴情報 (作成者、作成日など) を表示したりできます。
MemberObjectGroups
すべての持続オブジェクトは、少なくとも 1 つのオブジェクトグループに属しています。このような複数値属性の各値は、ObjectGroup オブジェクトの ID です。
ObjectGroup は、Identity Manager の管理者インタフェースとユーザーインタフェースでは組織として公開されます。ObjectGroup メンバーシップは、セッションレベルでの認証 (つまり、管理者およびユーザーのリポジトリオブジェクトへのアクセス) を制御しますが、リポジトリ自体はオブジェクトグループのメンバーシップを無視します。
creator、createDate、lastModifier、および lastModDate
これらの値は、各オブジェクトの履歴情報を記録します。これらの属性はリポジトリが管理しますが、リポジトリが使用することはありません。
PropertyList
すべての持続オブジェクトは、任意のプロパティーのリストを格納できます。この機能は、一般にあまり使用されません。
subType
すべての持続オブジェクトは subType 属性を持つことができます。たとえば、Identity Manager は Attribute.SUBTYPE を使って利用可能な相関規則と確認規則の個々のリストを選択します。
authType
authType 属性を用いると、組織 (オブジェクトグループ) を管理しないユーザーに、限られた範囲内での、限定された認証を付与することができます。これらの主体は、Identity Manager の標準の認証付与スキームにおいては、これ以外の方法では権限を得ることができません。
属性条件を使用する属性条件は、属性の値を評価する式です。属性条件は、特定の条件に一致するオブジェクトのサブセットを選択するためによく使われます。
個々の属性条件は、1 つの条件を表し、次の要素で構成されます。
属性条件の演算子
AttributeCondition には、次のような演算子が定義されています。
注
RelationalDataStore は、各属性条件を演算の WHERE 句の一部となる適切な述語に変換することにより、評価を最適化します。しかしながら、複数値の属性の処理に特別なロジックは必要ありません。RelationalDataStore は、これを処理する適切な SQL DML を自動的に生成します。
属性条件は、属性の値ごとに適用されます。特に演算子 NE は、指定された属性について、指定されたオペランドと等しい値がオブジェクトにない場合かつその場合にかぎり true になります。演算子 EQ は、指定された属性の、指定されたオペランドと一致する値がオブジェクトに少なくとも 1 つある場合に true になります。
暗黙的な AND 結合
属性条件のセットは、暗黙的に AND 結合されます。つまり、属性条件のセットは、セットに含まれるすべての属性条件が true と評価された場合かつその場合にかぎり true と評価されます。逆に、セット内のいずれかの属性条件が false と評価されると、ただちに属性条件のセットが false と評価されます。
Identity Manager の属性条件には、一般的に使用される演算子が公開されています。通常は、Identity Manager の属性条件を使って一連の選択条件を表現できます。表現できない条件もごく一部ありますが、多くの場合、クエリー可能な属性を追加するか、クエリー可能な属性の表現を変更することによって、そのような条件にも適切に対応できます。
サンプルシナリオ: 組織にユーザーメンバー規則を設定する
次の属性を使用すると、特定組織のユーザーのセットを識別できます。
「OR 結合」の結果が正しく得られるように、複数の属性条件を使用しないでください。代わりに、次のようにオペランドのリストとともに「is one of」演算子を使用します。
<list>
<new class='com.waveset.object.AttributeCondition'>
<s>firstname</s>
<s>is one of</s>
<list>
<s>Nicola</s>
<s>Paolo</s>
</list>
</new>
</list>
サンプルシナリオ: 管理ロールを持たないすべてのユーザーを含める
指定された管理者ロールを持つユーザーを除くすべてのユーザーを含める規則が必要です。
属性条件は暗黙的に AND 結合されるため、次の 2 つの属性条件を使用できます。
この 2 つの条件を組み合わせることにより、指定されたリストに含まれない管理者ロールを持ったユーザーを返す規則を作成できます。
シークレット属性を使用するIdentity Manager では、編集フォームにアスタリスク付きで表示されるように属性を設定した場合でも、結果ページの属性の値は平文形式で表示されます。属性値がキャッシュに表示されないようにする場合は、属性をシークレットとして登録できます。シークレット属性の値は、ブラウザのキャッシュに平文形式で表示されませんが、これらの属性は、ほかの属性と同じように Identity Manager で処理されます。
たとえば、社会保障番号は、一般的にシークレット属性として登録される属性です。
結果テーブルを描画するときに、Identity Manager は、シークレットとして登録されている属性があるかどうかを確認し、シークレット属性の値をアスタリスクのみで表示します。
シークレット属性を登録するには、次のようにしてシークレット属性を System Configuration オブジェクトに追加します。
<Attribute name='secretAttributes'>
<List>
<String>email</String>
<String>myAttribute</String>
</List>
</Attribute>