LDAP查询通过URL

我正在尝试通过Visual Basic进行LDAP查询。 我没有Active Directory的pipe理员权限,但是我可以查看所有用户对象。 我不知道有什么限制,如果有我通过LDAPsearch目录://查询。

在我正在构build的Excel应用程序中,我有一个用于input用户标识的列。 一旦用户input了用户ID,我想根据与该用户关联的服务器端信息自动填充其他列(例如电子邮件地址)

比方说,c.Value是已经input到电子表格中的用户ID值:

strUser = "CN=" & c.Value & ",OU=User Accounts, OU=Area ,OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk/" 
Set objUser = GetObject("LDAP://" & strUser)

问题是这个 – 其中OU = Area是已知的,search是成功的。 但是,我想查询检查所有区域用户名的用户名。 据我所知,他们不是在中央位置举行或镜像。 在这样的查询中是否可以使用通配符?

有没有人有任何其他的想法或build议,以交替的方式去做到这一点?

谢谢,

汤姆

在我回答你的问题之前,以下是关于Active Directory的一些基本背景知识。

  • Active Directory上的用户对象包含许多属性。
  • CN是用户对象的属性之一。 它并不总是与您的login用户名相同。
  • samAccountName是Windows 2000以前的login名string。 这可能是你在找什么。
  • 对象分层存储。 用户对象可以放在OU或容器下

要执行LDAP查询,您需要使用ADO连接对象。 您需要将LDAP查询string传递给ADO连接对象。 LDAP查询string包含四个部分。

  • 根path,我们开始search的地方。
  • LDAPfilter
  • 返回的属性
  • search范围

您应该使用的LDAP查询string应该是类似的

 <LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk>;(&(objectClass=user)(samAccountName=yourusername));adspath;subtree 
  • 上例中的根path是<LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk> 。 这意味着开始在这个级别search
  • 由于您正在search用户,所以LDAPfilter是(&(objectClass=user)(samAccountName=yourusername)) 。 当然,您需要将您的用户名replace为代码中的其他内容。 如果你真的想在CN上进行search,请在这里更改为CN
  • 返回的属性是一个特殊的属性adspath ,它允许您稍后绑定到该对象
  • 我假设你正在尝试search同一个域下的所有用户对象。 所以,你的search范围应该是subtree

这里是一个完整的例子,我想它应该做你的工作

 userName = "harvey" ldapStr = "<LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk>;(&(objectClass=user)(samAccountName=" & userName & "));adspath;subtree Set conn = CreateObject("ADODB.Connection") conn.Provider = "ADSDSOObject" conn.Open "ADs Provider" Set rs = conn.Execute(ldapStr) While Not rs.EOF wscript.echo rs.Fields(0) rs.MoveNext Wend 

您可能会看到匿名样式访问权限。 因此你可以阅读一些默认属性。 你想要做的是确保你作为一个用户有足够的权利来读取你感兴趣的数据进行身份validation。

如果UserID实际上是用户Pre-Windows 2000login名称(又名sAMAccountName),则searchsAMAccountName = c.Value的用户的完整DN。

顺便提一句,CN =不是短名称,而是一些人名和姓,这是ADUC MMC的默认模式。