ActiveDirectoryMembershipProvider和SqlRoleProvider:维护?

时间:2010-12-18 00:57:09

标签: asp.net authentication authorization

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

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

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

或者,对于UsersInRoles中的每个distint UserId,查询Ac​​tiveDirectory并确保userAccountControl属性的位掩码不表示该帐户已被禁用。对于大量应用程序用户来说效率也非常低。

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

我很想听听建议。

1 个答案:

答案 0 :(得分:0)

是的,你必须手动进行清理。你需要即时更新吗?如果您可以执行每晚运行的批处理,那么这将是有效的,因为它在核心运营时间内没有运行。或者,一旦您意识到它就可以在另一个线程中启动进程来处理删除角色。删除每个用户访问的角色会分享用户的命中率,并让他们认为应用程序运行缓慢。

删除了多少次角色?如果很多,那么考虑一个批处理过程,如果在几年内一次,那么在某些过程中将其用于应用程序可能不是一个问题。

就如何使用API​​而言,aspnet_UsersInRoles和aspnet_roles表也可以通过SQL脚本自行删除。

HTH。