Schreiben eines benutzerdefinierten Security Trimmers für die SharePoint Server-Suche
Letzte Änderung: Donnerstag, 8. Dezember 2011
Gilt für: SharePoint Server 2010
Inhalt dieses Artikels
Implementieren der "ISecurityTrimmer2"-Schnittstelle
Bereitstellen der benutzerdefinierten Komponente mit dem Security Trimmer
Registrieren des benutzerdefinierten Security Trimmers
In bestimmten Szenarien jedoch sind die Ergebnisse der integrierten Einschränkung aus Sicherheitsgründen für Ihre Anforderungen möglicherweise nicht ausreichend, und Sie müssen eine benutzerdefinierte Einschränkung aus Sicherheitsgründen vornehmen. SharePoint Server-Suche unterstützt benutzerdefinierte Einschränkung aus Sicherheitsgründen über die ISecurityTrimmer2-Schnittstelle.
In diesem Thema finden Sie Informationen zur ISecurityTrimmer2-Schnittstelle. Außerdem werden die folgenden Schritte erläutert, die Sie für die Verwendung eines benutzerdefinierten Security Trimmers für SharePoint Server-Suche ausführen müssen:
Implementieren der ISecurityTrimmer2-Schnittstelle.
Bereitstellen des benutzerdefinierten Security Trimmers.
Registrieren des benutzerdefinierten Security Trimmers.
Implementieren der "ISecurityTrimmer2"-Schnittstelle
Zum Erstellen eines benutzerdefinierten Security Trimmers für Suchergebnisse müssen Sie eine Komponente erstellen, die die ISecurityTrimmer2-Schnittstelle implementiert. Diese Schnittstelle ist Teil des Microsoft.Office.Server.Search.Query-Namespace in Microsoft.Office.Server.Search.dll.
Die ISecurityTrimmer2-Schnittstelle enthält zwei Methoden, die Sie implementieren müssen: Initialize(NameValueCollection, SearchServiceApplication) und CheckAccess(IList<String>, IDictionary<String, Object>, IIdentity).
"Initialize"-Methode
Die Initialize-Methode wird ausgeführt, wenn der Security Trimmer in den Arbeitsprozess geladen wird, und wird erst dann wieder ausgeführt, wenn der Arbeitsprozess wiederverwendet wird. Zwei Parameter werden an die Methode übergeben: ein NameValueCollection-Objekt, das die Konfigurationseigenschaften enthält, die für den Security Trimmer bei der Registrierung in der Suchdienstanwendung angegeben wurden, und ein SearchServiceApplication-Objekt, das die Suchdienstanwendung darstellt.
Sie können auf eine einzelne Konfigurationseigenschaft zugreifen, indem Sie den Eigenschaftennamen verwenden, der bei der Registrierung des Security Trimmers angegeben wurde. Mit dem folgenden Code wird beispielsweise der Wert für eine Konfigurationseigenschaft namens CheckLimit abgerufen.
public void Initialize(NameValueCollection staticProperties, SearchServiceApplication searchApplication)
{
if (staticProperties["CheckLimitProperty"] != null)
{
intCheckLimit = Convert.ToInt32(staticProperties["CheckLimitProperty"]);
}
}
"CheckAccess"-Methode
Die CheckAccess-Methode wird jedes Mal, wenn eine Suchabfrage Ergebnisse zurückgibt, die die dem Security Trimmer zugeordnete Durchforstungsregel erfüllen, mindestens einmal ausgeführt.
Wichtig |
---|
Die CheckAccess-Methode kann mehrere Male für eine einzige Suchabfrage ausgeführt werden, je nach der Anzahl der Ergebnisse, die an den Security Trimmer übergeben werden. |
Drei Parameter werden an diese Methode übergeben: ein IList<T>-Objekt, das die URLs für jedes Inhaltselement aus den Suchergebnissen enthält, die die Durchforstungsregel erfüllen, ein IDictionary<TKey, TValue>-Objekt, mit dem Implementierer Informationen über mehrere CheckAccess-Methodenaufrufe für die gleiche Suchabfrage verfolgen können, und ein IIdentity-Objekt, aus dem Implementierer die Identität des Benutzers abrufen können.
Die CheckAccess-Methode gibt ein BitArray-Objekt zurück, das ein Array aus true- oder false-Werten darstellt, einer für jede Inhaltselement-URL im IList-Objekt, das als erster Parameter der Methode übergeben wird. Anhand dieser Werte führt das Abfragemodul die Einschränkung aus Sicherheitsgründen der Ergebnisse aus. Ist der Wert true, wird das Element in die zurückgegebenen Ergebnisse einbezogen; ist der Wert false, wird das Element entfernt.
Beim Implementieren der CheckAccess-Methode können Sie anhand von zwei Informationen für jedes Element feststellen, ob true oder false für das Element zurückgegeben werden soll: die Identität des Benutzers, der die Abfrage gesendet hat, und die URL des Inhaltselements.
Abrufen der Benutzeridentität
Sie können die Identität des Benutzers abrufen, indem Sie wie folgt auf den aktuellen Prinzipal des Threads zugreifen.
IIdentity userIdentity = System.Threading.Thread.CurrentPrincipal.Identity;
Außerdem müssen Sie die folgende Namespacedirektive einfügen.
using System.Security.Principal;
Sie können die Identität des Benutzers auch aus dem passedUserIdentity-Parameter der CheckAccess-Methode abrufen.
Auswirkungen auf die Leistung
Ein benutzerdefinierter Security Trimmer hat Auswirkungen auf die Leistung des Abfragemoduls. Daher sollten Sie einen benutzerdefinierten Trimmer nur dann einsetzen, wenn die in SharePoint Server-Suche enthaltene Funktion für die Einschränkung aus Sicherheitsgründen Ihre Anforderungen nicht erfüllt.
Wenn Sie dennoch einen benutzerdefinierten Security Trimmer verwenden müssen, empfiehlt es sich, einen Grenzwert für die Anzahl der Zugriffsprüfungen, die der Trimmer für eine einzelne Abfrage ausführt, zu implementieren. Ein Beispiel: Angenommen, der Inhaltsindex enthält eine Million Dokumente, und ein einziges Schlüsselwort ist allen Dokumenten gemeinsam. Ein Benutzer führt eine Abfrage in dem Inhaltsindex aus, er hat aber nur Zugriff auf das millionste Dokument, nicht auf die anderen. Ohne einen Grenzwert für die Anzahl der Zugriffsprüfungen wird die CheckAccess-Methode immer und immer wieder aufgerufen, bis schließlich das Dokument zurückgegeben wird, auf das der Benutzer Zugriff hat. In diesem Szenario wäre die Leistung weitaus besser, wenn die Anzahl der Zugriffsprüfungen begrenzt würde, etwa auf 200 Prüfungen, die Zugriffsprüfungen angehalten würden und eine Meldung an den Benutzer zurückgegeben würde, wonach er seine Abfrage einschränken solle, um bessere Ergebnisse zu erzielen.
Hierfür überwachen Sie die Anzahl der überprüften Elemente und lösen anschließend eine PluggableAccessCheckException-Ausnahme aus. Die PluggableAccessCheckException-Klasse stellt einen Konstruktor mit einem Parameter bereit, mit dem Sie eine Zeichenfolge mit einer Meldung für die Benutzer angeben können. Sie können auch im PluggableAccessCheckException-Konstruktor eine Zeichenfolge angeben, die allerdings den Endbenutzern nicht angezeigt wird. Nach dem Auslösen der Ausnahme durch den Security Trimmer wird die trimmerID, die die Ausnahme bewirkt hat, herausgefiltert, und dieses Ergebnis wird aus den Suchergebnissen ausgeschlossen. Andere dem Security Trimmer unterliegende Ergebnisse werden, sofern vorhanden, zurückgegeben und im Fenster mit den Suchergebnissen angezeigt.
Ein Beispiel, in dem eine Möglichkeit der Implementierung veranschaulicht wird, finden Sie unter Schritt 3 in Exemplarische Vorgehensweise: Verwenden eines benutzerdefinierten Security Trimmer für SharePoint Server-Suchergebnisse.
Bereitstellen der benutzerdefinierten Komponente mit dem Security Trimmer
Nachdem Sie den benutzerdefinierten Security Trimmer erstellt haben, müssen Sie ihn im globalen Assemblycache auf jedem Server in der Abfragerolle bereitstellen. In Schritt 2 unter Exemplarische Vorgehensweise: Verwenden eines benutzerdefinierten Security Trimmer für SharePoint Server-Suchergebnisse wird beschrieben, wie Sie den benutzerdefinierten Security Trimmer im globalen Assemblycache bereitstellen können.
Registrieren des benutzerdefinierten Security Trimmers
Eine Security Trimmer-Registrierung wird einer bestimmten Suchdienstanwendung und einer bestimmten Durchforstungsregel zugeordnet.
Mit der SharePoint 2010-Verwaltungsshell registrieren Sie einen benutzerdefinierten Security Trimmer, wobei Sie das Windows PowerShell-Cmdlet SPEnterpriseSearchSecurityTrimmer verwenden. Weitere Informationen zur Verwendung dieses Tools finden Sie unter Verwalten von Dienstanwendungen mit der SharePoint 2010-Verwaltungsshell.
In der folgenden Tabelle werden die Parameter beschrieben, die in dem Cmdlet verwendet werden.
Tabelle 1. Parameter, die vom SPEnterpriseSearchSecurityTrimmer-Cmdlet verwendet werden
Parameter |
Beschreibung |
---|---|
SearchApplication |
Erforderlich. Der Name der Suchdienstanwendung, z. B. "Suchdienstanwendung". |
typeName |
Erforderlich. Der starke Name der Assembly für den benutzerdefinierten Security Trimmer. |
RulePath |
Erforderlich. Die Durchforstungsregel für den Security Trimmer. |
id |
Erforderlich. Der Bezeichner (ID) des Security Trimmers. Dieser Wert ist eindeutig. Wird ein Security Trimmer mit einem Bezeichner registriert, der bereits für einen anderen Security Trimmer registriert ist, wird die Registrierung des ersten Trimmers mit der Registrierung für den zweiten Trimmer überschrieben. |
properties |
Optional. Die Name/Wert-Paare, die die Konfigurationseigenschaften angeben. Erforderliches Format: Name1~Value1~Name2~Value~… |
Ein Beispiel für einen einfachen Befehl zum Registrieren eines benutzerdefinierten Security Trimmers sehen Sie in Schritt 2 in Exemplarische Vorgehensweise: Verwenden eines benutzerdefinierten Security Trimmer für SharePoint Server-Suchergebnisse. In Schritt 3 der exemplarischen Vorgehensweise finden Sie ein Beispiel, mit dem Konfigurationseigenschaften für den Security Trimmer angegeben werden.