Birincil grup bulmak için yerel ADSI bileşenleri nasıl kullanılır

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

Bu Sayfada

Özet

Bu makalede, yerel bir Active Directory Hizmetleri arabirimi (ADSI) bileşenleri bir kullanıcının birincil grubu üyeliğini belirlemek için nasıl kullanılacağı açıklanır.

Daha fazla bilgi

Birincil grup, bir kullanıcı nesnesi Active Directory'de nasıl depolandığını

Her güvenlik bağlamı nesnesi (örneğin, kullanıcı ve güvenlik grupları için) Active Directory'de, kendisiyle ilişkili bir güvenlik tanımlayıcısı (SID) özniteliği vardır. SID, "SıD Components" başvurusunu bu makalenin "Başvurusu" bölümünde açıklandığı gibi birçok bileşen vardır. Bu bileşenleri SıD'SI etki alanı göreli tanımlayıcı (RID) ve etki alanındaki nesneye RID özel ikisidir.

Bir kullanıcının birincil grubu varsayılan olarak, kullanıcı nesnesinin PrimaryGroupID özniteliği (kullanıcının etki alanındaki grup RID) olarak depolanır. Bir kullanıcının birincil grubu, yalnızca kullanıcı aynı etki alanında varolan bir grup olabilir ve bu grubun üyesi olan kullanıcı grubu vardır. Ayrıca, bu Grup nesnesi Active Directory'de, bu grup etki alanındaki RID saklayan PrimaryGroupToken, adlı bir özniteliğine sahip.

Windows NT ve Basit Dizin Erişim Protokolü (LDAP) sağlayıcıları, kullanıcının üyesi olduğu bir grubun RID ilgili olarak için PrimaryGroupID öznitelik değerini ayarlayarak, bir kullanıcının birincil grubunu değiştirmek, programcılar izin ver. Kullanıcı grubunun bir üyesi değilse, kullanıcının PrimaryGroupID Grup RID ilgili olarak için ayarlanamaz.

ADSI Windows NT sağlayıcı kullandığında birincil grubu, kullanıcının IADsUser::Groups koleksiyonunda bir girdi olarak dahil edilir.

DeğilIADsUser::Groups derlemedeki bir girdi olarak dahil, veya olduğu birincil grubu LDAP sağlayıcısında değil grubun MemberOf özniteliği dizine kullanıcı nesnesinin ayırt edici ad (DN) parçası. Grubun RID PrimaryGroupID, bir kullanıcının birincil grubu LDAP kullanıcı nesnesinde başvurulan tek yerdir.

Hiçbir sağlayıcı için ilgili kullanıcı nesneleri doğrudan bir kullanıcının birincil grubu adını belirlemek için bir mekanizma tanımlar. Sorunu daha karmaşık her sağlayıcı tarafından sağlanan her grup nesnesinin öznitelikleri, farklı bir şekilde desteklediğini gerçeğini tarafından yapılır:
  • Windows NT tarafından sağlanan grup nesnesi PrimaryGroupToken özniteliği desteklemiyor ya da Windows NT sağlayıcı yerel ADSI kodunu kullanarak grubun RID almak için başka bir şekilde desteklemiyor.
  • Hesaplanmış bir özniteliğin LDAP Sağlayıcı grup nesnesinin PrimaryGroupToken özniteliğidir. Bu özniteliği dizine grup nesnesi yok. Istemciye bir <a0>IADs::GetInfoEx</a0> yöntem çağrısı tarafından istenen öznitelik aslında oluşturulur. Active Directory'de oluşturulmuş öznitelikler temel alan LDAP aramaları yapmak mümkün değildir. Bu nedenle, bir grubu birincil grup belirlemek istediğiniz kullanıcı nesnesinin PrimaryGroupID özniteliği ile eşleşen PrimaryGroupToken özniteliğinde LDAP Sağlayıcı kullanarak arama yapamazsınız. Bu, ayrıca, birincil grup belirlemenize yardımcı olması için bir dış COM nesnesinde bağımlı olmayan ADSI çözüm saf dışı kuralları.

Yol, bir kullanıcının birincil grubu belirlemek için

Bir kullanıcının birincil grubu adını belirlemek için üç bilinen yöntemleri şunlardır:
  • Bir SID grup nesnesi Active Directory'de kullanıcı SıD'SINI ve grubun RID PrimaryGroupID özniteliği <a0>kullanıcı</a0> nesnesinde saklanan etki alanı RID bileşeninden bağlama dizesi oluşturma.

    Microsoft KB makalesi (Bu makalenin "Başvurusu" bölümünde bulunan) Q297951 anlatılan yöntem budur. SID bağlama dizesi oluşturmak için <a0></a0>, Programcı ikili güvenlik tanımlayıcısı bir etki alanı nesnesinin SDDL şekliyle dönüştürmek ADsSID nesnesi kullanan gerekir, bu yöntem önemli bir sorun var. ADsSID nesnesi, kopyalanmasını olmalı ve kodu başarıyla çalıştırılabilmesi için önce istemci üzerinde kayıtlı ADsSecurity.dll dosyasıyla barındırılıyor.
  • Bir etki alanındaki tüm grupları bulmak ve kendi PrimaryGroupToken özniteliği dönmek için bir LDAP sorgusu kullanın.

    Bu yöntem yalnızca bir LDAP çözümüdür. Ancak, bu arama, her grup etki alanında da bu kullanıcı; üyesi değildir ve bu kayıt kümesi geçiş gibi PrimaryGroupToken özniteliği, istemci üzerinde oluşturulur, bu aramayı oldukça yavaş olduğundan verdiği için komut dosyası kullanan çözüm çok etkili değildir. Bu yöntem özellikle zaman, çok sayıda etki alanındaki grupları alabilir. LDAP diyalekt ADO sorguları oluşturmak örnekler abound ve bu nedenle, bu makaledeki dahil edilmez.
  • Karma bir çözüm oluşturmak için her sağlayıcı özelliklerinden yararlanın.

    Bu çözüm, kullanıcının birincil grubu belirlemek için farklı sağlayıcıların özelliklerinden yararlanır. Bunu yapmak için şu adımları izleyin:
    1. Kullanıcı nesnesi için Windows NT sağlayıcı ile bağlama.

      Windows NT kullanıcı nesnesi, kullanıcının birincil grubunu içerecek şekilde garanti grubu sağlar. Ayrıca, kullanıcı nesnesinin PrimaryGroupID hemen kullanılmak üzere bu algoritma için geçici bir konuma depolanır.
    2. IADsUser::Groups toplamasını.
    3. Bu koleksiyon her grubu ADsPath'den SamAccountName özelliği ayıklamak ve sonra da bu koleksiyonunda PrimaryGroupToken ve DistinguishedName öznitelik değerleri döndüren listelenen SamAccountName özelliği tüm grupları bulmak için bir LDAP diyalekt sorgu dizesi oluşturun.
    4. ADO ADSI ara çalıştırın ve sonra her grubun PrimaryGroupToken daha önce önbelleğe alınmış olan PrimaryGroupID öznitelik değerinin karşılaştırma kayıt kümesi döngü.
    5. Bir eşleştirme bulursanız, durdurma ve bu kullanıcı için birincil grup olarak bu grubun ayırt edici adı görüntüler.
    6. Bir eşleşme bulamazsanız, arama sonucu ile döngü devam edin.
    Bu yöntemin avantajları hemen belirgin. Kullanılan tüm nesneleri için ADSI yerel ve ek bileşenleri gerektirir. Ayrıca, numaralandırma, yalnızca sahibin meşru olarak birincil grubu olabilir gruplarını içerir.

    Ancak, aşağıdaki dezavantajı unutmayın: IADsUser::Groups tahsilat numaralandırılan olduğunda döndürülen bir ıads arabirimi grubu üyesine nesnedir. Herhangi bir nedenle numaralandırma gerçekleştiren kullanıcının belirli bir nesneyi açmak için gerekli izinlere sahip değil, numaralandırma olduğunu belirten bir hata olmadan durdurur. Aşağıdaki kod, önceki algoritması uygulamak gösterir:
    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
    					

Referanslar

Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
297951Bir kullanıcının birincil grubu bulmak için PrimaryGroupID özniteliği nasıl kullanılır

Özellikler

Makale numarası: 321360 - Last Review: 3 Mart 2008 Pazartesi - Gözden geçirme: 5.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Windows Server 2003 Standard Edition
  • Microsoft Windows 2000 Server
  • Microsoft Active Directory Service Interfaces 2.5
  • Microsoft Active Directory Client Extension
Anahtar Kelimeler: 
kbmt kbdswadsi2003swept kbinfo KB321360 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:321360

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