代码改变世界

通过LDAP从AD中导入用户到数据库

2011-04-07 11:12  雪中风筝  阅读(924)  评论(0)    收藏  举报

今天从AD2AP的时候需要导出AD中的用户到SqlServer 2008R2数据库,执行了如下语句的时候报错:

SELECT * FROM OPENQUERY(ADSI, 'SELECT Name,SN,userPrincipalName,samAccountName,title,department,company,mail  FROM ''LDAP:// DC=xxx,DC=xxx,DC=xxx'' WHERE objectCategory = ''Person'' AND objectClass = ''user''');

每次执行这句的时候都报错如下 :
  “无法从链接服务器 “ADSI” 的 OLE DB 访问接口”ADSDSOObject”提取行。”

排错过程是这样的,先通过指定OU来查询数据:

  发现一般的OU都不会出错,只有一个OU会报错,每次查询出来的结果都只有901条,然后就会返回错误,开始以为是AD数据的问题,最后经过查找找到了答案,LDAPAdminLimits 属性的 MaxPageSize 值用于控制执行 LDAP 查询时可以返回的记录数。默认值为 1000 个记录。如果要返回多于 1000 个的项,则 Active Directory 将检测到该最大值,并且不返回任何内容。如果是SqlServer2005的话会显示查询结果中的前1000条,如果是2008的话是901条,这样问题就很清楚了。

  解决方案的话Google一下就出来了,以下给一个连接方便需要的兄弟节省时间。但是修改了这个值以后不知道会不会有其他的潜在风险。

  http://technet.microsoft.com/zh-cn/library/aa998536(EXCHG.80).aspx