AD查询1000条限制和解决方案

AD查询1000条限制和解决方案

公司的一个项目要从AD上取数据,为了测试性能,批量在AD上创建了2000多个用户。但是用java程序获取所有用户的时候会报错或者只能取到1000条数据。

com.novell.ldap.LDAPConnection.search()方法查询的时候最多返回1000条数据。

用org.springframework.ldap.core.LdapTemplate.search()方法的时候会抛出异常。

org.springframework.ldap.SizeLimitExceededException     Caused by: javax.naming.SizeLimitExceededException

 

C#的同事看了半天也找不出原因。用C#程序去取数据的时候也只能取到1000条数据,ldap browser这样的工具也只能返回1000条结果,这个时候我们判断是服务器的问题。

 

第二天在网上找的“AD 1000”的相关资料。原来windows2000(2003) server本身出于性能负荷的考虑,将LDAP查询的数量限制为1000个。

当某个ldap查询条件返回数据大于1000条数据的时候,就会报SizeLimitExceededException   的异常

这里可以参考微软官网的说法: http://support.microsoft.com/kb/315071

 

 

实际应用中AD中数据超过1000太正常不过了!如果服务器性能允许而且网络带宽不错的话,这样的限制就很不合理。那么如何修改呢?

 

1.在“开始”——>“运行”——>输入“ ntdsutil”——>回车;

2.输入:“ldap policies”,回车;

3.输入:“connections”,回车;

4.输入:“connect to domain yourDomainName,例如(connect to domain baidu.com

5.连接提示出现后,输入:“quit”,回车;

6.输入:“show values”,确认当前的最大返回数;(默认是1000)

7.输入:“set MaxPageSize to 10000”,将最大返回数改为10000。(最大返回数可以根据实际情况自行定义)。

8.再度输入:“show values”,确认当前的最大返回数(显示为:1000(10000))。

9.输入“commit changes”以确认修改。

10. 再次输入:“show values”,确认当前的最大返回数为10000。

11. 输入“quit”,退出设置状态;

12. 输入“quit”,退出当前命令。

 

然后在用java程序去访问,就可返回2000多个用户!

如果你的java程序还是返回1000条记录,记得修改一下代码。

 

LDAPSearchConstraints constraints = new LDAPSearchConstraints();
constraints.setMaxResults(2000);
LDAPSearchResults results = conn.search("dc=xxx,dc=com",LDAPConnection.SCOPE_SUB, filter,attrs,false,constraints);
			
 

完工!

备注:客户端(java程序)也可以设置返回结果的数量,但这是为了不影响带宽的情况下设置的。如果设置的值大于服务端设置的值,那么依然没有效果!

下面把具体操作步骤用图片形式展示在这里!

AD查询1000条限制和解决方案

AD查询1000条限制和解决方案

AD查询1000条限制和解决方案

AD查询1000条限制和解决方案

AD查询1000条限制和解决方案

AD查询1000条限制和解决方案