2010-12-18 12 views
0

In einem neuen Projekt plane ich, ActiveDirectoryMembershipProvider und SqlRoleProvider zu verwenden, um Authentifizierung bzw. Autorisierung bereitzustellen.ActiveDirectoryMembershipProvider und SqlRoleProvider: Wartung?

Eine Sache, die mir nicht klar ist, ist, wie die Wartung gehandhabt wird - wenn Benutzer, die angemeldet sind und Rollen zugewiesen wurden aus Active Directory entfernt werden, wie verwaiste Datensätze in der Mapping-Tabelle von SqlRoleProvider? Ich glaube, das ist die Tabelle aspnet_UsersInRoles.

Man könnte Active Directory in regelmäßigen Abständen nach deaktivierten Benutzern abfragen und dann durch diese Liste, die Roles.RemoveUserFromRoles aufruft (UserId, Roles.GetRolesForUser (UserId)), wo sich UserId ebenfalls in aspnet_UsersInRoles befindet. Sehr langsam, würde ich mir vorstellen, für eine große Organisation.

Alternativ können Sie für jede distaint-Benutzer-ID in UsersInRoles ActiveDirectory abfragen und sicherstellen, dass die Bitmaske des Attributs userAccountControl nicht angibt, dass das Konto deaktiviert ist. Auch sehr ineffizient für eine große Anzahl von Anwendungsbenutzern.

Ein noch hässlicherer, aber viel effizienterer Ansatz wäre es, das letzte Anmeldedatum zu speichern und Rollenzuordnungen für Benutzer, die sich beispielsweise seit sechs Monaten nicht eingeloggt haben, regelmäßig zu löschen. Dies könnte Kopfschmerzen verursachen.

Ich würde gerne Vorschläge hören.

Antwort

0

Ja, Sie müssen die Bereinigung manuell durchführen. Brauchen Sie ein sofortiges Update? Wenn Sie einen Batch-Prozess ausführen können, der nachts ausgeführt wird, wäre dies effizient, da er nicht während der Kernbetriebszeit ausgeführt wird. Oder es könnte sinnvoll sein, einen Prozess in einem anderen Thread zu starten, um die Löschung der Rolle zu übernehmen, sobald Sie sich dessen bewusst sind. Durch das Entfernen von Rollen pro Benutzerzugriff wird der Treffer für die Benutzer freigegeben und sie denken, dass die Anwendung langsam ist.

Wie oft werden Rollen entfernt? Wenn viel, dann betrachten Sie einen Batch-Prozess, wenn einmal in ein paar Jahren, dann ist es wahrscheinlich nicht so ein Problem, es in die Anwendung während eines Prozesses zu arbeiten.

Soweit wie auch, können Sie die API verwenden, aber die Tabellen aspnet_UsersInRoles und aspnet_roles können auch leicht über SQL Script gelöscht werden.

HTH.

Verwandte Themen