我们正在使用LDAP根据大型Active Directory设置对用户进行身份验证。我们希望从Active Directory中提取所有组的列表,以便我们可以在本地数据库中镜像它们,并将用户的AD组映射到本地组。
但是,当我们运行ldap查询以获取所有组的列表时,Active Directory会限制搜索的最大结果。
鉴于查询结果大小的限制,获取此信息的最佳策略是什么?我们可以使用某种形式的查询分页吗?
提前致谢!
答案 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
的“按示例查询”。