ビジネス データ カタログのセキュリティ トリマ
Microsoft Office SharePoint Server 2007 の Microsoft Office SharePoint Server 2007 でのエンタープライズ検索 は、クロール時に取得されたセキュリティ情報を使用して検索結果のクエリ時セキュリティ トリミングを実行します。ただし、これでは十分でない可能性があるシナリオがある場合があります。たとえば、バックエンド アプリケーションがクロール時にセキュリティ情報を提供できない場合や、最新のセキュリティ情報が必要なときに毎回クロールすることが実際的でない場合などです。このシナリオに対処するために、エンタープライズ検索のクエリ処理エンジンでは、動的なクエリ時セキュリティ トリミング モジュールに適用するフレームワークを提供して、1 つのユーザー クエリの結果ごとに、検索結果に表示する前にセキュリティによってトリミングできるようにしています。
ビジネス データ カタログでは、CheckAccess インスタンスを実装して、エンティティ インスタンスごとのセキュリティ トリミング、つまりエンティティ インスタンス レベルのセキュリティのサポートを組み込むことができます。
ビジネス データ カタログのセキュリティ トリマでは、ビジネス データ カタログでインデックス処理されたエンティティ インスタンス (検索ドキュメント) を、ユーザーに返す前にカスタム セキュリティによってトリミングできます。ユーザーの権限を判断するバックエンド アプリケーションのロジックを使用して、バックエンド データに対する現在のユーザーの権限に基づいて実行時の結果セット (エンティティ インスタンスを含む) をトリミングします。実際のバックエンド アプリケーションが 1 つ以上のエンティティ インスタンスに対する現在のユーザーの権限をチェックするパブリック メソッドを提供することを前提としています。そのメソッドの入力パラメータはチェック対象の EntityInstance オブジェクトの ID を受け入れる必要があり、出力パラメータは現在のユーザーのアクセス権を、対応する long 整数の配列 (または long 整数に変換可能ないくつかの値) として返す必要があります。
そのような API が使用可能になったら、ビジネス データ カタログのメタデータの作成者は、アプリケーション定義ファイルで AccessChecker という MethodInstanceType を定義し、Finder、SpecificFinder などの場合とほとんど同じ方法でバックエンド API にマップできます。AccessChecker メソッド インスタンスが使用可能になったら、ビジネス データ カタログのセキュリティ トリマはそれを使用して、CheckAccess メソッドを介してユーザーの権限を判断できます。
ビジネス データ カタログのセキュリティ トリマは、関連付けられているクロール ルールに一致する検索結果をクエリ エンジンが返すたびに CheckAccess メソッドを実行します。Entity.CheckAccess メソッドが呼び出されると、ビジネス データ カタログは、そのエンティティ用に登録された AccessChecker メソッド インスタンスに記述されているバックエンド API を実行します。バックエンド API は、現在のユーザーがそのエンティティ インスタンスに対して持っている権限を返します。これが Entity.CheckAccess メソッドに返され、最後にセキュリティ トリマに返されます。セキュリティ トリマはこの情報を使用して、トリミングしてから結果をユーザーに表示します。
重要
完全なチュートリアルについては、「[ウォークスルー] ビジネス データ カタログのセキュリティ トリマを使用して検索結果をトリミングする」を参照してください。
内部の詳細
ビジネス データ カタログのセキュリティ トリマは、クエリ プロセッサが各 URL の提供元の LobSystem オブジェクトおよびエンティティの特定後に Entity.CheckAccess メソッドに提供した URL を解析することによって、ISecurityTrimmer.CheckAccess(IList<String>, IDictionary<String, Object>) メソッドを Entity.CheckAccess([], LobSystemInstance) メソッドにマップします。
ただし、ISecurityTrimmer.CheckAccess は "Yes" または "No" の値の配列を返す必要があり、Entity.CheckAccess メソッドは権限ベクトルの配列を返すので、ビジネス データ カタログのセキュリティ トリマは、エンティティ オブジェクト上の DisplaySearchResultRightsMaskPropertyName という特別なプロパティを読み取ることによって権限ベクトルを Yes または No に変換する方法を提供します。
さらに、ビジネス データ カタログのセキュリティ トリマは、検索クエリ オブジェクト モデルの 1 回の呼び出しで実行するアクセス チェックの数を制限しようとします。たとえば、インデックスに 100 万個のドキュメントが含まれており、すべてのドキュメントに共通するキーワードが 1 つある場合に、それを検索するクエリを実行するユーザーが、100 万番目のドキュメントに対するアクセス権のみを持ち、それ以外のすべてのドキュメントに対するアクセス権を持っていないとすると、クエリ プロセッサはすべてのドキュメントが検査されるまで Entity.CheckAccess の呼び出しを続けます。これには長い時間がかかる可能性があります。そこで、ビジネス データ カタログのトリマは、カスタム構成可能な制限値 (既定は 100) によって、調べるドキュメント数を追跡します。制限を超えると、例外をスローして、クエリの範囲を絞り込むように要求するメッセージをエンド ユーザーに表示します。