繁体   English   中英

DirectoryServices.AccountManagement-组成员身份检查效率

[英]DirectoryServices.AccountManagement - group membership checking efficiency

我们在Active Directory中有一个群组,拥有超过7万个用户帐户。 我需要检查是否有人是该组的成员。 该代码将在具有大量并发用户的Web应用程序中运行。 如果可能,我希望坚持使用System.DirectoryServices.AccountManagement来减少为此应用程序编写的代码量。

似乎有2种一般方法可以检查某人是否为会员:

  1. 使用UserPrincipal.IsMemberOf()获取指示成员资格的布尔值
  2. 使用UserPrincipal.GetGroups()获取我可以手动检查的组成员资格列表

我想避免列举70k用户来检查某人是否在组中,因此选项2的面值似乎更有效。 当我开始工作时,可以针对这两种方法进行一些测试,但是我想获得一些有关这些方法在幕后真正作用的信息。 我的思考方向是否正确?

关于我正在使用的库的最后一点。 如果完全退出System.DirectoryServices.AccountManagement并编写自己的LDAP查询,是否可以获得更好的性能?

嗯,您可能要考虑使事情更有效率的一件事是基于这样的事实,即组成员身份实际上是由具有其成员用户(和组)列表的组管理的。 用户上的“ memberOf”实际上是计算得出的“反向链接”-有关更多信息,请参见这篇出色的文章

因此,如果您需要检查一个或两个组中的成员资格,那么走到那些组并询问他们的成员列表并缓存它们可能要容易得多。 在评估用户时,您只需检查其DN是否显示在组成员列表之一中,而不必一遍又一遍地敲击AD。

您将执行以下操作:

GroupPrincipal myGroup = Group.FindByIdentity(context, "myGroupName");

var members = myGroup.GetMembers();

这样,由于组成员身份信息的缓存,您应该能够获得更好的性能。 试试吧!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM