企业级搜索结果的自定义安全修整概述

Microsoft Office SharePoint Server 2007 企业级搜索在查询时执行搜索结果的安全修整。根据提交查询的用户的标识,通过使用从爬网程序获得的安全信息对结果进行修整。有关此过程如何工作的详细信息,请参阅企业级搜索安全模型

但是,可能会遇到某些特殊的情况,以致于内置的安全修整结果不能满足您的要求,并且您需要实施自定义安全修整。企业级搜索通过 ISecurityTrimmer 接口为自定义安全修整提供支持。

本主题提供有关 ISecurityTrimmer 接口的信息,并说明了将自定义安全修整程序用于企业级搜索时所需执行的以下三个步骤:

  1. 实现 ISecurityTrimmer 接口

  2. 部署自定义安全修整程序

  3. 注册自定义安全修整程序

实现 ISecurityTrimmer 接口

若要为企业级搜索结果创建自定义安全修整程序,必须创建一个实现 ISecurityTrimmer 接口的组件。此接口是 Microsoft.Office.Server.Search.Query 命名空间的一部分,位于 Microsoft.Office.Server.Search.dll 中。

ISecurityTrimmer 接口包含两个必须实现的方法:Initialize()CheckAccess()

Initialize 方法

Initialize 方法在安全修整程序加载到工作进程时执行,而且,在回收工作进程之前,此方法不会再次执行。传入此方法的参数有两个:一个 System.Collections.Specialized.NameValueCollection 对象,包含为安全修整程序指定的配置属性;以及一个 SearchContext 对象,表示共享服务提供程序 (SSP) 的搜索服务。

注册自定义安全修整程序(将在本主题后面讨论)时,您指定配置属性。

可以通过使用在注册安全修整程序时指定的属性名称访问单个配置属性。例如,下面的代码检索名为 CheckLimit 的配置属性的值。

public void Initialize(NameValueCollection trimmerProperties, SearchContext srchContext)
{
    int intCheckLimit = Convert.ToInt32(trimmerProperties["CheckLimit"]);
}

有关演示如何实现 Initialize 方法的代码示例,请参阅演练:对搜索结果使用自定义安全修整程序中的步骤 1:创建自定义安全修整程序步骤 3(可选):指定所检查的爬网 URL 数的可配置限制

CheckAccess 方法

每次搜索查询返回与安全修整程序所关联的爬网规则匹配的结果时,至少执行一次 CheckAccess 方法。

备注

CheckAccess 方法可以为一个搜索查询执行多次,具体视传递给安全修整程序的结果数目而定。

传入此方法的参数有两个:一个 System.Collections.Generic.IList 对象,包含与爬网规则匹配的搜索结果中的每个内容项的 URL;一个 System.Collections.Generic.IDictionnary 对象,实现者可以使用此对象在为同一个搜索查询调用的多个 CheckAccess 方法中跟踪信息。

CheckAccess 方法返回一个 System.Collections.BitArray 对象,表示 true 或 false 值的数组,每个值对应于 IList 对象(作为此方法的第一个参数传递)中的每个内容项 URL。查询引擎使用这些值来执行结果的安全修整。如果为 true,则项目包含在返回的结果中;如果为 false,则移除项目。

实现 CheckAccess 方法时,对于每个项目都可以使用两部分信息来确定为项目返回 true 还是 false:提交查询的用户的标识,以及内容项的 URL。

检索用户标识

可以通过两种方式检索提交查询的用户的标识,具体取决于为 SharePoint 网站配置的身份验证。

如果网站配置为使用 Windows 身份验证,则以下代码检索用户名。

string strUser = WindowsIdentity.GetCurrent().Name;

还必须包括以下命名空间指令。

using System.Security.Principal;

如果网站配置为使用表单或自定义身份验证,则以下代码检索用户名。

string strUser = HttpContext.Current.User.Identity.Name;

还必须包括以下命名空间指令。

using System.Web;

备注

还将需要在 System.Web 的项目中包含引用。

有关演示 CheckAccess 方法的基本实现的代码示例,请参阅演练:对搜索结果使用自定义安全修整程序中的步骤 1:创建自定义安全修整程序

性能影响

自定义安全修整程序将影响查询引擎的性能,所以仅应在企业级搜索随附的安全修整功能不能满足您的要求时才使用自定义修整程序。

如果您必须使用自定义安全修整程序,我们建议您限制修整程序为单个查询执行的访问权检查的次数。例如,考虑这种情况:内容索引中包含一百万个文档,并且所有文档都有一个共同的关键字。某用户为内容索引运行查询,但该用户仅有第一百万个文档的访问权,而没有其余文档的访问权。如果不限制访问权的检查次数,则会反复调用 CheckAccess 方法,直到最终返回用户具有访问权的文档。在这种情况下,如果限制访问权的检查次数(例如限制为 200 次检查),在达到此次数后停止访问权检查,并向用户返回一条消息,请求用户改进其查询以获得更好的结果,那么性能会好很多。

若要这样做,请跟踪检查的项目数,然后引发 PluggableAccessCheckException 异常。PluggableAccessCheckException 类提供一个具有一个参数的构造函数,可以在该参数中指定字符串,以包含返回给用户的消息。这样一来,查询引擎返回该文本而不是任何结果,以作为对搜索查询的响应。

演练:对搜索结果使用自定义安全修整程序中的步骤 3(可选):指定所检查的爬网 URL 数的可配置限制包含一个示例,演示了可以做到这样的一种方法。

部署自定义安全修整程序组件

创建自定义安全修整程序后,必须将它部署到查询角色中的任何服务器上的全局程序集缓存。步骤 2:部署和注册自定义安全修整程序说明了如何可以将自定义安全修整程序部署到全局程序集缓存的步骤。

注册自定义安全修整程序

安全修整程序注册与特定的 SSP 和爬网规则相关联。如果要将安全修整程序与多个 SSP 一起使用,则必须为每个 SSP 注册安全修整程序,并为安全修整程序所关联的每个爬网规则注册安全修整程序。

使用“stsadm”实用程序注册安全修整程序,以指定“registersecuritytrimmer”操作。下表说明了该操作使用的参数。

参数

说明

ssp

必需。SSP 的名称,例如,SharedServices1

id

必需。安全修整程序 ID。此值是唯一的;如果使用已为某个安全修整程序注册的 ID 注册另一个安全修整程序,则第一个修整程序的注册会被第二个修整程序的注册覆盖。

typeName

必需。自定义安全修整程序程序集的强名称。

rulepath

必需。安全修整程序的爬网规则。

configprops

可选。指定配置属性的名称-值对。必须采用以下格式:

名称1~值1~名称2~值~…

步骤 2:部署和注册自定义安全修整程序中演示了注册自定义安全修整程序的基本命令示例。步骤 3(可选):指定所检查的爬网 URL 数的可配置限制提供了为安全修整程序指定配置属性的示例。

See Also

概念

企业级搜索安全模型

演练:对搜索结果使用自定义安全修整程序