我的组织的ldap中有一个只读用户使用openldap实现,我不完全知道树的结构,但我知道对象下面有很多组织单位bogota,medellin,palmira,(而这又低于组织xxx.edu.co
)。我对在第二级组织(博格塔,麦德林,帕米拉)下面的每个uid
组织单位中使用另一个名为employeeNumber
的属性的人people
感兴趣。我可以通过以下方式实现这一目标:
ldapsearch -h secret.xxx.edu.co -D 'uid=myUser,ou=Institucional,o=bogota,o=xxx.edu.co' -w myPass -x -b 'ou=People,o=bogota,o=xxx.edu.co' '(&(employeeNumber=123485))'
这个问题就是效率,因为我的组织有40000多名用户,搜索速度非常慢,如果我使用uid进行搜索,搜索速度非常快,我猜这棵树完全是由'uid'或类似的东西。关键在于uid正是我的目标,另外我知道我搜索的人的uid的近似形式,例如我知道如果我正在为PepitoPérez搜索employeeNumber = 12345的uid,这必须从'p'开始。
如何在这个问题上取得更好的成绩?
我认为类似于在索引的uid属性中通过regexp过滤树,并且在搜索此子集中的employeeNumber之后可以具有良好的性能。我需要一种不需要ldap管理员权限的方法。
答案 0 :(得分:0)
听起来您需要在equality
属性中添加employeeNumber
索引。这将使您的上述搜索与uid搜索一样好。
如果您想有效地进行部分uid
匹配,则需要substring
属性上的uid
索引。
除此之外,您的过滤器(&(employeeNumber=123485))
可以简单地表示为(employeeNumber=123485)
。由于只有一个条款,因此不需要and (&)
。
如果您有适当的索引,可以使用这样的过滤器执行搜索...
(&(employeeNumber=123485)(uid=p*))
这会让你得到你想要的。