将对象类定义导入Active Directory(AD LDS)

时间:2014-06-20 10:46:47

标签: active-directory ldif opends

我无法将对象类定义从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),但是它不应该更像myAttribute1 AND myAttribute2 AND myAttribute3吗?

做什么用?

1 个答案:

答案 0 :(得分:2)

这里是一个带有类创建的LDIF的例子。你应该听从我的建议。首先使用Microsoft Mananagement Console创建它,然后使用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-Directory中rDNAttID是用于创建相对可分辨名称的属性的名称。从理论的角度来看,你可以选择你想要的那个。从实际角度来看,我从不使用CN以外的任何其他内容。


编辑:

创建属性后,请重新加载Schema,以便让它们可用于创建类。这是换向器:

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

编辑:

由于您的DN为cn=myNewClass,cn=Schema,cn=Configuration,dc=X,您必须将CN添加到属性dn:cn:myNewClass(因此应自动添加)。


编辑: 根据{{​​3}}:

就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数据模型中,子级父级关系在父属性中表示,并且DN是派生的。 Active Directory不会通过LDAP公开模型的父属性。