LDAP:如何为嵌套属性和值创建搜索过滤器?

时间:2017-06-17 21:50:00

标签: search filter ldap

我了解如何基于简单的属性创建ldap搜索过滤器,例如

(&(objectClass=universityPerson)(surname=Smith*))

将返回一个很好的大学生名单,其姓氏以“史密斯”开头。到目前为止一切都很好!

在我们的大学LDAP模式中,人们有许多自定义属性或子对象,其结构类似于

graduateStatus: {campus=CAMPUS_CODE}:{degSchool=SCHOOL_CODE}:{classYr=YYYY}

universityHR:
  {jobCategory=Staff}:
  {campus=CAMPUS_CODE}:
  {deptId=999999}:
  {deptGroup=COLLEGE_BUSINESS}:
  {deptDescription=Business Library}:
  {deptVicePresidentArea=PROVOST}:
  {jobcode=123456}:
  {jobFamily=123}:
  {emplStatus=A}:
  {regTemp=R}

使LDAP查询回答如下问题非常有用:

  • “谁是从1995年毕业于商学院的人?”
  • “谁是护士学校的所有员工,jobCode = 456789?”
  • “谁是主校区的临时工作人员,其中jobFamily = 789?”

我希望能够创建引用这些子属性的ldap搜索过滤器,例如:

(&(objectClass=universityPerson)(graduateStatus.campus=BUS)(graduateStatus.classYr=1995))

(&(objectClass=universityPerson)(universityHR.regTemp=T)(universityHR.jobFamily=789))

但我无法弄清楚这是否可能,更不用说语法可能是什么了。

我怀疑这不是LDAP的一个好用例,我应该在其他企业系统中寻找这些问题的答案。然而,将企业目录用作不仅仅是一本美化的电话簿也是非常方便的。

通过OpenLDAP.org和ldapsearch docs挖掘各种发行版并未得出答案。每当我寻找有关嵌套属性或层次结构的东西时,我都会发现大量关于嵌套和成员资格查询的文档,但这不是问题所在。

非常感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

在不修改数据结构的情况下,我可以通过OpenLDAP看到的唯一方法是开发一个可以让您执行此类请求的叠加层,但这不是一件容易的事;)

如果您可以修改数据结构或复制(并保持完整性)某些数据,则可以在用户组中扩展这些属性。

请求将是同时查找属于多个组的用户。

例如:(&(objectClass=universityPerson)(universityHR.regTemp=T)(universityHR.jobFamily=789))

可能是:

(&(objectClass=universityPerson)(memberOf=cn=T,ou=regTemp,ou=universityHR,ou=group,dc=example,dc=com)(memberOf=uid=789,ou=jobFamily,ou=universityHR,ou=group,dc=example,dc=com))

用树像:

dc=example,dc=com
  `- ou=group
      `- ou=universityHR
         |- ou=jobFamily
         |   |- uid=789
         |   `- uid=987
         `- ou=regTemp
             |- cn=T
             `- cn=A

我能想到的最后一个想法是在API中进行过滤,并使用这种过滤器请求您的API,让API提出所需的请求并汇总结果。

如果您可以发布自定义嵌套属性/子条目的LDIF,以查看可能的内容。