주 그룹을 찾으려면 네이티브 ADSI 구성 요소를 사용하는 방법을

기술 자료 번역 기술 자료 번역
기술 자료: 321360 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

이 문서에서는 사용자의 주 그룹 구성원을 확인하려면 기본 Active Directory 서비스 인터페이스 (ADSI) 구성 요소를 사용하는 방법에 대해 설명합니다.

추가 정보

Active Directory의 사용자 개체에 대한 기본 그룹 저장

모든 보안 컨텍스트 개체 (예: 사용자 및 보안 그룹) Active Directory의 관련된 보안 식별자 (SID) 특성이 있습니다. SID "SID 구성 요소" 참조가 문서의 "참조" 절에 설명된 바와 같이 여러 가지 구성 요소가 있습니다. 이러한 구성 요소에 대한 SID 중 두 도메인 상대 식별자 (RID) 및 RID 특정 도메인 내의 개체에 있습니다.

사용자의 주 그룹은 사용자 개체의 PrimaryGroupID 특성에 사용자의 도메인에 있는 그룹의 RID) 로 저장됩니다. 사용자의 주 그룹은 사용자, 동일한 도메인에 존재하는 그룹 경우에만 수 있으며, 이 그룹에 사용자가 구성원인 그룹에 있어야 합니다. 또한 이 그룹 개체를 Active Directory에서 도메인 내에서 이 그룹의 RID 저장하는 PrimaryGroupToken, 라는 특성이 있습니다.

Windows NT 및 경량 디렉터리 액세스 프로토콜 (LDAP) 공급자를 프로그래머가 사용자가 구성원인 그룹에 RID PrimaryGroupID 특성 값을 설정하여 사용자의 주 그룹을 변경할 수 있습니다. 사용자 그룹의 구성원인 경우 그룹 RID 사용자의 PrimaryGroupID 설정할 수 없습니다.

주 그룹을 Windows NT 공급자가 ADSI에서 사용하는 경우 사용자의 IADsUser::Groups 컬렉션의 항목으로 포함되어 있습니다.

LDAP 공급자를 사용하여 주 그룹을 않은IADsUser::Groups 컬렉션의 항목이 포함된 또는 것입니다 아닙니다 디렉터리에서 사용자 개체 MemberOf 특성 그룹의 고유 이름 (DN) 부분을. PrimaryGroupID 그룹의 RID 사용자의 주 그룹은 LDAP 사용자 개체가 참조되는 유일한 곳입니다.

두 공급자는 사용자가 해당 사용자 개체에 대한 기본 그룹 이름 확인 메커니즘을 정의합니다. 문제가 각 공급자가 제공하는 각 그룹 개체의 다른 특성 집합을 다음과 같이 지원하는 팩트에 의해 더욱 복잡한 이루어집니다.
  • Windows NT 제공한 그룹 개체가 PrimaryGroupToken 특성을 지원하지 않으며 다른 방법으로 네이티브 ADSI 코드를 사용하여 그룹의 RID 검색할 Windows NT 공급자가 지원하지.
  • LDAP 공급자 그룹 개체의 PrimaryGroupToken 특성은 계산된 특성입니다. 이 특성은 그룹 개체의 디렉터리에 존재하지 않습니다. IADs::GetInfoEx 메서드 호출 사용하여 클라이언트에 의해 요청된 특성이 실제로 만들어집니다. Active Directory의 생성된 특성을 기준으로 LDAP 검색을 수행할 수 없습니다. 따라서 주 그룹을 결정하는 사용자 개체 PrimaryGroupID 특성에 일치하는 PrimaryGroupToken 특성을 기반으로 그룹에 대한 LDAP 공급자를 사용하여 검색할 수 없습니다. 이 또한 주 그룹을 결정하는 데 도움이 되는 외부 COM 개체에 종속되지 않습니다 순수 ADSI 솔루션을 체크 규칙.

사용자의 주 그룹을 확인하는 방법

다음과 같은 세 가지 알려진된 방법을 사용자가 주 그룹의 이름을 확인할 수 있습니다.
  • 있는 SID를 사용자의 SID 및 그룹의 RID 사용자 개체의 PrimaryGroupID 특성에 저장된 도메인 RID 구성 요소에서 Active Directory의 그룹 개체에 대한 바인딩 문자열을 빌드하십시오.

    이 Microsoft 기술 자료 문서 (이 문서의 "참조" 절에 포함된) Q297951에서 에서 설명한 방법을 사용합니다. 이 메서드는 주요 문제가 SID 바인딩 문자열을 작성할 수 프로그래머가 ADsSID 개체의 SDDL 양식에 도메인 개체의 이진 보안 설명자를 변환할 의존해야 하는 것이 있습니다. ADsSID 개체는 복사한 다음 코드를 성공적으로 실행하기 전에 클라이언트에 등록된 합니다 수 ADsSecurity.dll 파일에 의해 호스팅됩니다.
  • LDAP 쿼리를 사용하여 도메인의 모든 그룹을 검색하고 PrimaryGroupToken 특성을 반환합니다.

    이 메서드는 순수 LDAP 솔루션입니다. 그러나 이 검색 도메인에 경우에도 사용자가; 구성원이 아니므로 이 검색 레코드 집합의 통과한 같이 PrimaryGroupToken 특성 클라이언트에서 생성되기 때문에 매우 느립니다 모든 그룹 반환하기 때문에 스크립팅된 솔루션이 매우 효율적인 아닙니다. 이 방법은 특히 시간이 많이 있는 경우 도메인의 그룹 많은 수의 될 수 있습니다. LDAP 언어를 ADO 쿼리를 만드는 방법에 대한 예제를 어디엔가, 및 이 문서에서 포함되지 않은 따라서.
  • 하이브리드 솔루션을 구축하기 위해 각 공급자의 기능을 활용합니다.

    이 솔루션은 사용자의 주 그룹을 확인하려면 다른 공급자 기능을 이용할 수 있습니다. 이렇게 하려면 다음과 같이 하십시오.
    1. Windows NT 공급자를 사용하여 사용자 개체에 바인딩하십시오.

      Windows NT 사용자 개체를 사용자의 주 그룹을 포함하도록 보장되는 그룹 컬렉션을 제공합니다. 또한 사용자 개체의 PrimaryGroupID 바로 이 알고리즘은 나중에 사용하기 위해 임시 위치에 저장됩니다.
    2. IADsUser::Groups 컬렉션을 열거하십시오.
    3. 이 컬렉션의 각 그룹에 대해 ADsPath SamAccountName 속성을 추출하는 및 PrimaryGroupTokenDistinguishedName 특성 값을 반환하는 이 컬렉션에 나열된 SamAccountName 속성을 사용하여 모든 그룹에 대해 검색할 수 있는 LDAP 언어를 쿼리 문자열을 빌드하십시오.
    4. ADO ADSI 검색을 실행하고 각 그룹 PrimaryGroupTokenPrimaryGroupID 특성 값이 이전에 캐시된 비교 레코드 집합을 통해 루프.
    5. 일치하는 항목을 찾으면 중지하고 이 사용자의 주 그룹은 이 그룹에 대한 고유 이름을 표시하십시오.
    6. 일치하는 항목의 찾을 경우 검색 결과를 통해 루핑 계속하십시오.
    이 방법의 장점은 즉시 명확합니다. 모든 개체를 사용할 수 ADSI 네이티브 및 추가 구성 요소가 필요하지 않습니다. 또한 열거형 주 그룹의 않을 그룹을 포함합니다.

    그러나 다음과 같은 단점이 있습니다: IADsUser::Groups 컬렉션을 열거할 때 반환된 그룹의 구성원에게 IAD 인터페이스의 개체입니다. 어떤 이유로 열거를 수행하는 사용자가 특정 개체를 여는 데 필요한 사용 권한이 없는 경우 오류를 나타내지 않고 열거가 중지됩니다. 다음 코드에서는 앞의 알고리즘을 구현하는 방법을 보여 줍니다.
    dim oUsr 
    dim oGrp 
    
    '
    ' ToDo: Change the following variables to specific values for your domain.
    ' 
    DomainName = "myDomain"
    UserLoginName = "myUserLoginName"
    
    '
    ' Bind to the user object with the Windows NT provider.
    ' 
    set oUsr = GetObject("WinNT://" & DomainName & "/" & UserLoginName & ",user") 
    set grp = oUsr.Groups 
    GrpID = oUsr.PrimaryGroupID 
    GrpName = "" 
    
    '
    ' Building Query Filter for the search for all the groups that the user is a member of.
    '
    QueryFilter = "(|"
    for each Item in Grp 
       NT4Name = replace(Item.ADsPath,"WinNT://","") 
       tempArray = split(nt4Name,"/") 
       NT4Name = tempArray(1)
       QueryFilter = QueryFilter & "(samAccountName=" & NT4Name & ")"
    next
    QueryFilter = QueryFilter & ")"
    
    '
    ' Building LDAP dialect Query String.
    '
    QueryString = "<LDAP://" & DomainName & ">;" & QueryFilter & ";PrimaryGroupToken,distinguishedName;subtree"
    
    '
    ' Performing Query against the Active Directory for all the groups that 
    ' the user belongs to and retrieving the RID of the group object off
    ' the PrimaryGroupToken attribute on the user.
    '
    Dim oConnection, oCommand, oRecordset
    Set oConnection = CreateObject("ADODB.Connection")
    Set oCommand = CreateObject("ADODB.Command")
    
    oConnection.Provider = "ADsDSOObject"
    oConnection.Open "Active Directory Provider"
    
    Set oCommand.ActiveConnection = oConnection
    oCommand.CommandText = QueryString
    oCommand.Properties("Page Size") = 900
    
    Set oRecordset = oCommand.Execute
    
    '
    ' Looping through all the records in the search result to determine whether
    ' any of these group's PrimaryGroupToken attribute value match the 
    ' PrimaryGroupID attribute value stored on the user object.
    '
    While ((NOT oRecordset.EOF) and (Not bGroupFound))
      if (GrpID = oRecordset.Fields("PrimaryGroupToken").value) then
        GrpName = oRecordset.Fields("DistinguishedName").Value
        bGroupFound = True 
      End If
      oRecordset.moveNext
    Wend
    
    Set oRecordset = Nothing
    Set oCommand = Nothing
    Set oConnection = Nothing
    
    '
    ' Displaying Results of the search.
    ' 
    if( bGroupFound ) then 
       WScript.Echo "Primary Group for " & oUsr.AdsPath 
       WScript.Echo "Is: " & GrpName 
    else 
       WScript.Echo "Primary Group Not Found" 
    end if
    					

참조

추가 정보는 다음 문서 번호를 클릭하여 Microsoft 기술 자료에서 확인하십시오:
297951PrimaryGroupID 특성을 사용하여 사용자에 대한 기본 그룹 찾기 방법

속성

기술 자료: 321360 - 마지막 검토: 2008년 3월 3일 월요일 - 수정: 5.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows 2000 Server
  • Microsoft Active Directory Service Interfaces 2.5
  • Microsoft Active Directory Client Extension
키워드:?
kbmt kbdswadsi2003swept kbinfo KB321360 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com