Asp.net ActiveDirectoryMembershipProvider和SqlRoleProvider:维护?

Asp.net ActiveDirectoryMembershipProvider和SqlRoleProvider:维护?,asp.net,authentication,authorization,Asp.net,Authentication,Authorization,在一个新项目中,我计划使用ActiveDirectoryMembershipProvider和SqlRoleProvider分别提供身份验证和授权 我不清楚的一件事是如何处理维护——当已登录并已分配角色的用户从Active Directory中删除时,如何删除SqlRoleProvider使用的映射表中的孤立记录?我相信这是aspnet_UsersInRoles表 可以定期查询Active Directory中的禁用用户,然后遍历调用Roles.RemoveUserFromRoles(UserI

在一个新项目中,我计划使用ActiveDirectoryMembershipProvider和SqlRoleProvider分别提供身份验证和授权

我不清楚的一件事是如何处理维护——当已登录并已分配角色的用户从Active Directory中删除时,如何删除SqlRoleProvider使用的映射表中的孤立记录?我相信这是aspnet_UsersInRoles表

可以定期查询Active Directory中的禁用用户,然后遍历调用Roles.RemoveUserFromRoles(UserId,Roles.GetRolesForUser(UserId))的列表,其中UserId也位于aspnet_UsersInRoles中。我可以想象,对于一个大型组织来说,速度非常慢

或者,对于UsersInRoles中的每个distint UserId,查询ActiveDirectory并确保userAccountControl属性的位掩码不指示帐户已禁用。对于大量应用程序用户来说,效率也很低

一种更丑陋但更有效的方法是存储上次登录日期,并定期清除(比如)六个月未登录用户的角色关联。这可能会引起头痛


我很想听听建议。

是的,您必须手动进行清理。你需要即时更新吗?如果您可以执行每晚运行的批处理流程,那么这将是非常有效的,因为它不会在核心操作时间运行。或者,在另一个线程中启动一个进程来处理角色的删除,这可能是有意义的。删除每个用户访问的角色会在所有用户之间共享影响,并使他们认为应用程序运行缓慢

角色被删除了多少次?如果有很多,那么考虑一个批处理过程,如果几年后一次,那么在某个过程中,将它应用到应用程序中可能不是太多的问题。 至于如何使用,您可以使用API,但是也可以通过SQL脚本轻松地自动删除aspnet_UsersInRoles和aspnet_roles表