通过LDAP从Active Directory导入组

时间:2011-08-28 16:31:48

标签: active-directory ldap

我们正在使用LDAP根据大型Active Directory设置对用户进行身份验证。我们希望从Active Directory中提取所有组的列表,以便我们可以在本地数据库中镜像它们,并将用户的AD组映射到本地组。

但是,当我们运行ldap查询以获取所有组的列表时,Active Directory会限制搜索的最大结果。

鉴于查询结果大小的限制,获取此信息的最佳策略是什么?我们可以使用某种形式的查询分页吗?

提前致谢!

3 个答案:

答案 0 :(得分:1)

Active-Directory支持分页控制。您必须参阅Microsoft官方文章:Searching the Directory,尤其是Search Size and Page Size

答案 1 :(得分:0)

可以使用simple paged results query来做到这一点。关键是要确保所请求的页面大小不超过Active Directory实例的最大结果大小。

ADSI的ADO包装器,例如,自动页面结果,可以找到here的示例,但显然根据您的技术堆栈可能适用于您,也可能不适用。

答案 2 :(得分:0)

如果您使用的是.NET 3.5及更高版本,则应查看System.DirectoryServices.AccountManagement(S.DS.AM)命名空间。在这里阅读所有相关内容:

您可以使用PrincipalSearcher和“按示例查询”主体进行搜索:

// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// define a "query-by-example" principal - here, we search for any GroupPrincipal 
GroupPrincipal qbeGroup = new GroupPrincipal(ctx);

// create your principal searcher passing in the QBE principal    
PrincipalSearcher srch = new PrincipalSearcher(qbeGroup);

// to get around the 1'000 or so object limit - you need to "go deep" and
// set the page size on the underlying DirectorySearcher to e.g. 500
(searcher.GetUnderlyingSearcher() as DirectorySearcher).PageSize = 500;

// find all matches
foreach(var found in srch.FindAll())
{
    // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....          
}

您可以在GroupPrincipal上指定任何属性,并将其用作PrincipalSearcher的“按示例查询”。