2014-06-20 2 views
2

OpenDS에서 Active Directory로 개체 클래스 정의를 마이그레이션하는 중입니다. 나는 이미 일부를 정의로 성공적으로 마이그레이션했으며 (Java 응용 프로그램으로 AD에 읽고 쓸 수 있음) -하지만 이제 막혔습니다.개체 클래스 정의를 Active Directory (AD LDS)로 가져 오기

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

나는이 같은 AD 스키마 구문이 번역 : 내 된 OpenDS 스키마 설명에서

나는 이런 일이

# 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과 myAttribute2 및 myAttribute3과 같이 더는 안됩니까?

무엇을할까요?

답변

2

다음은 클래스 생성 기능이있는 LDIF의 예입니다. 내 조언을 따라야 했어. 먼저 Microsoft Mananagement Console을 사용하여 콘솔을 만든 다음 LDIFDE.EXE를 사용하여 내보내고 LDIFDE를 정리하면 다른 AD로 가져올 수 있습니다. 액티브 디렉토리 rDNAttID에서

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 

은 상대 고유 이름을 만드는 데 사용할 수있는 속성의 이름입니다. 이론적 관점에서 원하는 것을 선택할 수 있습니다. 실용적인 관점에서 나는 결코 CN 이외의 것을 아무것도 사용하지 않습니다.


편집 됨 :

는 일단 클래스를 생성하기가 가능한하기 위해 당신에게 스키마를 다시로드 할 carreful 수, 당신의 특성을 만들었습니다. 여기에 정류자는 다음과 같습니다

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

편집 : 당신의 DN으로

cn=myNewClass,cn=Schema,cn=Configuration,dc=X 당신은 속성의 DN을 TNE에 CN을 추가해야합니다 cn:myNewClass (이것은보기 자동 추가해야 thow). Microsoft documentation에 따르면 : 편집


다음과 같이

는 지금까지 RDN에 관한 한 액티브 디렉토리 모델과 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를 통해 모델의 상위 특성을 노출하지 않습니다.

+0

문제점은 다음과 같습니다. 객체 클래스 정의에 CN이 없습니다 (이 클래스의 객체는 myAttribute1 + myAttribute2 + myAttribute3에 의해서만 정의 됨). 흠 ... 아마 rDNAttID에 문제가되지 않았을까요? 내가 얻은 Java 예외를 어떻게 해석합니까? – Frizz

+0

@Frizz 자바 오류를 이해하지 못합니다. 왜 처음에는 MMC를 사용하여 클래스를 만들고 LDIFF를 내보내려고하지 않습니까? – JPBlanc

+0

MMC는 특성 또는 클래스 ("클래스 만들기 ..."및 "특성 만들기 ..."가 회색으로 표시되지 않음)를 만들지 않기 때문에 사용할 수 없습니다. 관리자로 시작했지만 여전히 회색으로 표시됩니다. – Frizz