我了解如何基于简单的属性创建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查询回答如下问题非常有用:
我希望能够创建引用这些子属性的ldap搜索过滤器,例如:
(&(objectClass=universityPerson)(graduateStatus.campus=BUS)(graduateStatus.classYr=1995))
或
(&(objectClass=universityPerson)(universityHR.regTemp=T)(universityHR.jobFamily=789))
但我无法弄清楚这是否可能,更不用说语法可能是什么了。
我怀疑这不是LDAP的一个好用例,我应该在其他企业系统中寻找这些问题的答案。然而,将企业目录用作不仅仅是一本美化的电话簿也是非常方便的。
通过OpenLDAP.org和ldapsearch docs挖掘各种发行版并未得出答案。每当我寻找有关嵌套属性或层次结构的东西时,我都会发现大量关于嵌套组和成员资格查询的文档,但这不是问题所在。
非常感谢您的任何建议。
答案 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,以查看可能的内容。