Cara menggunakan atribut PrimaryGroupID untuk menemukan kelompok utama untuk pengguna

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 297951
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini menjelaskan metode yang efisien untuk menemukan kelompok utama pengguna.

INFORMASI LEBIH LANJUT

Latar belakang

Sebelum teknik yang dijelaskan dalam artikel ini dikembangkan, satu-satunya cara untuk menentukan pengguna kelompok utama adalah untuk melakukan permintaan objek Data ActiveX (ADO) dialek Lightweight Directory Access Protocol (LDAP) terhadap Active Directory untuk meminta semua kelompok objek dalam domain, dan kemudian menelusuri recordset kembali untuk mencari grup dengan PrimaryGroupToken yang cocok PrimaryGroupID pengguna. Query ini dapat menjadi sangat memakan waktu, tergantung pada jumlah kelompok-kelompok di domain tertentu.

PrimaryGroupToken objek grup adalah atribut yang dibangun. Ini berarti bahwa atribut tidak disimpan dalam direktori aktif tetapi ini dibangun pada klien dengan penyedia antarmuka layanan direktori aktif (ADSI). Karena atribut dibangun, itu tidak dapat digunakan pada kriteria pencarian dalam permintaan LDAP.

Mungkin untuk membangun pengenal keamanan (SID) untuk primaryGroup dengan mempertimbangkan berikut:
  • SID pengguna/kelompok terdiri dari domain yang relatif pengenal (RID) ditambah RID kelompok/pengguna. Untuk contoh jika SID untuk pengguna ini adalah S-1-111-222-333-efg, RID untuk pengguna ini adalah "efg" dan domain menghilangkan adalah S-1-111-222-333.
  • PrimaryGroupID atribut pada objek pengguna/kelompok memegang RID kelompok utama.
  • Kelompok utama pengguna harus menjadi kelompok yang ada di domain utama pengguna.
  • SID untuk kelompok utama dapat dibangun oleh concatenating domain RID dengan atribut primaryGroupID objek pengguna. Misalnya, domain RID bisa S-1-111-222-333 dan nilai primarygroupID bisa menjadi abc. SID kelompok utama kemudian akan S-1-111-222-333-abc.
Kode contoh yang tersedia di dalam artikel ini menggambarkan bagaimana membangun SID untuk kelompok utama pengguna dengan menghapus pengguna RID dari SID yang dan kemudian menggantikannya dengan primarygroupID (grup primary RID). Kode mengambil keuntungan dari objek IADsSID yang dilaksanakan dalam ADsSecurity.dll file. ADsSecurity.dll file adalah bagian dari antarmuka layanan direktori aktif (ADSI) software development kit (SDK) 2.5. Untuk men-download Active Directory Service antarmuka SDK 2.5, kunjungi Web site Microsoft berikut:
http://technet.Microsoft.com/en-us/library/cc749949.aspx
Antarmuka IADsSID menyediakan metode scriptable untuk mengubah SID mentah menjadi bentuk bahasa definisi kata kunci keamanan (SDDL) dengan menggunakan ConvertSidToStringSid API. API ini hanya tersedia di Windows 2000 dan Windows Server 2003.

Agar metode ini untuk digunakan pada sistem berbasis Windows NT 4.0, SID mentah harus diubah menjadi rekan string melalui penggunaan dari beberapa jenis COM pembungkus DLL. Sebuah contoh tentang bagaimana untuk membangun bentuk SDDL SID janda NT 4.0 disediakan di artikel Basis Pengetahuan Microsoft berikut:

286182 Cara menggunakan Microsoft Visual Basic untuk mengkonversi SID mentah menjadi String SID

Langkah-langkah untuk membangun SID untuk kelompok dasar pengguna

  1. Mengikat ke objek pengguna.
  2. Mengambil ObjectSID properti objek pengguna.
  3. Menggunakan objek IADsSID untuk mengkonversi SID pengguna dari bentuk biner ke adalah bentuk SDDL.
  4. Strip off pengguna RID dari bentuk SDDL SID.
  5. Mengambil pengguna PrimaryGroupID properti dan mengubahnya menjadi unsigned panjang string.
  6. Tambahkan representasi string PrimaryGroupID SID pengguna dimodifikasi.
  7. Menggunakan IADsSID untuk mengubah bentuk SDDL SID menjadi Windows NT atau LDAP ADsPath.
  8. Mengikat ADsPath untuk mengambil informasi apapun tentang kelompok utama yang Anda inginkan.

Visual Basic Script untuk menemukan kelompok dasar untuk diberikan 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
				

Properti

ID Artikel: 297951 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Kata kunci: 
kbdswadsi2003swept kb32bitonly kbhowto kbmt KB297951 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:297951

Berikan Masukan

 

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