2

OpenDS から Active Directory へのオブジェクト クラス定義の移行で行き詰まりました。私はすでにいくつかの定義を正常に移行しました(そして、Java アプリケーションで AD に読み書きできます) - しかし、今は行き詰まっています。

私の OpenDS スキーマの説明には、次のようなものがあります。

objectClasses: ( 1.3.6.1.4.1.99.2
  NAME 'myNewClass'
  SUP top STRUCTURAL
  MUST ( myAttribute1 $ myAttribute2 $ myAttribute3 )
  MAY someOtherAttribute
  )

これを次のような AD スキーマ構文に変換しました。

# Class: myNewClass
dn: cn=myNewClass,cn=Schema,cn=Configuration,dc=X
changetype: add
objectClass: classSchema
governsID: 1.3.6.1.4.1.99.2
ldapDisplayName: myNewClass
adminDisplayName: myNewClass
objectClassCategory: 0
systemOnly: FALSE
# subclassOf: top
subclassOf: 2.5.6.0
# rdnAttId: myAttribute1 
rdnAttId: 1.3.6.1.4.1.99.1
# mustContain: myAttribute2 
mustContain: 1.3.6.1.4.1.99.2
# mustContain: myAttribute3 
mustContain: 1.3.6.1.4.1.99.3
# mayContain: someOtherAttribute
mayContain: 1.3.6.1.4.1.99.4
# possSuperiors: organizationalUnit
possSuperiors: 2.5.6.5
# defaultObjectCategory: myNewClass
defaultObjectCategory: cn=myNewClass,cn=Schema,cn=Configuration,dc=X

しかし、クラス myNewClass のオブジェクトを書き込もうとすると、次の例外が発生します。

javax.naming.InvalidNameException: "myAttribute1=Read+myAttribute2=Allow+myAttribute3=cn\=someResource": [LDAP: error code 34 - 0000208F: LdapErr: DSID-0C090715, comment: Error processing name, data 0, v1db1 ];

問題は rdnAttId にあると思います。これは、AD では不可欠であると思われます (OpenDS ではそうではありません)。単一の値にしか設定できません (したがって、myAttribute1 を選択しました)。

どうする?

4

1 に答える 1

2

これは、クラスを作成した LDIF の例です。あなたは私の忠告に従うべきだった。最初に Microsoft 管理コンソールで作成し、次に LDIFDE.EXE を使用してエクスポートし、LDIFDE を消去してから、他の AD にインポートできます。

dn: CN=SlxOeuvre,CN=Schema,CN=Configuration,DC=XXXX
changetype: add
objectClass: top
objectClass: classSchema
cn: SlxOeuvre
distinguishedName: CN=SlxOeuvre,CN=Schema,CN=Configuration,DC=XXXX
instanceType: 4
possSuperiors: organizationalUnit
subClassOf: top
governsID: 1.3.6.1.4.1.10558.2.2.1
mustContain: SlxTitre
mayContain: SlxChapitres
mayContain: SlxEditeur
mayContain: SlxGenre
mayContain: SlxLangue
mayContain: SlxPages
rDNAttID: cn
showInAdvancedViewOnly: TRUE
adminDisplayName: SlxOeuvre
objectClassCategory: 1
lDAPDisplayName: SlxOeuvre
name: SlxOeuvre
systemOnly: FALSE

Active-DirectoryrDNAttIDは、相対識別名の作成に使用される属性の名前です。理論的な観点から、必要なものを選択できます。実用的な観点から、私は 以外は使用しませんCN


編集:

属性を作成したら、スキーマをリロードしてクラスを作成できるように注意してください。整流子は次のとおりです。

dn:
changetype: modify
add: schemaUpdateNow
schemaUpdateNow: 1
-

編集:

あなたの DN はcn=myNewClass,cn=Schema,cn=Configuration,dc=X、CN を属性 dn:cn:myNewClassに追加する必要があります (自動的に追加されるはずです)。


編集: Microsoftのドキュメントによると:

RDN に関する限り、Active-Directory モデルと LDAP データ モデルの対応は次のとおりです。属性と値を持つオブジェクトは、属性と値を持つ LDAP エントリに対応します。このモデルと LDAP は、objectClass 属性の定義に同意します。このモデルにおける RDN の定義は、LDAP の定義のサブセットです。このモデルのすべての RDN は有効な LDAP RDN ですが、その逆ではありません。たとえば、次の複数値の RDN は有効な LDAP RDN ですが、このモデルでは有効ではありません: "cn=Peter Houston+employeeID=ABC123"。RDN の定義を考えると、このモデルでの DN の定義は LDAP の定義と同じです。LDAP データ モデルでは、子と親の関係は子と親の DN で表されますが、Active Directory データ モデルでは、親子関係はparent属性で表され、DNが導出されます。Active Directory は、LDAP を介してモデルの親属性を公開しません。

于 2014-06-20T11:11:44.310 に答える