ActiveDirectoryMembershipProvider и SqlRoleProvider: обслуживание? - PullRequest
0 голосов
/ 18 декабря 2010

В новом проекте я планирую использовать ActiveDirectoryMembershipProvider и SqlRoleProvider для обеспечения аутентификации и авторизации соответственно.

Одна вещь, которая мне не ясна, это то, как обрабатывается обслуживание - когда пользователи, вошедшие в систему и которым назначены роли, удаляются из Active Directory, как вы удаляете потерянные записи в таблице сопоставления, используемой SqlRoleProvider? Я считаю, что это таблица aspnet_UsersInRoles.

Можно периодически запрашивать Active Directory для отключенных пользователей, затем выполнять итерацию по этому списку, вызывая Roles.RemoveUserFromRoles (UserId, Roles.GetRolesForUser (UserId)), где UserId также находится в aspnet_UsersInRoles. Я бы сказал, что это очень медленно, для большой организации.

Или, в качестве альтернативы, для каждого удаленного UserId в UsersInRoles запросите ActiveDirectory и убедитесь, что битовая маска атрибута userAccountControl не означает, что учетная запись отключена. Также очень неэффективно, для большого количества пользователей приложений.

Еще более уродливый, но гораздо более эффективный подход - хранить дату последнего входа в систему и периодически очищать ассоциации ролей для пользователей, которые не выполнили вход, скажем, в течение шести месяцев. Это может вызвать головную боль.

Я хотел бы услышать предложения.

1 Ответ

0 голосов
/ 18 декабря 2010

Да, вы должны выполнить очистку вручную. Вам нужно мгновенное обновление? Если вы можете выполнять пакетный процесс, который выполняется ночью, это будет эффективно, поскольку он не работает в часы основной работы. Или, возможно, имеет смысл запустить процесс в другом потоке для обработки удаления роли, как только вы узнаете об этом. Удаление ролей для доступа каждого пользователя делит попадание между пользователями и заставляет их думать, что приложение работает медленно.

Сколько раз удаляются роли? Если много, то рассмотрим пакетный процесс, если один раз в несколько лет, то, вероятно, не так уж и сложно включить его в приложение во время какого-то процесса.

Насколько вы можете использовать API, но таблицы aspnet_UsersInRoles и aspnet_roles могут быть легко уничтожены сами по себе с помощью SQL Script.

НТН.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...