Bir kullanıcının birincil grubu bulmak için PrimaryGroupID özniteliği nasıl kullanılır

Makale çevirileri Makale çevirileri
Makale numarası: 297951 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu makalede, bir kullanıcının birincil grubu bulma verimli bir yöntem açıklanır.

Daha fazla bilgi

Arka plan

Bu makalede açıklanan teknik geliştirilmiştir önce tek yolu, bir kullanıcının birincil grubu belirlemek için bir karşı tüm etki alanında <a1>Grup</a1> nesnelerinin istemek ve sonra kullanıcının PrimaryGroupID eşleşen bir PrimaryGroupToken grubuyla aramak için döndürülen kayıt kümesi gözatmak için Active Directory Basit Dizin Erişim Protokolü (LDAP) diyalekt ActiveX Data Objects (ADO) sorgulaması gerçekleştirmek için oluştu. Bu sorgu çok zaman alabilir, belirli bir etki alanındaki grup sayısı bağlı olabilir.

Bir <a0>Grup</a0> nesnesinin PrimaryGroupToken oluşturulmuş bir özniteliktir. Bunun anlamı, özniteliği Active Directory'de depolanan ancak istemci üzerinde Active Directory Hizmetleri arabirimi (ADSI) sağlayıcısı tarafından oluşturulur. Öznitelik oluşturulur, çünkü bir LDAP sorgusu arama ölçütünde kullanılamaz.

Güvenlik tanımlayıcısı (SID), aşağıdakileri dikkate alındığında için primaryGroup oluşturmak mümkündür:
  • Grup/kullanıcı SıD'SI etki alanının göreli tanımlayıcı (RID) grup/kullanıcı RID ilgili olarak oluşur. S-1-111-222-333 "efg" Bu kullanıcı için SID S-1-111-222-333-efg, bu kullanıcı için RID ise, etki alanında RID aranır.
  • Bir <a0>kullanıcı/Grup</a0> nesnesindeki PrimaryGroupID özniteliği RID birincil grubu içerir.
  • Bir kullanıcının birincil grubu, kullanıcının birincil etki alanında varolan bir grup olmalıdır.
  • SID için birincil grup, etki alanı RID kullanıcı nesnesinin primaryGroupID özniteliği ile birleştirerek oluşturulmadan. Örneğin, etki alanı RID S-1-111-222-333 olabilir ve primarygroupID değerinin abc olabilir. Birincil grup, SID, daha sonra S-1-111-222-333-abc olacaktır.
Bu makalede sağlanan örnek kod, kendi SID kullanıcının RID çıkarıp primarygroupID (birincil grup RID) ile değiştirmek için bir kullanıcının birincil grubu SID nasıl göstermektedir. Kod ADsSecurity.dll dosyasında uygulanan IADsSID nesne yararlanır. Active Directory Hizmet Arabirimleri (ADSI) Yazılım Geliştirme Seti (SDK) 2.5 parçası ADsSecurity.dll dosyasıdır. Active Directory Hizmet Arabirimleri SDK 2.5 karşıdan yüklemek için aşağıdaki Microsoft Web sitesini ziyaret edin:
http://technet.microsoft.com/en-us/library/cc749949.aspx
IADsSID arabirimi bir Ham SID, güvenlik tanımlayıcısı tanım dili (SDDL) forma ConvertSidToStringSid API kullanarak dönüştürmesi için kullanılan bir komut dosyası yöntemi sağlar. Bu API, yalnızca Windows 2000 ve Windows Server 2003'te kullanılabilir.

Kullanılabilmesi için bu yöntem, Windows NT 4.0 tabanlı bir sistemde kullanılacak, ham SID dizesi karşılığı olan COM sarmalayıcı DLL tür olarak dönüştürülmesi gerekir. SDDL biçiminde bir SID Widows NT 4. 0'da nasıl örneği aşağıdaki Microsoft Bilgi Bankası makalesinde sağlanmıştır:

286182Bir RAW SID dizesi SID dönüştürmek için Microsoft Visual Basic nasıl kullanılır

SID, bir kullanıcının birincil grubu oluşturmak için gereken adımları

  1. Kullanıcının nesneye bağlayın.
  2. Kullanıcı nesnesinin ObjectSID özelliği alın.
  3. Ikili, forma kullanıcının SID dönüştürmek için IADsSID nesnesinin SDDL formu kullanılır.
  4. SID, SDDL</a1> formundan bir kullanıcı RID kapalı kald?rmak'i tıklatın.
  5. Kullanıcının PrimaryGroupID özelliği almak ve imzasız uzun dizeye dönüştürme.
  6. PrimaryGroupID dize gösterimini değiştirilmiş kullanıcı SID ekleyin.
  7. IADsSID SID SDDL biçimi, Windows NT veya LDAP ADsPath dönüştürün.
  8. Istediğiniz birincil grubuyla ilgili tüm bilgileri almak için ADsPath bağlayabilirsiniz.

Birincil grubu için belirli bir ADsPath bulmak için Visual Basic komut dosyası

'
' 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
				

Özellikler

Makale numarası: 297951 - Last Review: 15 Ocak 2007 Pazartesi - Gözden geçirme: 6.2
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Active Directory Service Interfaces 2.5
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 3
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 4
  • Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 5
  • Microsoft Active Directory Client Extension, Ne zaman ne ile kullanilir:
    • Microsoft Windows NT 4.0
Anahtar Kelimeler: 
kbmt kbdswadsi2003swept kb32bitonly kbhowto KB297951 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:297951

Geri Bildirim Ver

 

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