我正在尝试通过Visual Basic进行LDAP查询。我没有Active Directory的管理员权限,但我能够查看所有用户对象。我不知道在我通过LDAP://查询搜索目录时有什么限制。
在我正在构建的Excel应用程序中,我有一个用于输入用户ID的列。一旦用户输入用户ID,我希望根据与该用户关联的服务器端信息(例如电子邮件地址)自动填充其他列
假设c.Value是输入到电子表格的用户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 =区域已知,搜索成功。但是,我希望查询检查UserID的所有区域OU。据我所知,他们没有被保留或镜像在一个中心位置。是否可以在这样的查询中使用通配符?
有没有人对替代方法有任何其他想法或建议?
谢谢,
汤姆
答案 0 :(得分:5)
在回答您的问题之前,以下是Active Directory的一些基本背景知识。
要执行LDAP查询,您需要使用ADO连接对象。您需要将LDAP查询字符串传递给ADO连接对象。 LDAP查询字符串包含四个部分。
您应该使用的LDAP查询字符串应该类似于
<LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk>;(&(objectClass=user)(samAccountName=yourusername));adspath;subtree
<LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk>
。这意味着开始在这个级别进行搜索(&(objectClass=user)(samAccountName=yourusername))
。当然,您需要将yourusername
替换为代码中的其他内容。如果您真的想在CN上进行搜索,请将其更改为CN adspath
,允许您稍后绑定到该对象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
答案 1 :(得分:0)
您可能会看到匿名样式访问权限。因此,您可以阅读一些默认属性。您要做的是确保您作为具有足够权限阅读您感兴趣的数据的用户进行身份验证。
如果UserID确实是用户Pre-Windows 2000登录名(也称为sAMAccountName),则搜索sAMAccountName = c.Value的用户的完整DN。
顺便说一下,CN =不是短名称的几率非常好,而是人名First和Last名称的某个版本,这是ADUC MMC的默认模式。