A LDIFファイル形式
この項の内容は次のとおりです。
A.1 一般的なLDIF形式の規則
一般的なLDIF形式の規則について理解します。これらの形式は、Internet Engineering Task Force (IETF)によってRFC 2849に定義されています。
LDIF形式の規則の詳細は、IETFのWebサイト(http://www.ietf.org/rfc/rfc2849.txt
)を参照してください。
A.1.1 行タイプと空白
LDIFファイルで行タイプおよび空白を使用するためのガイドラインについて学習します。
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.2 エントリのLDIF形式
ディレクトリ・エントリを作成、変更および削除するためおよびエントリのRDNおよびDNを変更するために使用するLDIF形式について理解します。
この項の内容は次のとおりです。
A.2.1 ディレクトリ・エントリの標準形式
ディレクトリ・エントリの標準形式について理解します。
ディレクトリ・エントリの標準形式は、次のとおりです。
dn: distinguished_name changetype: add|delete|modify|modrdn|moddn attribute_type: attribute_value ... objectClass: object_class_value ...
この項の内容は次のとおりです。
A.2.1.1 エントリのdnディレクティブ
dn
ディレクティブは、エントリの識別名(DN)を定義します。
dn
ディレクティブの下の行は、別のエントリであることを示すためにLDIFファイルに空白を追加するまで、すべてそのエントリに属するとみなされます。次に、dn
ディレクティブ行の例を示します。
dn: cn=Mary Jones,ou=Sales,dc=company,dc=com
A.2.1.2 エントリのchangetypeディレクティブ
changetype
ディレクティブは、エントリに対して実行する操作を定義します。
changetype
ディレクティブを使用して指定する操作は、次のとおりです。
-
add
- 構文および例は、「エントリを追加するためのLDIF形式」を参照してください。 -
delete
- 構文および例は、「エントリを削除するためのLDIF形式」を参照してください。 -
modify
- 構文および例は、「エントリを変更するためのLDIF形式」を参照してください。 -
modrdn
- 構文および例は、「エントリのRDNを変更するためのLDIF形式」を参照してください。 -
moddn
- 構文および例は、「エントリのDNを変更するためのLDIF形式」を参照してください。
bulkload
、ldapadd
またはldapaddmt
を使用している場合、changetype
ディレクティブを省略するとadd
操作とみなされます。bulkdeleteまたはldapdeleteを使用している場合はdelete
操作とみなされます。その他のすべての操作については、changetype:
ディレクティブを指定する必要があります。
A.2.1.3 エントリのattribute_typeディレクティブ
attribute_type
ディレクティブは、属性タイプの名前と値のペアを指定するために使用します。
このエントリでは、エントリ内の各属性に対してattribute_type
ディレクティブを定義します。たとえば、Mary Smith
という値を持つcn
という属性タイプのattribute_type
ディレクティブは、次のようになります。
cn: Mary Smith
A.2.1.4 エントリのobjectClassディレクティブ
objectClass
ディレクティブは、エントリと関連付けるオブジェクト・クラスを指定するために使用します。
エントリが複数のオブジェクト・クラスを使用する場合、使用する各オブジェクト・クラスに対してobjectClass
ディレクティブを指定します。ユーザー・エントリを定義するオブジェクト・クラスの例を示します。
objectClass: orclUserV2 objectClass: organizationalPerson objectClass: person objectClass: top
ノート:
オブジェクト・クラスに必須の属性がある場合は、attribute_type
ディレクティブを使用してこれらの属性の値を指定する必要があります。
A.2.2 エントリを追加するためのLDIF形式
次の例から、エントリを追加するための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: \$DOMAIN_HOME/empdir/photog/ssmith.jpg
objectClass: organizationalPerson
objectClass: person
objectClass: top
A.2.3 エントリを削除するための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.4 エントリを変更するための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.5 エントリのRDNを変更するためのLDIF形式
エントリのDNを指定し、続けてchangetype: modrdn
ディレクティブを指定することで、エントリの相対識別名(RDN)を変更できます。
この場合、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.6 エントリのDNを変更するためのLDIF形式
エントリのDNを指定し、続けてchangetype: moddn
ディレクティブを指定することで、エントリのDNを変更(DIT内の新規ノードにエントリを移動)できます。
さらに、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 スキーマ要素の追加
スキーマ要素を追加する手順について理解します。属性タイプとオブジェクト・クラスをエントリで使用するには、Oracle Internet Directoryスキーマに追加しておく必要があります。
この項の内容は次のとおりです。
A.3.1 スキーマへの属性の追加
例を参考にして、スキーマに属性を追加する方法を学習します。この例では新しい属性を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ファイル内でスキーマを定義するときは、左カッコとテキストの先頭の間、およびテキストの最後と閉じカッコの間に空白を挿入します。
A.3.2 スキーマへのオブジェクト・クラスの追加
オブジェクト・クラスを追加するには、オブジェクト・クラスが使用するすべての属性タイプがスキーマ内に存在する必要があります。
新しい属性タイプが存在する場合は、オブジェクト・クラスを定義する前に先に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ファイル内でスキーマを定義するときは、左カッコとテキストの先頭の間、およびテキストの最後と閉じカッコの間に空白を挿入します。長い行を改行して体裁を整える場合、前の行の続きであることを示すには、行の先頭に空白を追加します。
A.3.3 エントリへの新規オブジェクト・クラスの追加
新しいオブジェクト・クラスとそれに含まれる属性を使用するには、その前に新しいオブジェクト・クラスを使用するためにエントリを更新する必要があります。
次の例は、新しいオブジェクト・クラスをエントリに追加する方法を示しています。オブジェクト・クラスのすべての必須属性に対して、値を定義する必要があります。
# 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形式
移行ツールを使用すると、他のディレクトリまたはアプリケーションからLDIFエントリ出力を取り出し、Oracle Internet Directoryエントリで見られる属性および値を使用するためにデータを変換できます。
移行ツールを使用すると、他のディレクトリまたはアプリケーションからLDIFエントリ出力を取り出し、Oracle Internet Directoryエントリにある属性および値を使用するためにデータを変換できます。これは、変換するデータ要素に対して置換変数を挿入して実行します。
Oracle Internet Directory移行ツールの詳細は、「ldifmigrator」を参照してください。また、次の項も参照してください。
A.4.1 入力ファイルを移行するための置換変数
LDIFファイルに示されている置換変数について理解します。
置換変数は、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で正しい値が検索されます。
Oracle Internet Directory移行ツールは、いくつかの事前定義の置換変数を認識します。参照モードでツールを実行すると、Oracle Internet Directoryでこれらの変数の値を参照できます。これらの事前定義変数を使用したり、%s_variableName%
構文を使用して独自の変数を定義できます。
表A-1 事前定義の置換変数
変数名 | 意味 | OID移行ツールによる変数値の判別方法 |
---|---|---|
%s_UserContainerDN% |
すべてのユーザーが追加されるエントリの識別名。 |
レルム固有のOracleコンテキストにあるエントリ |
%s_GroupContainerDN% |
すべてのパブリック・グループが追加されるエントリの識別名。 |
レルム固有のOracleコンテキストにあるエントリ |
%s_UserNicknameAttribute% |
アイデンティティ管理レルムのユーザー・エントリに使用するニックネーム属性。 |
レルム固有のOracleコンテキストにあるエントリ |
%s_SubscriberDN% |
アイデンティティ管理レルムに対応するLDAPエントリの識別名。 |
単純なサブスクライバ名を指定すると、移行ツールは、ルートOracleコンテキストにあるエントリ |
%s_SubscriberOracleContextDN% |
レルム固有のOracleコンテキストの識別名。 |
最初にレルムの識別名が前述のように導出され、次に文字列 |
%s_RootOracleContextDN% |
ルートOracleコンテキストの識別名。 |
現在は、 |
%s_CurrentUserDN% |
LDIFファイルをロードするユーザーの識別名。この識別名は、最低1名のメンバーが必要なグループの作成を開始するときに、必要となる場合があります。 |
移行ツールでは、この識別名が認証情報の一部としてコマンドラインで指定されることを前提にしています。 |
A.4.2 移行されたエントリのリコンシリエーション・モード
別のアプリケーションからOracle Internet Directoryにエントリを移行すると、競合が発生する可能性があります。
別のアプリケーションから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