Active directory 如何使用openLdap仅从AD服务器获取最特定的objectClass?

Active directory 如何使用openLdap仅从AD服务器获取最特定的objectClass?,active-directory,openldap,Active Directory,Openldap,当使用ldap\u search从Ad服务器获取用户时,我会为每个条目获取几个objectClasse 我只对类层次结构中最具体的objectClass感兴趣。 我怎么得到它 例如:对于条目 name: user1 objectClass: top objectClass: person objectClass: organizationalPerson objectClass: user 我只想获取“用户”objectClass 我注意到,在编程的ldap\u搜索中,最具体的类在值数组的最后

当使用
ldap\u search
从Ad服务器获取用户时,我会为每个条目获取几个
objectClass
e

我只对类层次结构中最具体的
objectClass
感兴趣。 我怎么得到它

例如:对于条目

name: user1
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
我只想获取“用户”
objectClass

我注意到,在编程的
ldap\u搜索中,最具体的类在值数组的最后一个单元格中返回,即从
ldap\u get\u值(ld,entry,“objectClass”)
函数调用返回。这是偶然的还是一种既定的行为? (换句话说,我能相信这永远是真的吗?)


谢谢你的帮助

我不知道您可以指望从目录返回任何继承顺序。据我所知,目录结果永远不能保证按特定顺序排列。很可能会按照添加过程中指定的顺序返回值。Objectclass可以是一种特殊情况,它将在RFC中指定。另一件你必须注意的事情是当一个对象有一个辅助类与之混合在一起时。另外,辅助类可以引入一些其他父类。您可以查询目录的模式,并从中计算出继承结构,如果您是从自己的程序中执行此操作,则可以将其保存。

我不知道您是否可以指望从目录返回任何继承顺序。据我所知,目录结果永远不能保证按特定顺序排列。很可能会按照添加过程中指定的顺序返回值。Objectclass可以是一种特殊情况,它将在RFC中指定。另一件你必须注意的事情是当一个对象有一个辅助类与之混合在一起时。另外,辅助类可以引入一些其他父类。您可以查询目录的模式,并从中计算出继承结构,如果您是从自己的程序中执行此操作,则可以将其保存下来。

当然,您不能指望继承顺序。您的解决方案是在ldap搜索筛选器中指定
objectClass
属性,并与
objectCategory
交叉以消除计算机

(&(objectClass=user)(objectCategory=person))
您将在此处收到类
user
inetOrgPerson
的所有对象(它们也是
user


您将在此处收到类
inetOrgPerson
的所有对象(但不是唯一的
user
)。

当然,您不能指望继承顺序。您的解决方案是在ldap搜索筛选器中指定
objectClass
属性,并与
objectCategory
交叉以消除计算机

(&(objectClass=user)(objectCategory=person))
您将在此处收到类
user
inetOrgPerson
的所有对象(它们也是
user


在这里,您将收到类
inetOrgPerson
的所有对象(但不是唯一的
user
)。

对于一般方法,您不能依赖对象类值顺序,因为它不受标准的保证,并且因为对象类可以从两个或多个直接超类(多重继承)派生

要获得实例化的对象类,通常需要模式信息和一些额外的代码来分析对象类链


话虽如此,我也应该说,我已经看到了在Active Directory中只依赖于objectClass值顺序的代码。Active Directory不支持多重继承,似乎总是按顺序或继承返回objectClass。这种方法更容易实现,但不是100%可靠。

对于通用方法,您不能依赖objectClass值顺序,因为它不受标准的保证,而且objectClass可能是从两个或多个直接超类(多重继承)派生的

要获得实例化的对象类,通常需要模式信息和一些额外的代码来分析对象类链


话虽如此,我也应该说,我已经看到了在Active Directory中只依赖于objectClass值顺序的代码。Active Directory不支持多重继承,似乎总是按顺序或继承返回objectClass。这种方法更容易实现,但不是100%可靠。

如果我只需要将用户、计算机和组分开,objectCategory是否足够?是的,此属性是一种横向属性,可以做到这一点。对于用户和inetOrgPerson,objectCategory是Person,对于计算机是computer,对于group是group。如果我只需要将用户、计算机和组分开,objectCategory是否足够?是的,此属性是一种横向属性。对于用户和inetOrgPerson对象类别是Person,对于计算机是computer,对于group是group。