PrimaryGroupID 특성을 사용하여 사용자에 대한 기본 그룹 찾기 방법

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

이 페이지에서

요약

이 문서에서는 사용자가 주 그룹을 찾는 동안 효율적인 방법에 대해 설명합니다.

추가 정보

배경

이 문서에서 설명하는 기술을 개발한 전에 사용자의 주 그룹은 확인하는 유일한 방법은 모든 도메인의 그룹 개체의 요청하고 일치하는 사용자가 PrimaryGroupID PrimaryGroupToken 가진 그룹을 검색하려면 반환된 레코드 집합을 탐색할 Active Directory에 대해 경량 디렉터리 액세스 프로토콜 (LDAP) 언어를 ADO (ActiveX 데이터 개체) 쿼리를 수행하는 것이었습니다. 이 쿼리는 많은 시간이 소요될, 지정된 도메인의 그룹 수에 따라 수 있습니다.

그룹 개체의 PrimaryGroupToken 생성된 특성입니다. 즉, 특성을 Active Directory에 저장된 있지만 클라이언트 컴퓨터에서 Active Directory 서비스 인터페이스 (ADSI) 공급자에 의해 생성됩니다. 특성이 생성되기 때문에 LDAP 쿼리의 검색 조건에 사용할 수 없습니다.

다음을 고려하여 primaryGroup에 대한 보안 식별자 (SID) 빌드할 수 있습니다.
  • 그룹/사용자 SID를 도메인의 상대 식별자 (RID) 의 그룹 사용자 RID 더하기 구성됩니다. 이 사용자 "efg" 및 도메인의 RID에 대한 이 사용자의 SID를 S-1-111-222-333-efg, 해당 RID 들어 S-1-111-222-333 기호입니다.
  • 사용자/그룹 개체의 PrimaryGroupID 특성은 주 그룹 RID를 보유합니다.
  • 사용자의 주 그룹은 사용자 주 도메인에 있는 그룹에 있어야 합니다.
  • 기본 그룹에 대한 SID primaryGroupID 특성이 있는 사용자 개체의 도메인 RID 연결하여 빌드할 수 있습니다. 예를 들어, 도메인의 RID S-1-111-222-333 수 있으며 해당 primarygroupID 값이 abc 수 있습니다. 그런 다음 주 그룹 SID S-1-111-222-333-abc 수 있습니다.
이 문서에서 제공하는 예제 코드를 사용자의 주 그룹 SID는 해당 SID 사용자의 RID 제거하고 다음 primarygroupID (주 그룹 RID) 바꾸어 빌드하는 방법을 보여 줍니다. 코드가 ADsSecurity.dll 파일에 구현된 IADsSID 개체 이용할 수 있습니다. ADsSecurity.dll 파일을 ADSI) Active Directory 서비스 인터페이스 (소프트웨어 개발 키트 (SDK) 2.5 일부입니다. Active Directory 서비스 인터페이스 SDK 2.5 다운로드하려면 다음 Microsoft 웹 사이트를 방문하십시오.
http://technet.microsoft.com/en-us/library/cc749949.aspx
원시 SID는 ConvertSidToStringSid API를 사용하여 해당 보안 설명자 정의 언어 (SDDL) 형식으로 변환하기 위한 스크립트 가능한 메서드를 IADsSID 인터페이스를 제공합니다. 이 API는 Windows 2000 및 Windows Server 2003에서 사용할 수 있습니다.

Windows NT 4.0 기반 시스템에서 사용할 수 있도록 이 메서드 사용하려면 몇 가지 유형의 COM 래퍼 DLL 사용을 통해 해당 문자열 대응 원시 SID는 변환해야 합니다. 다음 Microsoft 기술 자료 문서에서 Widows NT 4.0의 경우 SID SDDL 형식의 빌드 방법의 예제가 제공됩니다.

286182Visual Basic 원시 SID를 문자열로 SID 변환 방법

사용자 주 그룹 SID 작성 단계

  1. 사용자 개체에 바인딩하십시오.
  2. 사용자 개체의 ObjectSID 속성을 검색하십시오.
  3. 이진 양식에 사용자 SID를 변환할 IADsSID 개체 SDDL 양식을 사용합니다.
  4. 사용자의 RID SID SDDL 양식에서 제거할.
  5. 사용자의 PrimaryGroupID 속성을 검색하고 부호 없는 긴 문자열로 변환하십시오.
  6. 수정된 사용자 SID가 있는 PrimaryGroupID 문자열 표현을 추가하십시오.
  7. IADsSID를 해당 Windows NT 또는 LDAP ADsPath SID SDDL 형식의 변환할 수 있습니다.
  8. 원하는 기본 그룹에 대한 정보를 검색할 수 있는 ADsPath 바인딩하십시오.

Visual Basic 스크립트가 주어진된 ADsPath에 대한 주 그룹 찾기

'
' The following VBS code illustrates how to determine the primary group
' given an ADsPath as a single argument. The script determines if the
' string passed is a WinNT or LDAP path and then uses the appropriate
' method for retrieving the Primary Group path.
'
' ADsSecurity Constants
'
const ADS_SID_RAW         = 0
const ADS_SID_HEXSTRING	  = 1
const ADS_SID_SAM         = 2
const ADS_SID_UPN         = 3
const ADS_SID_SDDL        = 4
const ADS_SID_WINNT_PATH  = 5
const ADS_SID_ACTIVE_DIRECTORY_PATH = 6
const ADS_SID_SID_BINDING = 7
'-------------------------------------------------
' Function StrRID returns and unsigned long of
' the given RID value
' 
' If the most significant bit is set in a VB Long
' then VB will interpret the value as a negative number
' and CStr will convert the unsigned long into a string with a leading
' "-" sign.
'
' This function checks to see if the most significant bit
' is set, then tricks the CStr function into outputting
' and unsigned long value by using a double float value
' to store the RID value, then uses the CStr function to get the
' string version.
'
function StrRID( inVal )
  dim dLocal
  if( (inVal and &H80000000) <> 0 ) then
    dLocal = CDbl((inval and &H7FFFFFFF))
    dLocal = dLocal + 2^31
    StrRID = cstr(dLocal)
  else
    StrRID = Cstr(inVal)
  end if
end function
'=================================================
' Main Script
'
' Assumes that the first argument is a WinNT or
' LDAP user path
'
set args = WScript.Arguments
WScript.Echo "Start: "& Now
set ADsSid = CreateObject("ADsSID")
'
' Determine if we are using the LDAP or WinNT providers
'
userAdsPath = args(0)
if( InStr(userAdsPath,"LDAP") <> 0 ) then
  '
  ' LDAP ADS Path, need to work with the an Active Directory Path
  '
  ADS_SID_Constant = ADS_SID_ACTIVE_DIRECTORY_PATH
else
  '
  ' WinNT Path, working with the WinNT provider
  '
  ADS_SID_Constant = ADS_SID_WINNT_PATH
end if
'  
' Initialize the IADsSID object and retrieve
' the SDDL form of the SID
'
ADsSID.SetAs ADS_SID_Constant, CStr(userADsPath)
DomainSID = ADsSID.GetAs(ADS_SID_SDDL)
'
' We have the SDDL form of the user's SID.
' Remove the user's RID ( the last sub authority)
' up to the "-"
'
DomainSID = mid(DomainSID,1,(InStrREV(DomainSID,"-")))
'
' Bind to the user object to retrieve the PrimaryGroupID.
' Build the SID of the Primary group
' from the domainSID and the Primary Group RID in
' the PrimaryGroupID.
'
set obj = GetObject(userADsPath)
lngGroupID = obj.Get("primaryGroupID")
strGroupRID = StrRID( lngGroupID )
DomainSID = DomainSID & strGroupRID
'
' Use ADsSID to retrieve a WinNT path or 
' a SID Bind string to locate the LDAP path
'
ADsSID.SetAs ADS_SID_SDDL, CStr(DomainSID)
if( ADS_SID_Constant = ADS_SID_ACTIVE_DIRECTORY_PATH ) then
   '
   ' With the LDAP provider, build a SID bind string and
   ' retrieve the Group object via this bind string
   '
   SIDBindStr = ADsSID.GetAs(ADS_SID_HEXSTRING)
   SIDBindStr = "LDAP://<SID=" & SIDBindStr & ">"
   set oGrp = GetObject(SIDBindStr)
   strPrimaryGroupADsPath = oGrp.Get("DistinguishedName")
   set oGrp = Nothing
else
   '
   ' Its a WinNT path, retrieve the ADsPath for the WinNT object
   '
   strPrimaryGroupADsPath = ADsSID.GetAs( ADS_SID_Constant )
end if
WScript.Echo "Primary group ADS Path for user : " & userADsPath
WScript.Echo "Is: " & strPrimaryGroupADsPath
WScript.Echo "Finished: " & Now
				

속성

기술 자료: 297951 - 마지막 검토: 2007년 1월 15일 월요일 - 수정: 6.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Active Directory Service Interfaces 2.5
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 6.0 Enterprise Edition 서비스 팩 3
  • Microsoft Visual Basic 6.0 Enterprise Edition 서비스 팩 4
  • Microsoft Visual Basic 6.0 Enterprise Edition 서비스 팩 5
  • Microsoft Active Directory Client Extension?을(를) 다음과 함께 사용했을 때
    • Microsoft Windows NT 4.0
키워드:?
kbmt kbdswadsi2003swept kb32bitonly kbhowto KB297951 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