我在配置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完全使用错误的服务器?
答案 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''')