LDAP ネームサービスプロバイダ
Java Naming and Directory InterfaceTM (JNDI)


コメントの送付先: jndi@java.sun.com

目次

  1. はじめに
  2. 適合性
  3. 環境プロパティ
  4. 名前
  5. 属性
  6. URL
  7. Java オブジェクト
  8. スキーマ
  9. 例外
  10. API マッピング
  11. 連合
  12. イベントの通知
  13. SSL
  14. セキュリティについて



1. はじめに

Lightweight Directory Access Protocol (LDAP) は、ディレクトリサービスにアクセスするときのインターネット標準です。JNDI/LDAP サービスプロバイダを使用して、LDAP のプロトコルが実装されているサーバにアクセスすることができます。

このドキュメントでは、LDAP サービスプロバイダの機能について説明します。主に、LDAP サービスプロバイダの動作を中心に説明します。 詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。例および使用方法については、JNDI チュートリアルを参照してください。

LDAP サービスプロバイダでは、LDAP アクセスの基本機能が実装されます。LDAP サービスプロバイダでは、LDAP アクセスの基本機能が実装されます。 汎用的な LDAP コントロール、SASL 認証、RMI と CORBA オブジェクトの格納および読み込みに対するサポートなどを基本プロバイダに追加する場合は、「ブースターパック」をインストールしてください。 「ブースターパック」は、JNDI の Web サイトからダウンロードできます。


2. 適合性

LDAP サービスプロバイダは、次の標準に準拠しています。
 
標準 サポート 備考
LDAPv3 (RFC-2251) はい  
LDAPv3 属性 (RFC-2252) はい  
LDAPv3 識別名 (RFC-2253) はい  
LDAP 検索フィルタ (RFC-2254) はい  
LDAP URL 形式 (RFC-2255) はい  
LDAPv3 スキーマ (RFC-2256) はい  
LDAPv2 (RFC-1777) はい  


3. 環境プロパティ

JNDI および LDAP 固有のプロパティについての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。

3.1 JNDI プロパティ

LDAP サービスプロバイダでは、次の JNDI 環境プロパティがサポートされます。
 
プロパティ サポート 備考
java.naming.batchsize はい デフォルト値は 1
java.naming.factory.control はい  
java.naming.factory.initial はい LDAP サービスプロバイダを初期コンテキストとして使用するときは、com.sun.jndi.ldap.LdapCtxFactory を指定する
java.naming.factory.object はい  
java.naming.factory.state はい  
java.naming.language No 無視される
java.naming.provider.url はい  
java.naming.referral はい  
java.naming.security.authentication はい simplenone
java.naming.security.credentials はい  
java.naming.security.principal はい  
java.naming.security.protocol はい  

3.2 LDAP 固有のプロパティ

LDAP サービスプロバイダでは、次の LDAP 固有の環境プロパティがサポートされます。
 
プロパティ サポート 備考
java.naming.ldap.attributes.binary はい  
java.naming.ldap.control.connect はい  
java.naming.ldap.deleteRDN はい  
java.naming.ldap.derefAliases はい  
java.naming.ldap.factory.socket はい java.naming.security.protocol プロパティに ssl が設定されているときは、デフォルト値は javax.net.ssl.SSLSocketFactory。詳細は、「SSL」を参照
java.naming.ldap.ref.separator はい  
java.naming.ldap.referral.limit はい  
java.naming.ldap.typesOnly はい  
java.naming.ldap.version はい  

3.4 プロバイダ固有のプロパティ

LDAP サービスプロバイダは、次のプロバイダ固有の環境プロパティを定義しています。
 
com.sun.jndi.ldap.netscape.schemaBugs
Netscape Directory Server 4.0 以前のリリースでは、RFC 2252 に準拠しているスキーマエントリはサポートされていません。Netscape サーバでは、特に、RFC 2252 と異なり、OID (SUP および SYNTAX の OID など) は単一引用符で区切り、MUST/MAY リストは括弧で囲む必要があります。Netscape Directory Server 4.0 のスキーマを更新するときは、この問題に対処するために、この com.sun.jndi.ldap.netscape.schemaBugs プロパティを使用する必要があります。

次の値は、このプロパティ用に定義されたものです。

        true
           回避策を有効にする
        false
           回避策を無効にする

このプロパティが設定されない場合、デフォルト値は false になります。

次に例を示します。

env.put("com.sun.jndi.ldap.netscape.schemaBugs", "true");
この場合は、回避策が有効になります。

注 1: このプロパティは、初期コンテキストにだけ渡され、そのプロバイダで固定されます。addToEnvironment または removeFromEnvironment メソッドには影響されません。

注 2:Netscape Directory Server 4.1 を使用している場合、このプロパティを使用してはなりません。4.1 サーバでは、括弧の付かない MUST/MAY 句を含むオブジェクトクラス定義を構文解析する際に問題が発生します。単一の MUST/MAY 項目を含むオブジェクトクラス定義を作成または変更する場合、MUST/MAY リストに余分の値 (「objectClass」など) を追加することにより、このバグを回避してください。

com.sun.jndi.ldap.trace.ber
このプロパティの値は、java.io.OutputStream オブジェクトです。 このオブジェクトに対して、LDAP ASN.1 BER の送受信パケットの 16 進ダンプが書き込まれます。

このプロパティのデフォルトは定義されていません。

次に例を示します。

env.put("com.sun.jndi.ldap.trace.ber", System.out);
この場合、LDAP プロトコルトレースは標準の出力ストリームに書き込まれます。

: このプロパティは、初期コンテキストにだけ渡され、そのプロバイダで固定されます。addToEnvironment または removeFromEnvironment メソッドには影響されません。


4. 名前

LDAP サービスプロバイダの名前についての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。 次の形式の LDAP 識別名がサポートされています。
 
識別名の形式 備考
String 複合名とみなされる。複合名の最初のコンポーネントは、識別名として処理される。残りのコンポーネントは連合される
名前 CompositeName のインスタンスの場合は、複合名とみなされる。 つまり、最初の複合名のコンポーネントは、識別名として処理され、残りのコンポーネントは連合される。CompositeName のインスタンスでない場合は、解析済みの LDAP 名とみなされる。 この場合、Name の各コンポーネントは、RFC-2253 に定義されている LDAP 名のコンポーネントとなる
LDAP URL 文字列 LDAP URL 文字列が初期コンテキストに渡されると、RFC-2255 に基づいて解釈され、その識別名コンポーネントは RFC-2255 に基づいて解釈される

getNameParser() 呼び出しから返された名前パーサによってパーサが返されます。 このパーサは、文字列名を受け取ると RFC-2253 に基づいて文字列名を解析し、コンポーネントに渡します。


5. 属性

LDAP サービスプロバイダの属性について詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。 LDAP サービスプロバイダでは、属性値を指定するときに次の形式が使用されます。
 
属性値の形式 サポート 備考
String はい  
byte[] はい  

一部の LDAP サーバでは、属性値に対して言語の優先順位を指定するときに、属性の部分型、属性名の類語、および言語コードを使用することができます。この場合、LDAP サーバから返された属性名は、要求した属性名と異なることがあります。

LDAP では、属性名の大文字小文字が区別されます。このため、パラメータとして JNDI 操作に渡す属性のまとまりを作成するときは、大文字小文字が区別される属性クラスを使用することをお勧めします。次に例を示します。

        Attributes attrs = new BasicAttributes(true); // ignoreCase=true

属性値を使用するときは、String および byte[] のどちらの場合も、その属性値の構文と形式の情報が必要です。属性値の構文と形式は、これらの情報が定義されているスキーマドキュメントで確認できます。

属性を JNDI 呼び出しに引数として指定するときは、その属性は LDAP ディレクトリに適用されているすべてのスキーマに合致していなければなりません。特に、新しい LDAP を作成するときは (Context.bind Context.rebind、または DirContext.createSubcontext を使用するときなど)、通常は objectClass 属性が必要です。


6. URL

LDAP サービスプロバイダの URL についての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。 URL は、次の方法で使用できます。
 
URL の使用法 サポート 備考
LDAP URL を使用して LDAP サービスプロバイダを設定する はい  
URL を InitialDirContext メソッドに名前として渡す はい LDAP URL の属性、スコープ、フィルタ、および拡張コンポーネントは、search メソッドでは無視される
LDAP 紹介で URL を使用する はい LDAP URL のスコープコンポーネントはサポートされる。属性、フィルタ、および拡張コンポーネントは無視される
URL が、listlistBindings、および search 列挙の名前として返される はい  
連合された名前空間に URL をリンクする はい  



7. Java オブジェクト

LDAP サービスプロバイダでは、次の種類のオブジェクトの格納および読み込みを行うことができます。 詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。
 
格納および読み込みが可能なオブジェクト サポート 備考
Reference オブジェクト はい  
Referenceable オブジェクト はい  
Serializable オブジェクト はい  
DirContext オブジェクト はい  

例については、JNDI チュートリアルを参照してください。


8. スキーマ

LDAP サービスプロバイダのスキーマバインディングについての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。
 
スキーマツリー サポート 備考
AttributeDefinition はい 属性定義の追加または削除はできるが、変更はできない
ClassDefinition はい クラス定義の追加または削除はできるが、変更はできない
SyntaxDefinition はい 構文定義の追加または削除はできるが、変更はできない
MatchingRule はい 一致規則の追加または削除はできるが、変更はできない
ExtensionDefinition No  
ControlDefinition No  
SASLMechanism No  


9. 例外

LDAP サービスプロバイダの、LDAP エラーコードの JNDI 例外へのマッピングについての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。
 


10. API マッピング

LDAP サービスプロバイダでは、次の JNDI API メソッドが LDAP にマッピングされます。 詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。
 
Context メソッドのマッピング サポート 備考
addToEnvironment はい  
bind はい  
close はい  
composeName はい  
destroySubcontext はい  
getEnvironment はい  
getNameInNamespace はい  
getNameParser はい  
list はい  
listBindings はい  
lookup はい LinkRef は対象外
lookupLink はい  
rebind はい  
removeFromEnvironment はい  
rename はい  
unbind はい  
DirContext メソッドのマッピング サポート 備考
bind はい  
createSubcontext はい  
destroySubcontext はい  
getAttributes はい  
getSchema はい  
getSchemaClassDefinition はい  
modifyAttributes はい  
rebind はい  
search はい  
LdapContext メソッドのマッピング サポート 備考
extendedOperation はい  
getRequestControls はい  
getResponseControls はい  
newInstance はい  
reconnect はい  
setRequestControls はい  
EventDirContext メソッドのマッピング サポート 備考
addNamingListener はい  
removeNamingListener はい  
targetMustExist はい  


11. 連合

LDAP サービスプロバイダの連合についての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。次の連合方法がサポートされます。
 
連合方法 サポート 備考
連結 はい  
暗黙的な次のネームシステムポインタ はい  
 

LDAP サービスプロバイダでは、複合名は「強く区分されている」とみなされます。つまり、複合名の最初のコンポーネントが識別名として処理され、残りのコンポーネントは次のネームシステムの名前として処理されます。たとえば、次の例では、次のネームシステムのルートのリストを出力しています。 このネームシステムは、LDAP コンテキストを超えて連合されています。 次に、マルチコンポーネントの複合名を使用して名前が参照されます。

// List the root of the nns,
// Note use of the trailing slash to indicate traversal into the nns
NamingEnumeration enum = ctx.list("cn=objects,ou=Sales/");

// A composite name lookup
Object obj = ctx.lookup("cn=objects,ou=Sales/some/x/y/z");


12. イベントの通知

LDAP サービスプロバイダのイベントの通知についての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。次のイベントがサポートされます。
 
イベント サポート 備考
名前空間の変更の通知 はい 持続的検索コントロールを使用
オブジェクトの変更の通知 はい 持続的検索コントロールを使用
任意の通知 はい  


13. SSL

LDAP サービスプロバイダの SSL についての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。java.naming.ldap.factory.socket プロパティがほかのソケットファクトリのクラス名に設定されていない場合は、デフォルトの javax.net.ssl.SSLSocketFactory ソケットファクトリが使用されます。javax.net.ssl.SSLSocketFactory を使用するときは、Sun の Java Web ServerTM の SSL パッケージまたは HotJavaTM ブラウザ製品が必要です。SSL の認証に必要な非公開鍵と公開鍵の証明書の、初期化および設定を行う方法については、これらの製品のドキュメントを参照してください。

14. セキュリティについて

セキュリティマネージャがインストールされている場合は、JNDI を使用するアプリケーションおよび LDAP サービスプロバイダに対して、次のアクセス権を割り当てる必要があります。

permission java.net.SocketPermission "host[:port]", "connect";
コンテキストメソッドに渡された java.naming.factory.initial プロパティおよび URL 文字列名に指定されている、各ホストまたはポートに対して割り当てられます。
permission java.net.SocketPermission "host[:port]", "connect,accept";
Serializable オブジェクトを使用して格納された References および javaCodebase 属性の URL 文字列に指定されている、各ホストまたはポートに対して割り当てられます。


Copyright © 1999 Sun Microsystems, Inc., All Rights Reserved.