In unserem Kundenportal ist vor einigen Tagen ein bemerkenswerter Fehler aufgetreten. Nachdem wir Probleme mit einem Account bzw. dessen Profildaten hatten, haben wir diesen Account aus dem ActiveDirectory und aus der SharePoint-internen Benutzerverwaltung gelöscht und wieder unter dem gleichen Namen neu angelegt. Um zu probieren, ob dieser neu-angelegte Account wieder einwandfrei funktioniert, habe ich mich mit diesem Account an unserem Kundenportal angemeldet. Ich war verwundert, dass ich eine Fehlermeldung von unserem SharePoint Server bekam, die sinngemäß besagte, dieser Account hätte keine Rechte für die aktuelle Seite. Ich habe mich dann als Administrator angemeldet um nachzusehen, was mit dem Account nicht stimmt. In der SharePoint-Benutzerverwaltung wurde dieser Account aus allen Gruppen entfernt, in denen er zuvor Mitglied war.
Dieses Problem mußten wir genauer untersuchen. Ich habe deswegen in einer virtuellen Umgebung mit lokalen Benutzerkonten versucht, dieses Problem nachzuvollziehen. Folgendermaßen bin ich dabei vorgegangen:
-
in der lokalen Benutzerverwaltung des Betriebssystems habe ich einen neuen Account angelegt.
-
in der SharePoint-Benutzerverwaltung habe ich diesen Account der SharePoint-Gruppe 'Mitglieder' hinzugefügt.
-
ich habe nun versucht, mich mit diesem neuen Account bei SharePoint anzumelden. Wie erwartet klappte dies problemlos!
-
zur Sicherheit habe ich mich wieder abgemeldet und das Browserfenster geschlossen.
-
in der lokalen Benutzerverwaltung habe ich nun den eben angelegten Account gelöscht
-
in der SharePoint-Benutzerverwaltung habe ich diesen Account auch gelöscht.
-
ein Anmelden mit diesem gelöschten Account schlägt nun -wie erwartet- fehl.
-
nun habe ich in der lokalen Benutzerverwaltung des Betriebssystems den zuvor gelöschten Account mit exakt den gleichen Daten wieder angelegt.
-
in SharePoint habe ich diesen neu angelegten Account wieder der SharePoint-Gruppe 'Mitglieder' hinzugefügt.
-
beim Anmelden an SharePoint mit diesem neu-angelegten Account kommt es nun wieder zu der genannten Fehlermeldung "Sie haben keine Berechtigung ...."
-
als ich mich wieder als Administrator angemeldet habe, stellt ich fest, dass der neu-angelegte Account aus der SharePoint-Gruppe 'Mitglieder' verschwunden war.
Dies erklärt zwar die Fehlermeldung, aber warum verschwindet ein gelöschter Account, der mit den gleichen Daten wieder neu angelegt wurde, nach dem ersten Anmelden an SharePoint aus allen SharePoint-Gruppen?
SharePoint speichert alle Accounts in einer Tabelle in der Content Database und weist diesen Accounts eine eigene ID zu. Diese ID wird sichtbar, wenn man mit der Maus auf einen Benutzernamen in der SharePoint-internen Benutzerverwaltung zeigt (also Mauszeigen nur auf den Benutzernamen schieben, nicht klicken!).

Nachdem ein Account in SharePoint gelöscht wird, wird dieser nicht aus der User-Tabelle entfernt, sondern dort nur als gelöscht markiert. Erzeugt man nun einen neuen Account, der einem gelöschten Account exakt entspricht und fügt diesen Account einer SharePoint-Gruppe hinzu, tauchen in der User-Tabelle zwei Accounts mit dem gleichen Namen, aber unterschiedlichen IDs auf. Einer (der mit der kleineren ID) ist als gelöscht markiert, der andere mit der größeren ID ist der neu-angelegte Account. Loggt man sich nun mit einem solchen gelöscht-und-neu-angelegt Account bei SharePoint ein, kommt SharePoint offensichtlich durcheinander und verwendet die ID des gelöschten Accounts. Dies kann man sehen, wenn man sich die IDs wie oben beschrieben ansieht.
Bevor ich mich mit diesem Fehler an den Microsoft-Support wenden wollte, wollte ich erst sichergehen, dass es sich wirklich um einen Fehler handelte. Fabian Moritz war so freundlich, mich ein wenig zu unterstützen. Er konnte mir das geschilderte Verhalten bestätigen, denn in seinem Blog-Artikel hatte er bereits Untersuchungen zur SharePoint-internen Benutzerverwaltung angestellt.
Grundsätzlich gibt zwei Lösungsmöglichkeiten für dieses Problem - diese beiden Möglichkeiten konnte mir der Microsoft-Support im Nachhinein auch bestätigen:
-
der Person Synchronization Timer Service startet normalerweise ungefähr 1 Mal pro Stunde und sollte die Unstimmigkeiten in der Benutzerverwaltung wieder korrigieren. Bedeutet: man muß mindestens einen Timerzyklus abwarten. Der Microsoft-Support erwähnte aber auch noch, dass manchmal auch ein manueller vollständiger Profilimport nötig sei. In Ausnahmefälle müsse der vollständige Profilimport auch mehrmals durchgeführt werden. Diese Aussagen des Microsoft-Supports habe ich nicht weiter überprüft.
-
es gibt ein STSADM-Kommando, mit welchem man die Unstimmigkeiten in der SharePoint-internen Benutzerverwaltung manuell korrigieren kann: STSADM -o migrateuser <oldlogin> <newlogin> -ignoresidhistory
Mit diesem STSADM-Kommando konnten wir unser Problem lösen. Wichtig ist aber, dass man hier den Parameter -ignoresidhistory nicht vergisst! Übrigens tritt das geschilderte Problem mit lokalen Benutzerkonten und mit Benutzerkonten in einem ActiveDirectory auf (Stichwort: Windows-Authentifizierung). Auf einer Testinstallation, die mit Forms Authication arbeitet, trat das Problem nicht auf.
Wer sich noch ein wenig über die interne SharePoint-Benutzerverwaltung informieren möchte, findet entsprechende Informationen im Blog von Fabian Moritz in seinem Artikel über die UserInfo-Tabelle.