2017-06-17 14 views
1

シンプルなattriburtesに基づいてldap検索フィルタを作成する方法を理解しています。LDAP:ネストされた属性と値の検索フィルタを作成する方法

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

は、最後の名前が「Smith」で始まる大学の人々の素敵なリストを返します。ここまでは順調ですね!私たちの大学のLDAPスキーマで

、人々は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} 

ような構造を持つカスタム属性またはサブオブジェクトの数を持っています

  • 「ビジネスカレッジを卒業した人は誰ですか? 1995?
  • 「看護学校のすべてのスタッフはjobCode = 456789で誰ですか?」
  • 「メインファミリーの派遣社員は誰ですか?職場= 789ですか?」

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

    または

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

    が、私は把握することはできません:私は、これらのサブ属性を参照するようなものをLDAP検索フィルタを作成できるようにしたいと思い

これが可能であれば、構文が何であるかは言わないでください。

私はこれがLDAPの良いユースケースではないと思うし、他のエンタープライズシステムでこのような質問に対する回答を探すべきだと思う。しかしエンタープライズディレクトリを栄光の電話帳以上のものとして使用することは非常に便利です。

OpenLDAP.orgとldapsearchを使ってさまざまなディストリビューションを検索しても、回答は得られませんでした。ネストされた属性や階層について何かを探すたびに、ネストされたグループとメンバーシップのクエリに関するドキュメントがたくさん見つかりますが、ここでは問題にはなりません。何かアドバイスのため

感謝します。

+0

LDAPはこれをどのような形でもフォームでサポートしていません。 'ネストされた属性'はサブオブジェクトでなければなりません。 – EJP

+0

おそらく、あなたが働いていることの構造を見せたら、それはもっと意味があり、示唆を出すことができます。 – jwilleke

+0

@EJPここで学んだことは、これはLDAPを使う良い方法ではないということです。ケースが閉まった! –

答えて

1

あなたのデータの構造を変更することなく、私はOpenLDAPのと見ることができる唯一の方法は、あなたが要求のこの種を行うことができる可能性があり、オーバーレイを開発することであるが、それは簡単な作業ではありません。)

データの構造を変更したり、特定のデータを複製(および整合性を維持)しても問題がなければ、これらの属性をユーザーのグループに展開することができます。

リクエストは、同時に複数のグループに属するユーザーを見つけることです。例えば

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

は次のようになります。私は考えることができ、最後のアイデアは、このフィルタリングを行うことであろう

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

ツリーで

(&(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))

のようにAPIを作成し、この種のフィルターを使用してAPIを要求し、APIに必要な要求を行い、結果を集約させます。

カスタムネストされた属性/サブエントリのLDIFを投稿して、可能なものがあるかどうかを確認できます。

+0

@エスタバン - ご返信いただきありがとうございます。私はここで学んだことは、これはLDAPを使う良い方法ではないということです。私はあなたがこの答えに入れた時間と努力に感謝します! –

+0

@ThomasKnox 'graduateStatus = {campus = CAMPUS_CODE}:{degSchool = SCHOOL_CODE}:{classYr = YYYY}'のようなあなたの現在の構造体では '(&(graduateStatus = * {campus = BUS} *)(graduateStatus = * {classYr = 1995} *)) '。それはうまくいくはずですが、パフォーマンスは賢明です。効率的ではありません。 – Esteban

関連する問題