GetObject 및 ADsGetObject를 사용하여 바인딩

GetObjectADsGetObject 함수는 인증 없이 디렉터리 서비스 개체에 바인딩하는 데 사용됩니다. 애플리케이션은 디렉터리 서비스 데이터에 액세스할 때 자격 증명을 제공할 필요가 없습니다. ADSI는 호출 스레드의 보안 컨텍스트를 사용합니다. 그러나 보안 인증에 실패하면 ADSI는 null 사용자 이름 및 null 암호를 사용하여 간단한 바인딩을 수행하려고 시도합니다. 단순 바인딩이 성공하면 바인딩에 대한 사용자 컨텍스트는 게스트입니다. 단순 바인딩은 일반 텍스트 인증을 사용합니다. 네트워크를 통해 사용자 이름이나 암호가 전송되지 않으므로 보안 문제가 아닙니다.

GetObject 함수는 Visual Basic과 같은 자동화를 지원하는 언어로 디렉터리 서비스 개체에 바인딩하는 데 사용됩니다. GetObject 함수에는 모니커 문자열이 필요합니다. ADSI에서 바인딩 문자열은 모니커 문자열입니다.

C 또는 C++와 같이 자동화를 직접 지원하지 않는 언어에서 ADSI는 디렉터리 서비스 개체에 바인딩할 ADsGetObject 함수를 제공합니다. 또는 MkParseDisplayNameMkParseDisplayNameEx 함수를 사용하여 GetObject와 동일한 결과를 얻을 수 있습니다.

LocalSystem 계정으로 실행되는 서비스의 경우 GetObjectADsGetObject 에서 사용하는 보안 컨텍스트는 서비스가 실행 중인 컴퓨터에 따라 달라집니다. 서비스가 도메인 컨트롤러에서 LocalSystem으로 실행되는 경우 서비스는 Active Directory에 대한 전체 시스템 수준 액세스 권한을 가집니다. 서비스가 DC에서 실행되고 있지 않으면 서비스에는 서비스가 실행 중인 컴퓨터의 컴퓨터 계정에 부여된 액세스 권한 및 권한이 있습니다. 이는 시스템 수준 액세스보다 훨씬 덜 강력합니다.

예제

다음 Visual Basic 코드 예제에서는 GetObject 함수를 사용하여 개체에 바인딩하는 방법을 보여줍니다.

Dim myUser as IADs
Set myUser = GetObject("LDAP://CN=jeffsmith,DC=fabrikam,DC=com")

다음 C++ 코드 예제에서는 ADsGetObject 함수를 사용하여 개체에 바인딩하는 방법을 보여 줍니다.

IADs *pObject;
HRESULT hr;

// Initialize COM.
CoInitialize(NULL);

hr = ADsGetObject(L"LDAP://CN=jeffsmith,DC=fabrikam,DC=com", 
        IID_IADs,
        (void**) &pObject);

if(SUCCEEDED(hr))
{
    // Use the object.

    // Release the object.
    pObject->Release()
}

// Uninitialize COM.
CoUninitialize();