2017-06-17 54 views
1

我瞭解如何基於簡單的配件創建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?」
  • 「主要校園裏工作家庭= 789的臨時員工是誰?」

我希望能夠創建LDAP搜索過濾器指的是那些子屬性,是這樣的:

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

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

,但我想不出如果這是可能的,更不用說語法可能是什麼了。

我懷疑這不是LDAP的好用例,我應該在其他企業系統中尋找這些問題的答案。然而,將企業目錄用作不僅僅是榮耀的電話簿是非常方便的。

通過OpenLDAP.org和ldapsearch文檔搜索各種發行版並未得出答案。無論何時,當我尋找有關嵌套屬性或層次結構的信息時,我都會發現大量關於嵌套和成員資格查詢的文檔,但這不是問題。

非常感謝您的任何建議。

+0

LDAP不以任何方式支持此形狀或形式,您也不應該這樣做。 '嵌套屬性'應該是子對象。 – EJP

+0

也許如果你展示了你對付它的結構會更有意義,並且可以提出一個建議。 – jwilleke

+0

@EJP我想我在這裏學到的是,這不是使用LDAP的好方法。案件結案! –

回答

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來查看可能的結果。

+0

@Estaban - 非常感謝您的回覆。我認爲我在這裏學到的是,這不是使用LDAP的好方法。我很欣賞你在這個答案中投入的時間和精力! –

+0

@ThomasKnox根據你現在的結構,對於像'graduationStatus = {campus = CAMPUS_CODE}:{degSchool = SCHOOL_CODE}:{classYr = YYYY}'這樣的屬性,你仍然可以像'(&(graduateStatus = * {campus = BUS} *)(graduateStatus = * {classYr = 1995} *))'。它應該工作,但性能明智,它不會非常有效。 – Esteban