LDAPサーバーに接続してクエリを実行するさまざまなコードを記述しましたが、常にそれは私にはブードゥー教でした。私が本当に理解していないことの1つは、バインドDNの概念です。 openldapから入手できるldapsearch
コマンドラインツールを使用した例を次に示します。 (認証の欠如は無視してください。)
ldapsearch -h 1.2.3.4 -D dc=example,dc=com [query]
この-D dc=example,dc=com
部分の目的と機能は何ですか?なぜディレクトリ階層の特定の場所にバインドする必要があるのですか?クエリが適用されるディレクトリの部分を確立することですか?例えば。ディレクトリのルートノードがdc=com
で、2つの子(dc=foo
とdc=bar
)がある場合、クエリをdc=foo,dc=com
サブツリーに対して行い、 dc=bar,dc=com
サブツリー?
バインドDNは、LDAP内にバインドするオブジェクトであり、実行しようとしていることをすべて実行するためのアクセス許可を付与します。一部(多くの場合)のLDAPインスタンスでは、匿名バインドが許可されていないか、特定の操作を匿名バインドで実行できないため、bindDNを指定して、その操作を実行するためのIDを取得する必要があります。
同様の非技術的な方法で-そしてこれはストレッチです-銀行はあなたに彼らにどんな種類のIDも与えることなく彼らの金利を調べて見ることを可能にします、しかし口座を開くかお金を引き出すためにあなたは持っています彼らが知っているアイデンティティを持つために-そのアイデンティティはbindDNです。
baseDNとbindDNを混同しないでください。
検索のbaseDNが開始点です。検索を開始する場所。かなり自明です。
bindDNDNは、基本的にLDAPに対する認証に使用する資格情報です。 bindDNを使用する場合、通常はパスワードが関連付けられています。
つまり、bindDNを指定すると、そのオブジェクトセキュリティアクセスを使用してLDAPツリーを通過します。
現在、文字列dc = example、dc = comは、LDAPツリーの「ドメイン」であるため、bindDNに最適なexampleではありません。 dcはdomainコンポーネントを表し、すべてのLDAPツリーはそのルートをdcの形式の文字列で定義します= string、dc = string、...しかし、これらの文字列は、ツリーの他の部分のような「パス」ではありません。
有効な例は次のとおりです。
ただし、これらのルート要素は分割できません。それらは、ツリーの他の部分のようなパスを表すいくつかの要素であるように見えますが、ではありません。たとえば、最後の例では、オブジェクトdc = of、dc = domainsは存在しません。
C:ドライブに "D:\ my\folder \"のような名前を付けることを想像してください。そこにあるすべてのパスは、 "D:\ my\folder\my\real\path"のようになります。これは、実際のファイルパスが\ my\real\pathであると混乱するでしょうか。まあ、それは一連のdc =要素を持つLDAPのベース(ルート)のようです。
関連リンク: http://docs.Oracle.com/cd/E19199-01/816-6400-10/lsearch.html