从SQL Server问题查询LDAP

时间:2011-12-06 18:18:15

标签: sql sql-server active-directory ldap

我在配置SQL语句以在SQL Server上对LDAP执行openquery时遇到一些问题。我按照这里列出的说明进行了操作:Querying Active Directory from SQL Server 2005但是我把最后的部分放在一起有些麻烦。

首先,我不知道我的LDAP服务器在哪里。所以我做了nslookup并找到了默认服务器:

abc.domain.popo.local

我将OPENQUERY配置为

SELECT * FROM OPENQUERY( ADSI, 'SELECT * FROM ''LDAP://DC=abc,DC=domain,DC=popo,DC=local'' WHERE
objectCategory = ''User''')   

但是,我收到错误说

  

准备查询时出现错误“SELECT * FROM'LDAP:// DC = abc,DC = domain,DC = popo,DC = local'WHERE objectCategory ='User'”,用于对OLE DB提供程序“ADSDSOObject”执行“对于链接服务器”ADSI“。

这里有什么问题?我是否错误地设置DC(因为我甚至不知道DC意味着什么)?或者,我是否更有可能为LDAP完全使用错误的服务器?

3 个答案:

答案 0 :(得分:5)

在我看来,您正在尝试查询Windows Active Directory(功能上显示为LDAP)。默认情况下,AD不允许匿名查询 - 您必须使用受信任的用户名和密码进行身份验证。此外,您需要检查您的系统管理员以确保您具有正确的基值(“DC = abc,DC = domain,DC = popo,DC = local”)。

答案 1 :(得分:1)

见Richard Mueller的ADO / SQL search tips - 他们有帮助吗? (理查德的网站是LDAP和Active Directory参考和提示的真正宝库 - 强烈推荐!)

根据我在本网站上看到的内容,您可能错误objectCategory - 尝试使用Person代替User(我认为是objectClass ):

SELECT * FROM OPENQUERY(ADSI, 
            'SELECT * FROM ''LDAP://DC=abc,DC=domain,DC=popo,DC=local'' 
             WHERE objectCategory = ''Person''')   

答案 2 :(得分:1)

确保“abc”不是该域中域控制器的实际名称;因此,在这种情况下,你的OPENQUERY应该省略它并且是:

SELECT * FROM OPENQUERY( ADSI, 'SELECT * FROM ''LDAP://DC=domain,DC=popo,DC=local'' WHERE objectCategory = ''Person'' AND objectClass = ''user''')