ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Identity Managementリファレンス
11gリリース1 (11.1.1)
B55921-03
  目次へ
目次
索引へ
索引

前へ
前へ
 
次へ
次へ
 

A LDIFファイル形式

この付録は、Oracle Internet Directoryコマンドライン・ツールで使用可能なLDAP Data Interchange Files (LDIF)の作成に関する一般的な情報を紹介しています。LDIFファイルは、Oracle Internet DirectoryなどのLDAPディレクトリ・サーバー間でデータをやり取りするために使用できる特別な形式のテキスト・ファイルです。

この付録の内容は次のとおりです。

A.1 一般的なLDIF形式の規則

LDIF形式は、Internet Engineering Task Force(IETF)によってRFC 2849に定義されています。LDIF形式の規則の詳細は、IETFのWebサイト(http://www.ietf.org/rfc/rfc2849.txt)を参照してください。この項では、LDIFファイルの形式に関する一般的な規則について説明します。

A.1.1 行タイプと空白

LDIFファイルの各行は、Oracle Internet Directoryコマンドライン・ツールが読み取れる正しい形式で記述されている必要があります。空白および改行を使用する場合は、注意が必要です。

LDIFファイルの各行の末尾は改行(UNIXの場合は<LF>、Windowsの場合は<CR><LF>)にします。LDIFには、次のタイプの行があります。

  • ディレクティブ行: 先頭がSPACEまたは#(シャープ)でない行。ディレクティブ行は、エントリ内のデータのタイプまたは実行する処理を指定します。

  • 継続行: 先頭がSPACEの行。この場合、空白の後ろの文字列は前の行の続きとなります。

  • 空白行: エントリの区切りに使用され、一般に[Enter]キーを使用して作成されます。

  • コメント行: #(シャープ)で始まるコメント行。コメントは、Oracle Internet Directoryコマンドライン・ツールでは無視されます。

  • セパレータ行: -(ダッシュ)文字で始まる行は操作の終了に使用されます。これは、次の行から新規操作のディレクティブが開始すること意味します。

属性値の最後に空白が入っている場合など、LDIF入力ファイルに不必要な空白があると、LDAP操作が失敗します。

A.1.2 エントリの順序

LDIFファイル内のエントリの順序は、ディレクトリ情報ツリー(DIT)のトップダウン順序に従う必要があります。親エントリを子エントリの前にリストする必要があります。エントリで使用される属性やオブジェクト・クラスは、スキーマに存在しているか、使用前にスキーマに追加する必要があります。複数のエントリは空白行で区切ります。

A.1.3 バイナリ・ファイル

写真などのバイナリ・ファイルは、スラッシュ(\)で始まるファイルの絶対アドレスで参照付けます。

A.1.4 属性値内の非表示文字

非表示文字およびタブは、属性値ではBASE64エンコーディングとして表します。

A.2 エントリのLDIF形式

ディレクトリ・エントリの標準形式は、次のとおりです。

dn: distinguished_name
changetype: add|delete|modify|modrdn|moddn
attribute_type: attribute_value
...
objectClass: object_class_value
...

dnディレクティブ

dnディレクティブは、エントリの識別名(DN)を定義します。dnディレクティブの下の行は、別のエントリであることを示すためにLDIFファイルに空白を追加するまで、すべてそのエントリに属するとみなされます。次に、dnディレクティブ行の例を示します。

dn: cn=Mary Jones,ou=Sales,dc=company,dc=com

changetypeディレクティブ

changetypeディレクティブは、エントリに対して実行する操作を定義します。changetypeディレクティブを使用して指定する操作は、次のとおりです。

bulkloadldapaddまたはldapaddmtを使用している場合、changetypeディレクティブを省略するとadd操作とみなされます。bulkdeleteまたはldapdeleteを使用している場合はdelete操作とみなされます。その他のすべての操作については、changetype:ディレクティブを指定する必要があります。

attribute_typeディレクティブ

attribute_typeディレクティブは、属性タイプの名前と値のペアを指定するために使用します。このエントリでは、エントリ内の各属性に対してattribute_typeディレクティブを定義します。たとえば、Mary Smithという値を持つcnという属性タイプのattribute_typeディレクティブは、次のようになります。

cn: Mary Smith

objectClassディレクティブ

objectClassディレクティブは、エントリと関連付けるオブジェクト・クラスを指定するために使用します。エントリが複数のオブジェクト・クラスを使用する場合、使用する各オブジェクト・クラスに対してobjectClassディレクティブを指定します。ユーザー・エントリを定義するオブジェクト・クラスの例を示します。

objectClass: orclUserV2
objectClass: organizationalPerson
objectClass: person
objectClass: top

オブジェクト・クラスに必須の属性がある場合は、attribute_typeディレクティブを使用してこれらの属性の値を指定する必要があります。

A.2.1 エントリを追加するLDIF形式

次の例は、従業員のファイル・エントリを示しています。最初の行には、DNが含まれています。2番目の行は、changetype: addディレクティブです。その後の行は属性タイプの名前で始まり、その属性に関連付けられる値が続いています。photo属性の値は、バイナリ・ファイル参照であることを示すスラッシュ(\)で始まっていることに注意してください。エントリの最後は、セパレータとして空行を使用します。

dn: cn=Suzie Smith,ou=Server Technology,o=Acme, c=US
changetype: add
cn: Suzie Smith
cn: Suzie
sn: Smith
mail: ssmith@us.Acme.com
telephoneNumber: 69332
photo: \$ORACLE_INSTANCE/empdir/photog/ssmith.jpg
objectClass: organizationalPerson
objectClass: person
objectClass: top

A.2.2 エントリを削除するLDIF形式

ldapmodifyまたはldapmodifymtを使用してエントリを削除する場合、LDIFファイル・エントリでは、削除するエントリのDNおよびchangetype: deleteディレクティブのみが必要です。エントリの最後は、セパレータとして空行を使用します。

dn: cn=Suzie Smith,ou=Server Technology,o=Acme, c=US
changetype: delete

ldapdeleteコマンドは、DNのリストのみを必要とします。changetype演算子は必要としません。

A.2.3 エントリを変更するLDIF形式

エントリを変更する場合、エントリのDNを指定し、その後にchangetype: modifyディレクティブを指定する必要があります。その後、次のいずれかのディレクティブを使用して、変更する属性を指定します。

  • add: attribute_type - 値を追加する属性タイプの名前を指定します。このため、次の行には追加する値のattribute_type: valueディレクティブが含まれることになります。次に例を示します。

    add: work-phone
    work-phone: 510/506-7000
    
  • delete: attribute_type - 値を削除する属性タイプの名前を指定します。複数値属性の場合は、削除する個別の値のattribute_type: valueディレクティブも指定する必要があります。指定しないと、属性のすべての値が削除されます。次に例を示します。

    delete: home-fax
    
  • replace: attribute_type - 既存値を新規の値に置換する属性タイプの名前を指定します。このため、次の行には、置換する値のattribute_type: valueディレクティブが含まれることになります。次に例を示します。

    replace: home-phone
    home-phone: 415/697-8899
    

    複数値属性の場合は、現在値のすべてがこのディレクティブに続く1つ以上の属性に置換されます。複数の値を持つ属性の1つの値のみを変更する必要がある場合は、deleteを使用してからaddを使用します。

1つのエントリに対して複数の変更を行う場合は、入力する各変更の間にハイフン(-)のみの行を追加します。次に例を示します。

dn: cn=Barbara Fritchy,ou=Sales,o=Oracle,c=US
changetype: modify
add: work-phone
work-phone: 650/506-7000
work-phone: 650/506-7001
-
delete: home-fax
-
replace: home-phone
home-phone: 415/697-8899

A.2.4 エントリのRDNを変更するLDIF形式

エントリの相対識別名(RDN)を変更するには、エントリのDNを指定して、その後にchangetype: modrdnディレクティブを続ける必要があります。次に、newrdn:ディレクティブを使用して新規RDNを指定する必要があります。また、オプションでdeleteoldrdn:ディレクティブを指定することで、古いエントリの削除または保持ができます。次に例を示します。

dn: cn=Sally Smith,ou=people,dc=example,dc=com
changetype: modrdn
newrdn: dn=Sally Smith-Jones
# deletes old RDN entry
deleteoldrdn: 1

A.2.5 エントリのDNを変更するLDIF形式

エントリのDNを変更する(DIT内の新規ノードにエントリを移動する)には、エントリのDNを指定して、その後にchangetype: moddnディレクティブを続ける必要があります。さらに、newsuperior:ディレクティブを使用して新規の親DNも指定する必要があります。また、オプションでdeleteoldrdn:ディレクティブを指定することで、古いエントリの削除または保持ができます。次に例を示します。

dn: cn=Sally Smith,ou=people,dc=example,dc=com
changetype: moddn
# keeps old RDN entry
deleteoldrdn: 0
newsuperior: ou=expeople,dc=example,dc=com

A.3 スキーマ要素を追加するLDIF形式

属性タイプとオブジェクト・クラスをエントリで使用するには、Oracle Internet Directoryスキーマに追加しておく必要があります。

例: スキーマへの属性の追加

この例では新しい属性をmyAttrというスキーマに追加しています。この操作のためのLDIFファイルを次に示します。

dn: cn=subschemasubentry 
changetype: modify 
add: attributetypes 
attributetypes: ( 1.2.3.4.5.6.7 NAME 'myAttr' DESC 'New attribute definition'  
 EQUALITY caseIgnoreMatch SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' ) 

最初の行では、この新しい属性の位置を指定するDNを入力します。すべての属性およびオブジェクト・クラスは、cn=subschemasubentryに格納されます。

2行目と3行目は、新しい属性を追加するための適切な形式を示しています。

最後の行が属性の定義です。この行の最初の部分はオブジェクト識別番号1.2.3.4.5.6.7です。これは、他のすべてのオブジェクト・クラスと属性の間で一意である必要があります。次はNAMEという属性です。この例では、属性NameはmyAttrです。一重引用符で囲む必要があります。続いて属性の説明です。一重引用符の間に必要なすべての説明を入力します。この例では、この属性定義の最後は属性に対するオプションの形式指定のルールになっています。この例では、EQUALITY caseIgnoreMatchという一致規則と1.3.6.1.4.1.1466.115.121.1.15(Directory Stringという構文のオブジェクトID)というSYNTAXを追加しています。

LDIFファイル内でスキーマを定義するときは、左カッコとテキストの先頭の間、およびテキストの最後と閉じカッコの間に空白を挿入します。

例: スキーマへのオブジェクト・クラスの追加

オブジェクト・クラスを追加するには、オブジェクト・クラスが使用するすべての属性タイプがスキーマ内に存在する必要があります。新しい属性タイプが存在する場合は、オブジェクト・クラスを定義する前に先にLDIFファイルで定義します。

次の例では、myObjectClassという新しいオブジェクト・クラスをスキーマに追加しています。

dn: cn=subschemasubentry
changetype: modify
add: objectClasses
objectClasses: ( 1.2.3.4.56789.1.0.200 NAME 'myObjectClass' 
 SUP ( top ) STRUCTURAL
 MUST ( cn )
 MAY ( myAttr1 $  myAttr2 $ myAttr3 ) )

最初の行では、この新しいオブジェクト・クラスの位置を指定するDNを入力します。すべての属性およびオブジェクト・クラスは、cn=subschemasubentryに格納されます。

2行目と3行目は、新しいオブジェクト・クラスを追加するための適切な形式を示しています。

最後の行がオブジェクト・クラスの定義です。この行の最初の部分はオブジェクト識別番号1.2.3.4.56789.1.0.200です。これは、他のすべてのオブジェクト・クラスと属性の間で一意である必要があります。次はNAMEというオブジェクト・クラスです。この例では、オブジェクト・クラスの名前はmyObjectClassです。一重引用符で囲む必要があります。続いて上位(SUP)オブジェクト・クラス(この例ではtop)です。STRUCTURALは、オブジェクト・クラスのタイプを示します。MUSTおよびMAYは、必須属性および許可されている属性を示します。各属性名はドル記号($)で区切ります。

LDIFファイル内でスキーマを定義するときは、左カッコとテキストの先頭の間、およびテキストの最後と閉じカッコの間に空白を挿入します。長い行を改行して体裁を整える場合、前の行の続きであることを示すには、行の先頭に空白を追加します。

例: エントリへの新規オブジェクト・クラスの追加

新しいオブジェクト・クラスとそれに含まれる属性を使用するには、その前に新しいオブジェクト・クラスを使用するためにエントリを更新する必要があります。次の例は、新しいオブジェクト・クラスをエントリに追加する方法を示しています。オブジェクト・クラスのすべての必須属性に対して、値を定義する必要があります。

# Add a new AUXILIARY object class to an existing entry 
dn: cn=Robert Smith,ou=people,dc=example,dc=com
changetype: modify
# the object class used for binding
objectclass: inetorgperson
# objectclass being added
objectclass: myObjectClass
# MUST attributes of new object class
myAttr1: some value
myAttr2: my value
myAttr3: a value

A.4 エントリを移行するLDIF形式

この項では、Oracle Internet Directory移行ツールで使用するための正しいLDIFファイルの形式について説明します。移行ツールを使用すると、他のディレクトリまたはアプリケーションからLDIFエントリ出力を取り出し、Oracle Internet Directoryエントリで見られる属性および値を使用するためにデータを変換できます。これは、変換するデータ要素に対して置換変数を挿入して実行します。

Oracle Internet Directory移行ツールの詳細は、「ldifmigrator」を参照してください。

A.4.1 入力ファイルを移行するための置換変数

置換変数は、LDIFファイルでは次の構文によって表記されます。

%s_variableName%

たとえば、別のアプリケーションからエクスポートされた次のようなLDIF形式のエントリがあるとします。Oracle Internet Directoryでは、ユーザー・エントリが格納されているサブツリー、ユーザー・ニックネーム属性およびユーザーの組織名が元のアプリケーションと異なります。変換するこれらの要素について、プレースホルダとしてファイルに置換変数を追加します。

例:

dn: cn=jdoe, %s_UserContainerDN%
sn: Doe
%s_UserNicknameAttribute%: jdoe
objectClass: inetOrgPerson
objectClass: orclUserV2
title: Member of Technical Staff
homePhone: 415-584-5670
homePostalAddress: 234 Lez Drive$ Redwood City$ CA$ 94402
ou: %s_UserOrganization%

このファイルに対してOracle Internet Directory移行ツールを実行すると、変数が検出され、コマンドラインで定義した値に置換されるか、Oracle Internet Directoryで正しい値が検索されます。

A.4.1.1 事前定義の置換変数

Oracle Internet Directory移行ツールは、いくつかの事前定義の置換変数を認識します。参照モードでツールを実行すると、Oracle Internet Directoryでこれらの変数の値を参照できます。これらの事前定義変数を使用したり、%s_variableName%構文を使用して独自の変数を定義できます。

表A-1 事前定義の置換変数

変数名 意味 OID移行ツールによる変数値の判別方法

%s_UserContainerDN%

すべてのユーザーが追加されるエントリの識別名。

レルム固有のOracleコンテキストにあるエントリcn=Common,cn=ProductsからorclCommonUserSearchBase属性の値が割り当てられます。

%s_GroupContainerDN%

すべてのパブリック・グループが追加されるエントリの識別名。

レルム固有のOracleコンテキストにあるエントリcn=Common,cn=ProductsからorclCommonGroupSearchBase属性の値が割り当てられます。

%s_UserNicknameAttribute%

アイデンティティ管理レルムのユーザー・エントリに使用するニックネーム属性。

レルム固有のOracleコンテキストにあるエントリcn=Common,cn=ProductsからoorclCommonNicknameAttribute属性の値が割り当てられます。

%s_SubscriberDN%

アイデンティティ管理レルムに対応するLDAPエントリの識別名。

単純なサブスクライバ名を指定すると、移行ツールは、ルートOracleコンテキストにあるエントリcn=Common,cn=Productsから属性orclSubscriberSearchBaseorclSubscriberNickNameAttrを使用し、そのサブスクライバ名を識別名に解決します。

%s_SubscriberOracleContextDN%

レルム固有のOracleコンテキストの識別名。

最初にレルムの識別名が前述のように導出され、次に文字列cn=OracleContextがその識別名の前に付加されます。

%s_RootOracleContextDN%

ルートOracleコンテキストの識別名。

現在は、cn=OracleContextにハードコードされています。

%s_CurrentUserDN%

LDIFファイルをロードするユーザーの識別名。この識別名は、最低1名のメンバーが必要なグループの作成を開始するときに、必要となる場合があります。

移行ツールでは、この識別名が認証情報の一部としてコマンドラインで指定されることを前提にしています。


A.4.2 移行されたエントリの調整オプション

別のアプリケーションからOracle Internet Directoryにエントリを移行すると、競合が発生する可能性があります。たとえば、ユーザー・エントリがOracle Internet Directoryですでに定義されていたり、移行されたデータの値が競合している場合があります。このような場合、調整オプションによりどのLDIF changetypeディレクティブが実行されるのかが制御されます。移行されたデータの調整には、次の3つのモードがあります。

  • SAFE: このモードでは、存在しない新規エントリを追加するか、既存のエントリに新規属性を追加するのみです。LDIFファイルに次のディレクティブ以外のディレクティブが指定されている場合は、適用されません。

    changetype:add
    
    changetype:modify
          add: attribute_name (adds attribute only if it doesn't exist)
    
  • SAFE-EXTENDED: このモードでは、存在しない新規エントリを追加するか、既存のエントリに新規属性を追加するのみです。既存の属性に新規の値を追加する場合は、既存の値セットに追加されます。LDIFファイルに次のディレクティブ以外のディレクティブが指定されている場合は、適用されません。

    changetype:add
    
    changetype:modify
          add: attribute_name (appends values if attribute exists)
    
  • NORMAL: このモードでは、すべてのディレクティブを指示どおりに適用します。次のディレクティブがサポートされます。

    changetype:add
    
    changetype:delete
    
    changetype:modify      add: attribute_name
          replace: attribute_name
          delete: attribute_name