DirSync 컨트롤을 사용하여 변경 내용 폴링
Active Directory 디렉터리 동기화(DirSync) 컨트롤은 애플리케이션이 이전 상태 이후 변경된 개체에 대해 디렉터리 파티션을 검색할 수 있도록 하는 LDAP 서버 확장입니다.
IDirectorySearch를 사용할 때 ADS_SEARCHPREF_DIRSYNC 검색 기본 설정을 지정하여 ADSI를 통해 DirSync 컨트롤을 사용합니다. 자세한 내용과 코드 예제는 예제 코드 사용 ADS_SEARCHPREF_DIRSYNC 참조하세요. LDAP API를 사용하여 DirSync 검색을 수행할 수도 있습니다. 다음은 ADSI 구현에 대해 설명하며, 이 항목의 끝에 설명된 경우를 제외하고 대부분 LDAP를 직접 사용하는 데도 적용됩니다.
DirSync 검색을 수행할 때 이전 DirSync 검색 시 디렉터리 상태를 식별하는 공급자별 데이터 요소(쿠키)를 전달합니다. 첫 번째 검색에서는 null 쿠키를 전달하고 검색은 필터와 일치하는 모든 개체를 반환합니다. 또한 검색은 유효한 쿠키를 반환합니다. Active Directory 서버와 동기화하는 동일한 스토리지에 쿠키를 저장합니다. 후속 검색에서 스토리지에서 쿠키를 가져와서 검색 요청과 함께 전달합니다. 이제 검색 결과에는 쿠키로 식별된 이전 상태 이후 변경된 개체 및 특성만 포함됩니다. 또한 검색은 다음 검색을 위해 저장할 새 쿠키를 반환합니다.
다음 표에서는 클라이언트 검색 요청이 지정할 수 있는 검색 매개 변수를 나열합니다.
매개 변수 | 설명 |
---|---|
검색 기준 | DirSync 검색의 기반은 도메인 파티션, 구성 파티션 또는 스키마 파티션일 수 있는 디렉터리 파티션의 루트여야 합니다. |
Scope | DirSync 검색의 scope 파티션의 전체 하위 트리인 ADS_SCOPE_SUBTREE 합니다. 도메인 파티션 검색의 경우 하위 트리에는 구성 및 스키마 파티션의 헤드가 포함되지만 콘텐츠는 포함되지 않습니다. 더 작은 scope 변경 내용을 폴링하려면 DirSync 대신 USNChanged 기술을 사용합니다. |
필터 | 유효한 검색 필터를 지정할 수 있습니다. null 쿠키가 있는 초기 검색의 경우 결과에는 필터와 일치하는 모든 개체가 포함됩니다. 유효한 쿠키가 있는 후속 검색의 경우 검색 결과에는 필터와 일치하고 쿠키로 표시된 상태 이후 변경된 개체에 대한 데이터만 포함됩니다. 검색 필터에 대한 자세한 내용은 쿼리 필터 만들기를 참조하세요. |
특성 | 변경이 발생할 때 반환할 특성 목록을 지정할 수 있습니다. 각 개체에 대해 초기 결과에는 개체에 설정된 요청된 모든 특성이 포함됩니다. 후속 검색 결과에는 변경된 지정된 특성만 포함됩니다. 변경되지 않은 특성은 검색 결과에 포함되지 않습니다. ADSI 구현에서 검색 결과에는 항상 각 개체의 objectGUID 및 instanceType 이 포함됩니다. 또한 지정된 특성 목록은 추가 필터 역할을 합니다. 초기 검색 결과에는 지정된 특성 집합 중 하나 이상이 있는 개체만 포함됩니다. 후속 검색에는 하나 이상의 특성이 변경된 개체(값이 추가되거나 삭제됨)만 포함됩니다. |
또한 다음 사항을 알고 있어야 합니다.
증분 검색의 경우 이전 검색에서 사용된 동일한 DC(도메인 컨트롤러) 즉, 쿠키를 생성한 DC에 바인딩하는 것이 가장 좋습니다. 동일한 DC를 사용할 수 없는 경우 가 올 때까지 기다리거나 새 DC에 바인딩하고 전체 동기화를 수행합니다. 쿠키를 사용하여 DC의 DNS 이름을 보조 스토리지에 저장합니다.
한 DC에서 생성된 쿠키를 동일한 디렉터리 파티션의 복제본(replica) 호스트하는 다른 DC에 전달할 수 있습니다. 클라이언트가 다른 DC의 한 DC에서 쿠키를 사용하여 변경 내용을 놓칠 가능성은 없습니다. 그러나 새 DC의 검색 결과에 이전 DC의 보고된 변경 내용이 포함될 수 있습니다. 경우에 따라 새 DC는 전체 동기화와 마찬가지로 모든 개체와 특성을 반환할 수 있습니다. 클라이언트는 지정된 DirSync 호출에 대해 보고된 검색 결과와 데이터베이스를 일치시켜야 합니다. 즉, 모든 증분 결과를 최신 상태인 것처럼 처리해야 합니다. 반복된 증분 동기화가 일관성에 따라 수렴되기 때문에 이전에 변경 사항을 확인했는지 또는 이전 상태로 돌아가는지 여부는 중요하지 않습니다.
다른 DC가 원래 DC에서 반환된 쿠키를 거부할 수도 있습니다. 검색은 서버에서 "0000203D: LdapErr: DSID-xxxxxxxx, 주석: 오류 처리 제어, 데이터 0"과 같은 LDAP 오류를 생성하며 클라이언트 애플리케이션은 "System.DirectoryServices.Protocols.DirectoryOperationException: 프로토콜 오류가 발생했습니다."와 같은 오류를 생성할 수 있습니다. 예를 들어 쿠키가 이전이고 다른 버전의 Windows를 실행하는 LDAP 서버에서 처리할 때 쿠키의 내부 콘텐츠가 다를 것으로 예상되는 경우 이러한 문제가 발생할 수 있습니다. 쿠키는 불투명한 구조이며 모든 Windows OS 버전 간에 구조적으로 일관되지는 않습니다. 이 오류가 발생하면 클라이언트 애플리케이션에서 이 사례를 처리하고 전체 동기화를 사용하여 다시 시도해야 합니다.
개체의 이름을 바꾸거나 이동하면 자식 개체의 고유 이름이 변경되었더라도 해당 자식 개체(있는 경우)가 검색 결과에 포함되지 않습니다. 마찬가지로 개체 보안 설명자에서 상속 가능한 ACE를 수정하면 자식 개체의 보안 설명자가 변경되었더라도 개체의 자식 개체가 검색 결과에 포함되지 않습니다.
objectGUID 특성을 사용하여 추적된 개체를 식별합니다. 각 개체의 objectGUID 는 개체가 포리스트 내에서 이동되는 위치에 관계없이 변경되지 않은 상태로 유지됩니다.
DirSync 검색의 검색 결과는 검색 시 디렉터리 파티션의 복제본(replica) 개체의 상태를 나타냅니다. 즉, 다른 DC에서 변경한 내용은 대상 DC에 복제되지 않은 경우 포함되지 않습니다. 또한 이전 DirSync 검색 이후 개체의 특성이 여러 번 변경되었을 수 있지만 검색은 변경 시퀀스가 아닌 최종 상태만 표시합니다.
ADSI 구현에서 애플리케이션은 쿠키를 불투명으로 처리해야 하며 내부 organization 또는 값에 대해 어떠한 가정도 하지 않아야 합니다.
클라이언트는 동기화된 개체 데이터를 포함하는 동일한 스토리지에 DC의 쿠키, 쿠키 길이 및 DNS 이름을 저장합니다. 이렇게 하면 스토리지가 백업에서 복원된 경우 쿠키 및 기타 매개 변수가 개체 데이터와 동기화된 상태로 유지됩니다.
DirSync 컨트롤에 대해 생성된 parentGUID 특성을 검색하려면 이름 특성도 요청해야 합니다.
DirSync 컨트롤을 사용하려면 호출자에게 모니터링되는 파티션의 루트에 "디렉터리 변경 내용 가져오기" 권한이 할당되어 있어야 합니다. 기본적으로 이 권한은 도메인 컨트롤러의 관리자 및 LocalSystem 계정에 할당됩니다. 호출자에게 DS-Replication-Get-Changes 확장된 제어 액세스 권한도 있어야 합니다. 이 권한이 없는 계정으로 실행해야 하는 애플리케이션에 대한 변경 내용 추적 메커니즘을 구현하는 방법에 대한 자세한 내용은 USNChanged를 사용하여 변경 내용 폴링을 참조하세요. 권한에 대한 자세한 내용은 권한을 참조하세요.
DirSync 검색을 사용하여 삭제된 개체 검색
ADS_SEARCHPREF_DIRSYNC 검색 결과에는 지정된 검색 필터와 일치하는 삭제된 개체(삭제 표시)가 자동으로 포함됩니다. 그러나 개체가 라이브 상태일 때 일치하는 검색 필터는 삭제된 후 개체와 일치하지 않을 수 있습니다. 삭제 표시는 원래 개체에 있는 특성의 하위 집합만 유지하기 때문입니다. 예를 들어 일반적으로 사용자 개체에 대해 다음 필터를 사용합니다.
(&(objectClass=user)(objectCategory=person))
개체가 삭제되면 objectCategory 특성이 제거되므로 위의 필터가 삭제 표시 개체와 일치하지 않습니다. 반대로 objectClass 특성은 삭제 표시 개체에 유지되므로 "(objectClass=user)"의 필터가 삭제된 사용자 개체와 일치합니다.
DirSync 검색을 사용하여 지정하는 특성 목록도 필터 역할을 합니다. 검색 결과에는 이전 DirSync 검색 이후 지정된 특성 중 하나 이상이 변경된 개체만 포함됩니다. 특성 목록에 삭제 표시에 유지되는 특성이 포함되어 있지 않으면 검색 결과에 삭제 표시가 포함되지 않습니다. 이를 처리하려면 null 특성 목록을 지정하여 모든 특성을 요청합니다. 또는 모든 삭제 표시에서 TRUE로 설정된 isDeleted 특성을 요청할 수 있습니다. 삭제 표시 특성에는 attributeSchema 정의의 searchFlags 특성에 설정된 0x8 비트가 있습니다.
자세한 내용은 삭제된 개체 검색을 참조하세요.
DirSync 컨트롤의 LDAP 구현
LDAP_SERVER_DIRSYNC_OID 컨트롤과 함께 LDAP API를 사용하여 DirSync 검색을 수행할 수도 있습니다. LDAP API를 사용하는 경우 LDAP_SERVER_EXTENDED_DN_OID 및 LDAP_SERVER_SHOW_DELETED_OID 컨트롤도 지정합니다. LDAP_SERVER_EXTENDED_DN_OID 컨트롤을 사용하면 LDAP 검색이 사용자, 그룹 및 컴퓨터와 같은 보안 주체 개체에 대한 objectGUID 및 objectSID 를 포함하는 고유 이름의 확장된 형식을 반환합니다. LDAP_SERVER_SHOW_DELETED_OID 컨트롤을 사용하면 검색 결과에 삭제된 개체에 대한 데이터가 포함됩니다. 이러한 컨트롤은 ADSI 구현에 자동으로 포함됩니다.