3.4. 스키마 사용자 정의
특성 및 개체 클래스를 추가하여 Directory Server의 웹 콘솔을 사용하여 표준 스키마를 확장할 수 있습니다. LDIF 파일을 생성하고 수동으로 스키마 요소를 추가할 수도 있습니다.
스키마를 사용자 지정하는 동안 다음 규칙을 적용할 수 있습니다.
- 스키마를 간단하게 유지해야 합니다.
- 스키마 요소를 다시 사용해야 합니다.
- 각 오브젝트 클래스에 대해 정의된 필수 특성 수를 최소화해야 합니다.
- 동일한 목적(데이터)에 대해 둘 이상의 오브젝트 클래스 또는 속성을 정의하지 마십시오.
- 특성 또는 개체 클래스의 기존 정의를 수정하지 마십시오.
스키마를 사용자 정의할 때 표준 스키마를 삭제하거나 교체할 수 없습니다. 이렇게 하면 다른 디렉터리 또는 LDAP 클라이언트 애플리케이션과의 호환성 문제가 발생할 수 있습니다.
사용자 지정 오브젝트 클래스 및 속성은 99user.ldif
파일에 정의됩니다. 각 인스턴스는 /etc/dirsrv/slapd-instance_name/schema/
디렉터리에 자체 99user.ldif
파일을 유지 관리합니다. 사용자 지정 스키마 파일을 생성하고 서버에 스키마를 동적으로 다시 로드할 수도 있습니다.
지정된 개체 클래스가 조직에 대한 특수 정보를 저장할 수 없는 경우 스키마를 확장할 수 있지만 Directory Server와 함께 제공되는 오브젝트 클래스와 특성은 가장 일반적인 기업 요구 사항을 충족해야 합니다. 스키마를 확장하여 LDAP 지원 애플리케이션의 고유한 데이터 요구에 필요한 오브젝트 클래스 및 속성을 지원할 수도 있습니다.
3.4.1. 오브젝트 식별자 할당
각 LDAP 오브젝트
클래스 또는 속성에 대해 고유 이름 및 OID(오브젝트 ID)를 할당해야 합니다. 스키마를 정의할 때 요소에는 조직에 고유한 기본 OID가 필요합니다. 다른 계층 구조를 추가하여 특성 및 개체 클래스에 대한 새 분기를 만듭니다. 스키마에서 OID를 가져오고 할당하려면 다음 단계를 수행해야 합니다.
-
INA(
Internet Assigned Numbers Authority
) 또는 국가 조직에서 OID를 받습니다. 일부 국가에는 이미 OID가 할당되어 있습니다. - OID 레지스트리를 생성하여 OID 할당을 추적합니다. OID 레지스트리는 OID 목록 및 디렉터리 스키마에 사용되는 OID에 대한 설명입니다. 이렇게 하면 OID가 두 개 이상의 용도로 사용되지 않습니다. 그런 다음 OID 레지스트리를 스키마와 함께 게시합니다.
-
OID 트리에 분기를 생성하여 스키마 요소를 수용합니다. OID 분기 또는 디렉터리 스키마 아래에 두 개 이상의 분기를 생성합니다. 속성의 경우 OID.
1
및 개체 클래스의 경우 OID.2
를 사용합니다. 필요에 따라 새 분기를 추가하여 사용자 정의 일치 규칙 또는 제어(예: OID.'3)를 정의합니다.
추가 리소스
3.4.2. 새 오브젝트 클래스를 정의하는 전략
다음과 같은 두 가지 방법으로 새 오브젝트 클래스를 생성할 수 있습니다.
- 특성을 추가할 수 있는 각 개체 클래스 구조에 대해 하나씩 새 개체 클래스를 만듭니다.
- 디렉터리에 대해 생성된 모든 사용자 지정 특성을 지원하는 단일 오브젝트 클래스를 만듭니다. 이 오브젝트 클래스를 보조 오브젝트 클래스로 정의하여 생성할 수 있습니다.
두 가지 방법을 혼합할 수 있습니다. 예를 들어 예제 DateOfBirth ,
,example
PreferredOSexampleBuildingFloor
및 exampleVicePresident
속성을 생성하려고 합니다. 간단한 솔루션은 이러한 속성의 일부 하위 집합을 허용하는 여러 개체 클래스를 만드는 것입니다.
-
examplePerson
오브젝트 클래스는exampleDateOfBirth
및examplePreferredOS
를 허용합니다.examplePerson
의 상위는inetOrgPerson
입니다. -
exampleOrganization
오브젝트 클래스를 사용하면exampleBuildingFloor
및exampleVicePresident
. exampleOrganization의 상위는조직
오브젝트 클래스입니다.
새 오브젝트 클래스는 다음과 같이 LDAPv3 스키마 형식으로 표시됩니다.
objectclasses: ( 2.16.840.1.117370.999.1.2.3 NAME 'examplePerson' DESC 'Example Person Object Class' SUP inetorgPerson MAY (exampleDateOfBirth $ examplePreferredOS) ) objectclasses: ( 2.16.840.1.117370.999.1.2.4 NAME 'exampleOrganization' DESC 'Organization Object Class' SUP organization MAY (exampleBuildingFloor $ exampleVicePresident) )
또는 이러한 모든 특성을 허용하는 단일 오브젝트 클래스를 만들고 이를 필요한 모든 항목과 함께 사용할 수 있습니다. 단일 오브젝트 클래스는 다음과 같습니다.
objectclasses: (2.16.840.1.117370.999.1.2.5 NAME 'exampleEntry' DESC 'Standard Entry Object Class' SUP top AUXILIARY MAY (exampleDateOfBirth $ examplePreferredOS $ exampleBuildingFloor $ exampleVicePresident) )
새로운 exampleEntry
오브젝트 클래스는 A Cryostat ILIARY
로 표시됩니다. 즉, 구조적인 오브젝트 클래스에 관계없이 모든 항목에 사용할 수 있습니다.
조직 환경에 따라 새 오브젝트 클래스를 구성할 수 있습니다. 새 개체 클래스의 구현을 결정할 때는 다음을 고려하십시오.
- 스키마에 두 개 이상의 개체 클래스가 추가되는 경우 단일 개체 클래스를 사용해야 합니다.
- 여러 오브젝트 클래스에는 데이터 설계가 필요합니다. 데이터 설계는 모든 데이터가 유용하거나 번거로울 수 있는 오브젝트 클래스 구조에 중점을 둡니다.
-
데이터를 사람 및 자산 항목과 같은 둘 이상의 오브젝트 클래스에 적용할 수 있는 경우 단일 개체 클래스를 사용하여 데이터를 사용할 수 있습니다. 예를 들어 사용자와 그룹 항목 모두에 사용자 정의
preferredOS
특성을 설정할 수 있습니다. 단일 오브젝트 클래스는 두 유형의 항목에 대해 이 속성을 허용할 수 있습니다. -
새 개체 클래스에 대한 필수 특성을 피해야 합니다. 새 개체 클래스의 속성을
허용하는
대신require
를 지정하면 스키마를 유연하게 만들 수 있습니다. 새 개체 클래스를 정의한 후 허용 및 필요한 특성과 특성을 상속하는 오브젝트 클래스를 결정합니다.
3.4.3. 새 특성을 정의하는 전략
애플리케이션 호환성과 장기 유지 관리 모두에 표준 특성을 사용해야 합니다. 기본 디렉터리 스키마에 이미 존재하는 특성을 검색하고 새 개체 클래스와 함께 사용하거나 Directory Server 스키마 가이드를 확인해야 합니다. 그러나 표준 스키마에 필요한 모든 정보가 포함되어 있지 않은 경우 새 특성과 새 개체 클래스를 추가합니다.
예를 들어 사람 항목에는 기본적으로 사람, organizationalPerson
또는 inetOrgPerson
개체 클래스보다 많은 속성이 필요할 수 있습니다. 생년월일을 저장하기 위한 표준 Directory Server 스키마 내에는 특성이 없습니다. 새 특성을 생성하고 설정할 수 있습니다. dateOfBirth
는 새 보조 개체 클래스 내에서 허용되는 속성인 examplePerson
:
attributetypes: ( dateofbirth-oid NAME 'dateofbirth' DESC 'For employee birthdays' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'Example defined') objectclasses: ( 2.16.840.1.117370.999.1.2.3 NAME 'examplePerson' DESC 'Example Person Object Class' SUP inetorgPerson MAY (exampleDateOfBirth $ cn) X-ORIGIN 'Example defined')
표준 스키마 요소에 사용자 지정 속성을 추가하거나 삭제할 수 없습니다. 디렉터리에 사용자 지정 특성이 필요한 경우 사용자 지정 개체 클래스를 추가하여 포함합니다.
3.4.4. 스키마 요소 삭제
Directory Server에 기본적으로 포함된 스키마 요소는 삭제할 수 없습니다. 사용되지 않는 스키마 요소는 운영 또는 관리 오버헤드를 나타내지 않습니다. 표준 LDAP 스키마의 일부를 삭제하면 나중에 Directory Server 및 기타 디렉터리 지원 애플리케이션의 호환성 문제가 발생할 수 있습니다.
그러나 사용되지 않는 사용자 지정 스키마 요소를 삭제할 수 있습니다. 스키마에서 오브젝트 클래스 정의를 제거하기 전에 오브젝트 클래스를 사용하여 각 항목을 수정합니다. 먼저 정의를 제거하면 오브젝트 클래스를 사용하는 항목이 나중에 수정되지 않을 수 있습니다. 알 수 없는 개체 클래스 값이 항목에서 제거되지 않으면 스키마가 수정된 항목도 실패합니다.
3.4.5. 사용자 정의 스키마 파일 생성
Directory Server에 대한 사용자 지정 스키마 파일을 생성하여 Directory Server와 함께 제공된 99user.ldif
파일 외에도 사용할 수 있습니다. 이러한 스키마 파일에는 조직과 관련된 새로운 사용자 지정 속성 및 개체 클래스가 있습니다. 새 스키마 파일은 스키마 디렉터리 /etc/dirsrv/slapd-instance_name/schema/
에 있습니다. 모든 표준 특성 및 개체 클래스는 사용자 지정 스키마 요소가 로드된 후에만 로드됩니다.
사용자 지정 스키마 파일은 99user.ldif
보다 숫자 또는 알파벳으로 높을 수 없습니다.
사용자 지정 스키마 파일을 만든 후 다음과 같은 방식으로 모든 서버에 스키마 변경 사항을 배포할 수 있습니다.
-
이러한 사용자 지정 스키마 파일을 인스턴스의 스키마 디렉터리
/etc/dirsrv/slapd-instance/schema
에 수동으로 복사하고 스키마를 로드하거나, 서버를 다시 시작하거나,schema-reload.pl
스크립트를 실행하여 동적으로 스키마를 다시 로드할 수 있습니다. -
웹 콘솔과 같은 LDAP 클라이언트를 사용하거나
ldapmodify
명령을 사용하여 서버의 스키마를 수정할 수 있습니다. -
복제를 사용하면 복제된 모든 스키마 요소가 소비자 서버
99user.ldif
파일에 복사됩니다.90example_schema.ldif
와 같은 사용자 지정 스키마 파일에 스키마를 유지하려면 파일을 소비자 서버로 수동으로 복사해야 합니다. 복제는 스키마 파일을 복사하지 않습니다.
이러한 사용자 지정 스키마 파일을 모든 서버에 복사하지 않으면 공급자 서버의 스키마를 변경하는 경우에만 스키마 정보가 소비자 서버에 복제됩니다. 스키마 정의가 아직 없는 소비자 서버에 복제되면 99user.ldif
파일에 저장됩니다.
디렉터리는 스키마 정의가 저장되는 위치를 추적하지 않습니다. 스키마가 공급자 서버에서만 유지되는 경우 소비자의 99user.ldif
파일에 스키마 요소를 저장할 수 있습니다.
3.4.6. 사용자 정의 스키마 모범 사례
다음 제안 사항은 호환 가능하고 관리하기 쉬운 사용자 정의 스키마를 정의하는 데 도움이 됩니다.
스키마 파일 이름 지정
사용자 지정 스키마 파일의 이름을 99user.ldif
보다 숫자 및 알파벳순으로 낮게 지정합니다. 99user.ldif 파일에
는 'user defined'의 X-ORIGIN
값이 있는 속성이 포함되어 있습니다. Directory Server는 모든 '사용자 정의' 스키마 요소를 가장 높은 이름이 지정된 파일에 쓰고 숫자 및 알파벳순으로 작성합니다. 스키마 파일 이름이 99zzz.ldif
이고 스키마가 업데이트되면 'user defined'의 X-ORIGIN
값이 있는 모든 속성이 99zzz.ldif
파일에 기록됩니다. 결과적으로 중복 정보가 포함된 LDIF 파일 두 개 모두 삭제되고 99zzz.ldif 파일
의 일부 정보는 삭제될 수 있습니다.
사용자 지정 스키마 파일 이름을 지정할 때 다음 이름 지정 형식을 사용합니다 .yourName.ldif
.
'user defined'를 원본으로 사용
LDAP를 통해 스키마를 추가할 때 '사용자 정의' 가
디렉터리 서버에서 내부적으로 사용되므로 사용자 지정 스키마 파일의 X-ORIGIN
필드에 'user defined'를 사용하지 마십시오.
사용자 지정 스키마 요소가 수동으로 99user.ldif
에 직접 추가되는 경우 X-ORIGIN
값으로 'user defined'를 사용합니다. 다른 X-ORIGIN
값이 설정된 경우 서버는 간단히 이를 덮어쓸 수 있습니다.
'사용자 정의' 값의 X-ORIGIN
을 사용하면 Directory Server에서 99user.ldif
파일에서 스키마 정의를 제거할 수 없습니다.
예를 들면 다음과 같습니다.
attributetypes: ( exampleContact-oid NAME 'exampleContact' DESC 'Example Corporate contact' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'Example defined')
Directory Server가 스키마 항목을 로드하면 다음과 같이 표시됩니다.
attributetypes: ( exampleContact-oid NAME 'exampleContact' DESC 'Example Corporate contact' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN ('Example defined' 'user defined') )
오브젝트 클래스 이전의 속성 정의
새 스키마 요소를 추가하면 개체 클래스에서 사용하기 전에 모든 특성을 정의합니다. 특성 및 개체 클래스는 동일한 스키마 파일에 정의할 수 있습니다.
단일 파일에서 스키마 정의
가장 최근에 생성된 스키마를 로드할 때 서버가 이전 정의를 덮어쓰지 않도록 각 사용자 지정 특성 또는 개체 클래스를 스키마 파일에 정의합니다. 서버는 먼저 스키마를 숫자순으로 로드한 다음 알파벳순으로 로드합니다. 중복 파일에 스키마를 사용하지 않도록 하는 방법을 결정합니다.
- 각 스키마 파일에 포함된 스키마 요소에 주의하십시오.
-
스키마 파일의 이름 지정 및 업데이트할 때는 주의하십시오. LDAP 도구를 통해 스키마 요소를 편집하면 변경 사항이 자동으로 마지막 파일에 알파벳순으로 작성됩니다. 대부분의 스키마 변경 사항은 기본
99user.ldif
파일에 기록되며60example.ldif
와 같은 사용자 지정 스키마 파일에는 기록되지 않습니다.99user.ldif
파일의 스키마 요소는 다른 스키마 파일의 중복 요소를 재정의합니다. -
웹 콘솔을 사용하여 스키마를 관리하는 경우
99user.ldif
파일에 모든 스키마 정의를 추가합니다.