Información general del Optimizador de seguridad personalizado para los resultados del motor de búsqueda Enterprise Search

Enterprise Search de Microsoft Office SharePoint Server 2007 realiza la optimización de seguridad de resultados de búsqueda en el momento de la consulta. Los resultados se optimizan en función de la identidad del usuario que envía la consulta usando la información de seguridad obtenida en el rastreador. Para obtener más información acerca del funcionamiento, consulte Modelo de seguridad del motor de búsqueda Enterprise Search.

Sin embargo, es posible que tenga determinadas situaciones en las que los resultados integrados de la optimización de seguridad no sean suficientes para sus requisitos y tenga que implementar la optimización de seguridad personalizada. Enterprise Search proporciona compatibilidad para la optimización de seguridad personalizada a través de la interfaz ISecurityTrimmer.

En este tema se proporciona información sobre la interfaz ISecurityTrimmer y describe los tres pasos necesarios para utilizar un Optimizador de seguridad personalizado para Enterprise Search:

  1. Implementación de la interfaz ISecurityTrimmer

  2. Implementación del Optimizador de seguridad personalizado

  3. Registro del Optimizador de seguridad personalizado

Implementación de la interfaz ISecurityTrimmer

Para crear un Optimizador de seguridad personalizado para los resultados de Enterprise Search, debe crear un componente que implementa la interfaz ISecurityTrimmer. Esta interfaz es parte del espacio de nombres Microsoft.Office.Server.Search.Query, que se encuentra en Microsoft.Office.Server.Search.dll.

La interfaz ISecurityTrimmer contiene dos métodos que debe implementar: Initialize y CheckAccess.

Método Initialize

El método Initialize se ejecuta cuando el Optimizador de seguridad se carga en el proceso de trabajo y no se ejecuta de nuevo hasta que se recicle el proceso de trabajo. Dos parámetros se pasan en el método, un objeto System.Collections.Specialized.NameValueCollection que contiene las propiedades de configuración especificadas para el Optimizador de seguridad y un objeto SearchContext que representa el servicio de búsqueda del proveedor de servicios compartidos (SSP).

Se especifican las propiedades de configuración cuando se registra el Optimizador de seguridad personalizado (se explica más adelante en este tema).

Puede tener acceso a una propiedad de configuración individual mediante el nombre de propiedad especificado cuando se registró el Optimizador de seguridad. Por ejemplo, el código siguiente recupera el valor de una propiedad de configuración denominado CheckLimit.

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

Para un ejemplo de código que muestra una implementación del método Initialize, vea Paso 1: Crear el optimizador de seguridad personalizado y Paso 3 (opcional): Especificar un límite configurable del número de direcciones URL de rastreo comprobadas en Tutorial: Uso de un optimizador de seguridad personalizado para los resultados de la búsqueda.

Método CheckAccess

El método CheckAccess se ejecuta al menos una vez cada vez que una consulta de búsqueda devuelve resultados que coincidan con la regla de rastreo asociada con el Optimizador de seguridad.

Nota

El método CheckAccess se puede ejecutar varias veces para una búsqueda de consulta, en función del número de resultados que se pasan al Optimizador de seguridad.

Dos parámetros se pasan a este método: un objeto System.Collections.Generic.IList que contiene las direcciones URL de cada elemento de contenido de los resultados de la búsqueda que coincidan con el regla de rastreo y un objeto System.Collections.Generic.IDictionnary que a los implementadores pueden utilizar para realizar un seguimiento de la información a través de varias CheckAccess llamadas al método para la misma consulta de búsqueda.

El método CheckAccess devuelve un objeto System.Collections.BitArray que representa una matriz de true o valores false, uno para cada dirección URL de elemento de contenido en el objeto IList que se pasa como el primer parámetro del método. El motor de consultas utiliza estos valores para realizar la optimización de seguridad de los resultados. Si es true, el elemento se incluye en los resultados devueltos; si es false, el elemento está eliminado.

Al implementar el método CheckAccess, se pueden utilizar dos fragmentos de información para cada elemento para determinar si se va a devolver true o false para el elemento: la identidad del usuario que envió la consulta y la dirección URL del elemento de contenido.

Recuperación de la identidad del usuario

Se puede recuperar la identidad del usuario que envió la consulta de dos maneras, dependiendo la autenticación configurada para el sitio de SharePoint.

Si el sitio está configurado para utilizar la autenticación de Windows, el siguiente código recupera el nombre de usuario.

string strUser = WindowsIdentity.GetCurrent().Name;

También debe incluir la siguiente directiva de espacio de nombres.

using System.Security.Principal;

Si el sitio está configurado para utilizar formularios o la autenticación personalizada, el siguiente código recupera el nombre de usuario.

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

También debe incluir la siguiente directiva de espacio de nombres.

using System.Web;

Nota

También necesitará tener una referencia en el proyecto para System.Web.

Para un ejemplo de código que muestra una implementación básica del método CheckAccess, vea Paso 1: Crear el optimizador de seguridad personalizado en Tutorial: Uso de un optimizador de seguridad personalizado para los resultados de la búsqueda.

Implicaciones de rendimiento

Un Optimizador de seguridad personalizado afectará al rendimiento del motor de consultas, por lo que debe utilizar un optimizador personalizado sólo si la funcionalidad de optimización de seguridad que se incluye con Enterprise Search no cumple los requisitos.

Si debe utilizar un Optimizador de seguridad personalizado, le recomendamos que implemente un límite en el número de comprobaciones de acceso que realiza el Optimizador para una sola consulta. Por ejemplo, imagine un escenario donde el índice de contenido contiene millones de documentos y hay una palabra clave común a todos los documentos. Un usuario ejecuta una consulta en el índice de contenido, pero ese usuario tiene acceso sólo en el documento número un millón, no a los demás. Sin un límite para el número de comprobaciones de acceso, se llama varias veces al método CheckAccess hasta que finalmente se devuelve el documento al que tiene acceso el usuario. En este escenario, sería mucho mejor si el número de comprobaciones de acceso se limitan, por ejemplo, a 200 comprobaciones y, a continuación, las comprobaciones de acceso se detienen y se devuelve un mensaje al usuario que solicita que perfeccione su propia consulta para mejorar los resultados.

Para ello, puede realizar el seguimiento del número de elementos activados y, a continuación, iniciar una excepción PluggableAccessCheckException. La clase PluggableAccessCheckException proporciona un constructor con un parámetro en el que se puede especificar una cadena que contiene un mensaje para el usuario. El motor de consultas, a continuación, el motor de consulta devuelve este texto en lugar de los resultados como una respuesta a la consulta de búsqueda.

Paso 3 (opcional): Especificar un límite configurable del número de direcciones URL de rastreo comprobadas en Tutorial: Uso de un optimizador de seguridad personalizado para los resultados de la búsqueda contiene un ejemplo que muestra una forma de cómo implementarlo.

Implementación del componente del Optimizador de seguridad personalizado

Después de crear el Optimizador de seguridad personalizado, debe implementarlo en la memoria caché de ensamblados global en cualquier servidor de la función de consultas. Paso 2: implementación y registro del optimizador de seguridad personalizado describe los pasos para implementar el Optimizador de seguridad personalizado en la caché de ensamblados global.

Registro del Optimizador de seguridad personalizado

El registro de un Optimizador de seguridad está asociado con un SSP específico y una regla de rastreo. Si desea usar el Optimizador de seguridad con varios SSP, debe registrar el Optimizador de seguridad para cada SSP, así como registrarlo para cada regla de rastreo al que está asociado.

Puede usar la utilidad stsadm para registrar el Optimizador de seguridad especificando la operación registersecuritytrimmer. La siguiente tabla describe los parámetros que utiliza la operación.

Parameter Description

ssp

Requerido. Nombre del SSP; por ejemplo, SharedServices1.

id

Requerido. Identificador del Optimizador de seguridad. Este valor es único; si se registra un identificador de seguridad con un identificador ya registrado para otro Optimizador, el registro del primero se sobrescribe con el registro del segundo.

typeName

Requerido. Nombre seguro del ensamblado del Optimizador de seguridad personalizado.

rulepath

Requerido. Regla de rastreo para el Optimizador de seguridad.

configprops

Opcional. Pares de nombre-valor que especifican las propiedades de configuración. Debe tener el siguiente formato:

Nombre1~Valor1~Nombre2~Valor~ …

Se muestra un ejemplo de un comando básico para registrar un Optimizador de seguridad personalizado en Paso 2: implementación y registro del optimizador de seguridad personalizado. Paso 3 (opcional): Especificar un límite configurable del número de direcciones URL de rastreo comprobadas proporciona un ejemplo que especifica las propiedades de configuración del Optimizador de seguridad.

Vea también

Otros recursos

Modelo de seguridad del motor de búsqueda Enterprise Search
Tutorial: Uso de un optimizador de seguridad personalizado para los resultados de la búsqueda