この付録では、Oracle Internet Directoryコマンドライン・ツールで使用できるLDAP Data Interchange Format(LDIF)ファイルを作成するための一般的な情報を提供します。LDIFファイルは、Oracle Internet DirectoryなどのLDAPディレクトリ・サーバー間でデータをやり取りするために使用できる特別な形式のテキスト・ファイルです。
この付録の内容は次のとおりです。
LDIF形式は、Internet Engineering Task Force(IETF)によってRFC 2849に定義されています。LDIF形式の規則の詳細は、IETFのWebサイト(http://www.ietf.org/rfc/rfc2849.txt
)を参照してください。この項では、LDIFファイルの形式に関する一般的な規則について説明します。
LDIFファイルの各行は、Oracle Internet Directoryコマンドライン・ツールが読み取れる正しい形式で記述されている必要があります。空白および改行を使用する場合は、注意が必要です。
LDIFファイルの各行の末尾は改行(UNIXの場合は<LF>
、Windowsの場合は<CR><LF>
)にします。LDIFには、次のタイプの行があります。
ディレクティブ行: 先頭がSPACE
または#
(シャープ)でない行。ディレクティブ行は、エントリ内のデータのタイプまたは実行する処理を指定します。
継続行: 先頭がSPACE
の行。この場合、空白の後ろの文字列は前の行の続きとなります。
空白行: エントリを区切るために使用する空白行。通常は[Enter]キーで作成します。
コメント行: #
(シャープ)で始まるコメント行。コメントは、Oracle Internet Directoryコマンドライン・ツールでは無視されます。
セパレータ行: -
(ダッシュ)文字で始まる行。操作を終了するために使用します。次の行から新しい操作ディレクティブが始まることを示します。
属性値の最後に空白が入っている場合など、LDIF入力ファイルに不必要な空白があると、LDAP操作が失敗します。
ディレクトリ・エントリの標準形式は、次のとおりです。
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
ディレクティブを使用して指定する操作は、次のとおりです。
add
: 構文および例は、「エントリを追加するLDIF形式」を参照してください。
delete
: 構文および例は、「エントリを削除するLDIF形式」を参照してください。
modify
: 構文および例は、「エントリを変更するLDIF形式」を参照してください。
modrdn
: 構文および例は、「エントリのRDNを変更するLDIF形式」を参照してください。
moddn
: 構文および例は、「エントリのDNを変更するLDIF形式」を参照してください。
bulkload、ldapaddまたは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
ディレクティブを使用してこれらの属性の値を指定する必要があります。
次の例は、従業員のファイル・エントリを示しています。最初の行には、DNが含まれています。2番目の行は、changetype: add
ディレクティブです。その後の行は属性タイプの名前で始まり、その属性に関連付けられる値が続いています。photo
属性の値は、バイナリ・ファイル参照であることを示すスラッシュ(\
)で始まっていることに注意してください。各エントリは、エントリのオブジェクト・クラスを定義する行で終わります。エントリの最後は、セパレータとして空行を使用します。
dn: cn=Suzie Smith,ou=Server Technology,o=Acme, c=US
changetype: add
cn: Suzie Smith
cn: SuzieS
sn: Smith
mail: ssmith@us.Acme.com
telephoneNumber: 69332
photo: \$ORACLE_HOME/empdir/photog/ssmith.jpg
objectClass: organizationalPerson
objectClass: person
objectClass: top
エントリを削除する場合、LDIFファイル・エントリでは、削除するエントリのDNおよびchangetype: delete
ディレクティブのみが必要です。エントリの最後は、セパレータとして空行を使用します。
dn: cn=Suzie Smith,ou=Server Technology,o=Acme, c=US changetype: delete
エントリを変更する場合、エントリの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
エントリの相対識別名(RDN)を変更するには、エントリのDNを指定し、その後にchangetype: modrdn
ディレクティブを指定する必要があります。次に、newrdn:
ディレクティブを使用して新しいRDNを指定します。古いエントリは、deleteoldrdn:
ディレクティブを使用して削除することも、残すこともできます。次に例を示します。
dn: cn=Sally Smith,ou=people,dc=example,dc=com changetype: modrdn newrdn: Sally Smith-Jones # deletes old RDN entry deleteoldrdn: 1
エントリの識別名(DN)を変更する(DITで新しいノードにエントリを移動する)には、エントリのDNを指定し、その後にchangetype: moddn
ディレクティブを指定する必要があります。次に、newsuperior:
ディレクティブを使用して新しい親DNを指定します。古いエントリは、deleteoldrdn:
ディレクティブを使用して削除することも、残すこともできます。次に例を示します。
dn: cn=Sally Smith,ou=people,dc=example,dc=com changetype: moddn newsuperior: ou=expeople,dc=example,dc=com # keeps old RDN entry deleteoldrdn: 0
属性タイプとオブジェクト・クラスをエントリで使用するには、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
この項では、Oracle Internet Directory移行ツールで使用するための正しいLDIFファイルの形式について説明します。移行ツールを使用すると、他のディレクトリまたはアプリケーションからLDIFエントリ出力を取り出し、Oracle Internet Directoryエントリで見られる属性および値を使用するためにデータを変換できます。これは、変換するデータ要素に対して置換変数を挿入して実行します。
Oracle Internet Directory移行ツールの詳細は、「ldifmigrator」を参照してください。
置換変数は、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% |
ID管理レルムのユーザー・エントリに使用するニックネーム属性。 |
レルム固有のOracleコンテキストにあるエントリ |
%s_SubscriberDN% |
ID管理レルムに対応するLDAPエントリの識別名。 |
単純なサブスクライバ名を指定すると、移行ツールは、ルートOracleコンテキストにあるエントリ |
%s_SubscriberOracleContextDN% |
レルム固有のOracleコンテキストの識別名。 |
最初にレルムの識別名が前述のように導出され、次に文字列 |
%s_RootOracleContextDN% |
ルートOracleコンテキストの識別名。 |
現在は、 |
%s_CurrentUserDN% |
LDIFファイルをロードするユーザーの識別名。この識別名は、最低1名のメンバーが必要なグループの作成を開始するときに、必要となる場合があります。 |
移行ツールでは、この識別名が認証情報の一部としてコマンドラインで指定されることを前提にしています。 |
別のアプリケーションから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