Langsam: PeoplePicker SharePoint + Large Active Directory Forest

7 September 2010 von Marek Kommentieren »

Seit Monaten habe ich eine Lösung für ein Problem mit dem PeoplePicker gesucht. Wir haben einen eigenen Form Authentification Provider auf Basis einer SQL DB erstellt. Leider versucht SharePoint standardmäßig an dieser Stelle die SID vom User im AD aufzulösen, obwohl es keine Active Directory Account waren. Das führte dazu, dass zwar der User recht schnell gefunden wurde, danach aber es bis zu 3 Minuten gedauert hat, bis SharePoint festgestellt hat, dass der Account in AD nicht existiert. Bei dem Kunden handelt es sich um eine sehr große Landschaft mit über 400.000 Account in vielen Domains.

Es existiert eine nicht dokumentierte Einstellung für den PeoplePicker, die es SharePoint dazu bringt, nur für domain\account, also nur bei Account mit einem Backslash ( \ ) die Funktion TranslateToSids aufzurufen.

System.Security.Principal.NTAccount.TranslateToSids(System.Security.Principal.IdentityReferenceCollection, Boolean ByRef

Das Verhalten vom PeoplePicker kann über stsadm konfiguriert werden. Leider keiner der Parameter hat das gewünschte Verhalten konfigurieren können:

Eigenschaftenname

Beschreibung

Peoplepicker-activedirectorysearchtimeout

Konfiguriert den Timeoutwert zum Ausstellen einer Abfrage für Active Directory.

Peoplepicker-distributionlistsearchdomains

Schränkt die Suche in einer Verteilerliste auf bestimmte Domänen ein.

Peoplepicker-nowindowsaccountsfornonwindowsauthenticationmode

Gibt an, dass Active Directory nicht durchsucht werden soll, wenn für den aktuellen Port die formularbasierte Authentifizierung verwendet wird.

Peoplepicker-onlysearchwithinsitecollection

Zeigt nur Benutzer an, die Mitglieder der Websitesammlung sind.

Peoplepicker-searchadcustomquery

Ermöglicht dem Administrator das Festlegen der benutzerdefinierten Abfrage, die an Active Directory gesendet wird.

Peoplepicker-searchadforests

Ermöglicht einem Benutzer die Suche in einer zweiten unidirektional vertrauenswürdigen Gesamtstruktur oder Domäne.

 

Quelle: http://technet.microsoft.com/de-de/library/cc263318(office.12).aspx

http://blogs.msdn.com/b/sharepoint/archive/2006/03/15/552331.aspx

Die Rettung kam dann vom Russmax-Blog. Er hat eine Einstellung gefunden, die das Verhalten für alle nicht domain\account entsprechend verändert.

Es lässt sich per PowerShell anpassen:

[System.Reflection.Assembly]::LoadWithPartialName(“Microsoft.SharePoint”)
$site = new-object -typename Microsoft.SharePoint.SPSite(“http://url-of-your-site”)
$site.WebApplication.PeoplePickerSettings
$ps=$site.WebApplication.PeoplePickerSettings
$wa=$site.WebApplication
$ps.ActiveDirectoryRestrictIsolatedNameLevel=$true;

$wa.Update();

Und es funktioniert jetzt richtig schnell!

 

Bookmark and Share

2 Kommentare

  1. Erik Neumann sagt:

    Hallo Marek,

    vielen Dank für Deinen Beitrag. Nach einer Lösung für die langen Suchzeiten von Usern habe ich schon sehr lange gesucht und werde jetzt erstmal testen!!

  2. Marek sagt:

    bin neugerig, ob es auch in Deinem Szenario hilft…warte auf Feedback

Einen Kommentar hinterlassen