从SQL Server查询LDAP的问题

5
我有些困难在配置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''')   

然而,我遇到了一个错误,显示如下:

在针对“ADSI”链接服务器执行查询“SELECT * FROM 'LDAP://DC=abc,DC=domain,DC=popo,DC=local' WHERE objectCategory = 'User'”的准备过程中,发生了错误。

OLE DB提供程序“ADSDSOObject”出现了问题。

这里可能出现了什么问题?我是否设置了错误的DC(因为我甚至不知道DC是什么)?还是说我完全选择了错误的LDAP服务器?
3个回答

7

根据我的理解,您正在尝试针对Windows Active Directory(在功能上类似于LDAP)进行查询。默认情况下,AD不允许匿名查询-您必须使用受信任的用户名和密码进行身份验证。此外,您需要与系统管理员确认您拥有正确的基础值(“DC = abc,DC = domain,DC = popo,DC = local”)。


如果我使用Windows身份验证来运行查询,我是否需要指定用户名/密码? - Rondel
我不确定,但如果您的凭据可以完全通过,我会感到惊讶。至少尝试明确设置凭据。 - Jake Feasel
可能就是这个问题。我认为链接服务器的安全性从未设置过。我必须让管理员检查链接服务器的属性。 - Rondel
如果他在使用Windows身份验证的SQL SSMS中,除非域管理员锁定了AD,否则无需进行其他操作。 AD中的基本用户默认具有读取相当多的属性和属性的权限。 匿名用户-当然-它们默认情况下被阻止(即使您可以设置dsheuristics等来打开它)。 - Quantum Elf
2
原来是凭证问题。关联服务器没有正确设置。 - Rondel
谢谢,这对我很有帮助。我设置了链接服务器安全选项“使用此安全上下文进行设置”,并指定了专门为此AD连接创建的用户和密码。 - Davos

1

确保"abc"不是该域中实际的域控制器名称;在这种情况下,您的OPENQUERY应省略它,并为:

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


好知道。所以如果我有一堆服务器abc.domain.popo.local、def.domain.popo.local等,我应该只使用DC=domain,DC=popo,DC=local - Rondel
@Rondel - 是的,作为最佳实践,您应该使用“无服务器绑定”;否则,您将针对特定域控制器 - 如果该服务器崩溃,您的查询将失败。 - Quantum Elf

1

看看Richard Mueller的ADO / SQL搜索技巧 - 它们有帮助吗?(Richard的网站是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''')   

谢谢提供链接,里面有一些不错的信息,但是没有解决我的当前问题。同时在使用 objectClass 替代 objectCategory 后也出现了错误。 - Rondel
@Rondel:你想选择什么?也许你需要从不同的起点开始选择,例如:'SELECT * FROM ''LDAP://CN=Users,DC=domain,DC=popo,DC=local'' WHERE objectCategory = ''User'''或类似的语句。 - marc_s
目前我正在尝试从AD中获取任何有关用户的信息,但最终我只需要显示名称和用户名。 - Rondel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接