2011-12-06 52 views
3

我在配置SQL语句以从SQL Server对LDAP执行打开查询时遇到了一些问题。我按照这里列出的说明进行操作:Querying Active Directory from SQL Server 2005但我在将最终作品放在一起时遇到了一些麻烦。从SQL Server查询LDAP问题

首先,我不知道我的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”针对OLE DB提供程序“ADSDSOObject”执行的查询“SELECT * FROM'LDAP:// DC = abc,DC = domain,DC = popo,DC = local'WHERE objectCategory ='User'”。

这里可能存在什么问题?我是否错误地设置了DC(因为我甚至不知道DC的含义)?或者更可能是我的LDAP服务器只有完全错误的服务器?

回答

5

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

+0

我需要指定的用户名/密码,即使我使用Windows身份验证运行查询? – Rondel

+0

我不确定,但如果您的凭证一直通过,我会感到惊讶。至少,明确设置凭证是可以尝试的。 –

+0

这可能是。我不认为连接服务器的安全性是有史以来建立的。我必须让管理员检查链接服务器上的属性 – Rondel

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''') 
+0

感谢您的链接。它有一些很好的信息,但没有解决我目前的问题。它也失败了objectClass而不是objectCategory – Rondel

+0

@Rondel:你想要选择什么?也许你需要从不同的起点进行选择,例如''SELECT * FROM''LDAP:// CN =用户,DC =域,DC = popo,DC =本地''其中 objectCategory =''用户'''或类似的东西.... –

+0

现在我试图从AD获得任何信息给用户,但最终我只想显示名称和用户名。 – Rondel

1

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

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

+0

很高兴知道。所以,如果我有一堆服务器abc.domain.popo.local,def.domain.popo.local等,我应该只使用** DC =域,DC = popo,DC =本地** – Rondel

+0

@ Rondel - 是你应该使用“无服务器绑定”作为最佳实践;否则你会针对一个特定的域控制器 - 如果该服务器关闭,你的查询将失败 –