Ich habe ein Active Directory-Synchronisierungstool (.NET 2.0/C#) geschrieben als einen Windows-Dienst, an dem ich seit einiger Zeit gearbeitet habe wurde damit beauftragt, Ereignisse hinzuzufügen, die auf Änderungen in der Gruppenmitgliedschaft basieren. Das Grundszenario besteht darin, dass Benutzer mit einer Sicherheitsdatenbank synchronisiert werden und bei Änderungen der Gruppenmitgliedschaft die Zugriffsrechte der Benutzer geändert werden müssen (dh wenn ich jetzt Mitglied von "IT Staff" bin), sollte ich automatisch Zugriff auf die Serverraum, wenn ich aus dieser Gruppe entfernt werde, sollte ich automatisch den Zugang zum Serverraum verlieren).Überwachung der Gruppenmitgliedschaft in Active Directory effizienter (C# .NET)
Das Problem ist, dass bei einer DirectorySynchronization für Gruppen erhalten Sie zurück die Gruppe, die ein Mitglied hinzugefügt/entfernt hat, und von dort, wenn Sie die Mitglieder Liste greifen Sie die Liste aller Mitglieder in dieser Gruppe derzeit nicht zurück nur die Mitglieder, die hinzugefügt oder entfernt wurden. Dies führt mich zu einem ziemlich großen Effizienzproblem. Um zu wissen, ob ein Benutzer hinzugefügt oder entfernt wurde, muss ich lokal eine Liste jeder Gruppe und aller Mitglieder führen und diese mit der aktuellen Liste vergleichen, um zu sehen, wer gewesen ist hinzugefügt (nicht in der lokalen Liste), und wer wurde gelöscht (in der lokalen Liste, nicht in der aktuellen Mitgliederliste).
Ich diskutiere gerade die Gruppenzugehörigkeit Details in einem DataSet im Speicher und Schreiben auf die Festplatte jedes Mal, wenn ich neue Änderungen der Mitgliedschaft verarbeitet habe. Auf diese Weise kann der aktuelle Status von Active Directory in der Sicherheitsdatenbank durch einen Vergleich der letzten Informationen auf der Festplatte mit denen der aktuellen Gruppenmitgliedschaftsliste wiederhergestellt werden, wenn der Dienst beendet wird/abstürzt oder der Computer neu gestartet wird. Dies scheint jedoch schrecklich ineffizient zu sein - durch jedes Mitglied in der Gruppe zu laufen, um mit dem verglichen zu werden, was in der Datenmenge ist, und dann Änderungen an der Platte jedes Mal auszugeben, wenn Änderungen an der Liste vorgenommen werden.
Hat sich schon mal jemand mit diesem Szenario beschäftigt? Gibt es einen Weg, den ich nicht gefunden habe, um nur ein Delta von Gruppenmitgliedern zu erhalten? Was würden Sie in dieser Situation tun, um sicherzustellen, dass Sie keine Änderungen verpassen, während Sie den geringsten möglichen Performance-Treffer erzielen?
Edit: Die AD könnte 500 Benutzer enthalten, es 200.000 Nutzer enthalten könnten - auf den Kunden abhängig ist, und obendrein, wie viele Gruppen der durchschnittliche Benutzer ist ein Mitglied der
Haben Sie das beste gute Muster und üben Sie einen effizienten Zugang zu AD? – Kiquenet