다음을 통해 공유


글로벌 카탈로그에 바인딩

글로벌 카탈로그는 포리스트의 모든 도메인에 대한 디렉터리 데이터를 포함하는 네임스페이스입니다. 전역 카탈로그에는 모든 도메인 디렉터리의 부분 복제본(replica) 포함됩니다. 엔터프라이즈 포리스트의 모든 개체에 대한 항목을 포함하지만 각 개체의 모든 속성을 포함하지는 않습니다. 대신 전역 카탈로그에 포함하기 위해 지정된 속성만 포함합니다.

글로벌 카탈로그는 엔터프라이즈 전체의 특정 서버에 저장됩니다. 도메인 컨트롤러만 글로벌 카탈로그 서버로 사용할 수 있습니다. 관리자는 지정된 도메인 컨트롤러가 Active Directory 사이트 및 서비스 관리자를 사용하여 글로벌 카탈로그를 보유하는지 여부를 나타냅니다.

ADSI를 사용하여 글로벌 카탈로그에 바인딩하려면 "GC:" 모니커를 사용합니다.

포리스트에서 검색을 수행하기 위해 글로벌 카탈로그에 바인딩하는 방법에는 두 가지가 있습니다.

  • 엔터프라이즈 루트 개체에 바인딩하여 포리스트의 모든 도메인을 검색합니다.
  • 특정 개체에 바인딩하여 해당 개체와 해당 자식을 검색합니다. 예를 들어 포리스트의 도메인 트리에 두 개의 도메인이 있는 도메인에 바인딩하는 경우 이러한 세 도메인에서 검색할 수 있습니다. 바인딩할 개체의 고유 이름은 "LDAP:" 네임스페이스에 바인딩하는 데 사용되는 고유 이름과 정확히 동일합니다. "LDAP:"는 단일 도메인의 전체 복제본(replica) "GC:"는 포리스트에 있는 모든 도메인의 부분 복제본(replica).

"LDAP:" 모니커와 마찬가지로 서버리스 바인딩을 사용하거나 특정 글로벌 카탈로그 서버에 바인딩할 수 있습니다. 현재 포리스트에서 검색하는 경우 서버리스 바인딩을 사용합니다. 그러나 다른 포리스트에서 검색하는 경우 다음 예제와 같이 바인딩할 도메인 이름 또는 글로벌 카탈로그 서버를 지정합니다.

도메인 이름을 사용하여 바인딩:

GC://fabrikam.com

서버 이름을 사용하여 바인딩:

GC://servername

전역 카탈로그 내의 특정 개체에 바인딩할 수도 있습니다. fabrikam 도메인의 판매 개체에 바인딩하려면 다음 형식을 사용합니다.

GC://fabrikam.com/DC=sales,DC=fabrikam,DC=com

또는 서버의 판매 개체에 바인딩하려면 다음 형식을 사용합니다.

GC://servername.fabrikam.com/DC=sales,DC=fabrikam,DC=com

전체 포리스트를 검색하려면

  1. 전역 카탈로그 네임스페이스의 루트에 바인딩합니다.
  2. 글로벌 카탈로그 컨테이너를 열거합니다. 글로벌 카탈로그 컨테이너에는 전체 포리스트를 검색하는 데 사용할 수 있는 단일 개체가 포함되어 있습니다.
  3. 컨테이너의 개체를 사용하여 검색을 수행합니다. C/C++에서 QueryInterface 를 호출하여 IDirectorySearch 인터페이스를 사용하여 검색을 수행할 수 있도록 개체에 대한 IDirectorySearch 포인터를 가져옵니다. Visual Basic에서 ADO 쿼리의 열거형에서 반환된 개체를 사용합니다.

사이트에서 글로벌 카탈로그 서버를 열거하려면 다음 필터 문자열을 사용하여 "configurationNamingContext>의 cn=<yoursite,cn>=sites,DN<"의 LDAP 하위 트리 검색을 수행합니다.

(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))

이 필터는 LDAP_MATCHING_RULE_BIT_AND 일치 규칙 연산자(1.2.840.113556.1.4.803)를 사용하여 options 특성의 비트 마스크에 하위 비트가 설정된 nTDSDSA 개체를 찾습니다. Ntdsapi.h에 정의된 NTDSDSA_OPT_IS_GC 상수에 해당하는 하위 비트는 글로벌 카탈로그 서버의 nTDSDSA 개체를 식별합니다. 일치 규칙에 대한 자세한 내용은 검색 필터 구문을 참조하세요.

nTDSDSA 개체의 부모는 서버 개체이고 서버 개체의 dNSHostName 속성은 글로벌 카탈로그 서버의 DNS 이름입니다.

검색 필터 문자열에서 직접 NTDSDSA_OPT_IS_GC 및 LDAP_MATCHING_RULE_BIT_AND 같은 #define 상수를 사용할 수 없습니다. 그러나 이러한 상수를 swprintf_s 같은 함수의 인수로 사용하여 상수 값을 필터 문자열에 삽입할 수 있습니다.

전역 카탈로그는 전체 포리스트 트리 구조를 나타내지 않습니다. 예를 들어 다음 코드 예제에서는 포리스트의 모든 도메인과 각 도메인의 모든 자식 개체를 열거할 수 있습니다. 실제로 포리스트의 모든 도메인을 열거하지만 열거된 도메인 개체에는 자식이 포함되지 않습니다. 이는 글로벌 카탈로그의 제한 사항입니다.

Dim oGC As IADs
Dim oDomain As IADs
Dim oChild As IADs

Set oGC = GetObject("GC:")
For Each oDomain In oGC
    ' Print the name of the domain.
    Debug.Print oDomain.Name
    
    ' Enumerate the child objects of the domain.
    For Each oChild In oDomain
        Debug.Print oChild.Name
    Next
Next

이 문제를 해결하려면 각 도메인 개체에 바인딩한 다음 각 도메인의 자식 개체를 열거해야 합니다. 적절한 기술은 다음 코드 예제에 나와 있습니다.

Dim oGC As IADs
Dim oDomainEnum As IADs
Dim oDomainBind As IADs
Dim oChild As IADs

Set oGC = GetObject("GC:")
For Each oDomainEnum In oGC
    ' Print the name of the domain.
    Debug.Print oDomainEnum.Name
    
    ' Bind to the domain.
    Set oDomainBind = GetObject("LDAP://" + oDomainEnum.Name)
    
    ' Enumerate the child objects of the domain.
    For Each oChild In oDomainBind
        Debug.Print oChild.Name
    Next
Next

전체 포리스트를 검색하는 방법을 보여 주는 자세한 내용 및 코드 예제는 포 리스트 검색에 대한 예제 코드를 참조하세요.