查询由给定经理的 sAMAccountName 管理的 Active Directory 用户

Posted

技术标签:

【中文标题】查询由给定经理的 sAMAccountName 管理的 Active Directory 用户【英文标题】:Query Active Directory users who are managed by given manager's sAMAccountName 【发布时间】:2013-11-24 13:15:38 【问题描述】:

我正在尝试搜索其经理的用户名在搜索请求中给出的 Active Directory 用户,但无论我通过什么经理的用户名,我总是得到 0 条记录。

为此,我执行了以下 LDAP 查询:

(manager=sAMAccountName=Administrator)

我也试过这样用经理的通用名:

(manager=cn=John Smith)

谁能给我写一个 LDAP 查询,返回经理的 sAMAccountName=administrator 的所有用户?

【问题讨论】:

不提供您尝试解决此问题的方法或方法,没有多少人会在这里帮助您 谢谢你的建议,我做到了 【参考方案1】:

manager 具有专有名称语法,因此,如果在断言中使用manager,则必须使用完整的 DN 作为值。你给出的例子都不符合这个标准。您必须更正过滤器以使用专有名称。

管理器的语法:

attributeTypes: ( 0.9.2342.19200300.100.1.10 NAME 'manager'
  EQUALITY distinguishedNameMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
  X-ORIGIN 'RFC 4524' )

要确定语法,请使用LDAP Parameters Assignment 页面。在该页面上,搜索 SYNTAX 关键字 (1.3.6.1.4.1.1466.115.121.1.12) 后面的 OID。这表明它是 DN 语法。另外EQUALITY的匹配规则是distinguishedNameMatch

过滤器中使用正确语法的断言示例:

manager=cn=Manager Number One,ou=managers,ou=people,dc=example,dc=com

断言中使用的所有属性值都必须具有在模式中为该属性类型定义的语法。

更新

使用已知的良好工具(例如ldapsearch)验证条目是否存在,以确保知道搜索请求的正确参数。例如:

$ ldapsearch -h hostname -p port -b 'dc=sahara,dc=local' \
  -D [your-bind-dn] -w [your-bind-dn-password]         \
  -s sub                                               \
  '(manager=cn=Izzeddeen Alkarajeh,ou=managers,ou=people,dc=sahara,dc=local)' \
   1.1

如果此搜索未返回任何条目,请与 LDAP 管理员联系以确保正在使用的 BIND DN 具有读取这些条目的权限。

另见

LDAP: Mastering Search Filters LDAP: Search best practices LDAP: Programming practices

【讨论】:

亲爱的@terry-gardner 感谢您的宝贵意见。看起来你把我的手拉到了正确的方向。希望你多帮我一点忙。现在我有一个名为“sahara.local”的域,我想搜索由“Izzeddeen Al Karajeh”管理的用户。因此,根据您的上述答案,我使用了以下查询:“code”(manager=cn=Izzeddeen Alkarajeh,ou=managers,ou=people,dc=sahara,dc=local) 返回零结果。我在这里错过了什么吗?还是查询必须采用另一种形式? 第一个链接失效【参考方案2】:

我知道这很旧,但我想出了一种在 C# 中执行此操作的方法,我还没有在 *** 上找到。

using (var pc = new PrincipalContext(ContextType.Domain, "yourdomain.com"))
using (var user = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, "samAccountName"))

    DirectoryEntry de = (DirectoryEntry)user.GetUnderlyingObject();

    if (de.Properties["directReports"].Count != 0)
        managedFound = de.Properties["directReports"];

这将为您提供一个字符串列表,然后您可以使用以下方法解析出CN

managedUserName = Regex.Match(managedFound.ToString(), @"CN[=].*?[,]").Value.Replace("CN=", "").Replace(",", "");

然后,如下获取用户属性:

UserPrincipal managedUser = UserPrincipal.FindByIdentity(pc, IdentityType.Name, managedUserName);

【讨论】:

以上是关于查询由给定经理的 sAMAccountName 管理的 Active Directory 用户的主要内容,如果未能解决你的问题,请参考以下文章

PMP:4.项目整合管理

项管行知01--几个经理

Powershell检索用户登录名,而不是samAccountname

经典面试题-大厂SQL题目

力扣570(MySQL)-至少有5名直接下属的经理(简单)

项目管理学习与实践--“项管行知”系列