Şu anda çevrimdışısınız; İnternet'in yeniden bağlanması bekleniyor

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

Windows Server 2003 desteği 14 Temmuz 2015'te sona erdi

Microsoft, Windows Server 2003 desteğini 14 Temmuz 2015'te sona erdirdi. Bu değişiklik yazılım güncelleştirmelerinizi ve güvenlik seçeneklerinizi etkiledi. Bunun sizin için ne anlama geldiğini ve korunmaya nasıl devam edebileceğinizi öğrenin.

Ö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
Ö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 & ")"nextQueryFilter = 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, oRecordsetSet oConnection = CreateObject("ADODB.Connection")Set oCommand = CreateObject("ADODB.Command")oConnection.Provider = "ADsDSOObject"oConnection.Open "Active Directory Provider"Set oCommand.ActiveConnection = oConnectionoCommand.CommandText = QueryStringoCommand.Properties("Page Size") = 900Set 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.moveNextWendSet oRecordset = NothingSet oCommand = NothingSet 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

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 321360 - Son İnceleme: 03/03/2008 17:30:05 - Düzeltme: 5.0

Microsoft Windows Server 2003 Standard Edition, Microsoft Windows 2000 Server, Microsoft Active Directory Service Interfaces 2.5, Microsoft Active Directory Client Extension

  • kbmt kbdswadsi2003swept kbinfo KB321360 KbMttr
Geri bildirim