Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

Wie Sie systemeigene ADSI-Komponenten, um die primäre Gruppe zu finden

Der Support für Windows Server 2003 ist am 14. Juli 2015 abgelaufen.

Microsoft beendete den Support für Windows Server 2003 am 14. Juli 2015. Diese Änderung wirkt sich auf Ihre Softwareupdates und Sicherheitsoptionen aus. Erfahren Sie, was das für Sie bedeutet und wie Sie Ihren Schutz aufrechterhalten können.

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 321360
Zusammenfassung
In diesem Artikel erläutert die systemeigene Active Directory Services Interface (ADSI)-Komponenten verwenden, um die primäre Gruppenmitgliedschaft eines Benutzers zu bestimmen.
Weitere Informationen

Wie die primäre Gruppe für ein Benutzerobjekt in Active Directory gespeichert wird

Jedes Objekt Kontext Sicherheit (z. B. Benutzer und Sicherheitsgruppen) in Active Directory hat ein Security-ID (SID)-Attribut zugeordnet. Die SID hat mehrere Komponenten, wie in der "SID-Komponenten" Verweis im Abschnitt "Reference" dieses Artikels enthalten beschrieben. Zwei dieser Komponenten auf der SID sind die Domäne relativen ID (RID) und die RID spezifisch auf das Objekt innerhalb der Domäne.

Die primäre Gruppe eines Benutzers wird auf dem PrimaryGroupID -Attribut eines Benutzerobjekts (als RID der Gruppe in Domäne des Benutzers) gespeichert. Primäre Gruppe eines Benutzers kann nur eine Gruppe, die in derselben Domäne wie der Benutzer vorhanden ist, und diese Gruppe hat eine Gruppe sein, der der Benutzer Mitglied ist. Außerdem enthält diese Gruppe -Objekt in der Active Directory ein Attribut namens PrimaryGroupToken , der die RID für diese Gruppe innerhalb der Domäne gespeichert.

Windows NT und (LIGHTWEIGHT Directory Access Protocol) können Programmierer primäre Gruppe eines Benutzers durch Festlegen den PrimaryGroupID -Attribut-Wert auf die RID der einer Gruppe, der Benutzer Mitglied ist, ändern. Wenn der Benutzer nicht Mitglied einer Gruppe ist, kann nicht auf die RID der Gruppe des Benutzers PrimaryGroupID festgelegt werden.

Wenn Sie den Windows NT-Anbieter in ADSI verwendet, ist die primäre Gruppe als einen Eintrag in IADsUser::Groups -Auflistung des Benutzers enthalten.

Mit dem LDAP-Anbieter die primäre Gruppe ist, nicht als Eintrag in der IADsUser::Groups -Auflistung enthalten, noch ist die Gruppe Unterscheidungsname (DN) Teil des MemberOf -Attributs des Benutzerobjekts im Verzeichnis. Die Gruppe RID in PrimaryGroupID ist der nur Ort, die in dem die primäre Gruppe eines Benutzers auf dem LDAP-Benutzerobjekt verwiesen wird.

Keine Anbieter definiert einen Mechanismus um den Namen der primären Gruppe für einen Benutzer direkt von Ihrer jeweiligen Benutzerobjekte zu ermitteln. Das Problem noch komplexere durch die Tatsache besteht, dass jedes Objekt-Gruppe Jeder Anbieter bereitgestellten wie folgt einen anderen Satz von Attributen, unterstützt:
  • Die Windows NT bereitgestellte Gruppenobjekt unterstützt nicht das PrimaryGroupToken -Attribut, noch unterstützt der Windows NT-Anbieter eine andere Weise der Gruppe RID mithilfe von systemeigenen ADSI-Code abzurufen.
  • Das PrimaryGroupToken -Attribut eines LDAP-Anbieter Gruppenobjekts ist ein berechneter Attribut. Dieses Attribut ist für das Objekt Gruppe im Verzeichnis nicht vorhanden. Das Attribut ist, tatsächlich erstellt, wenn es vom Client mit einem Methodenaufruf IADs::GetInfoEx angefordert wird. Es ist nicht möglich LDAP-Suchvorgänge auf Grundlage von konstruierten Attributen in Active Directory ausführen. Daher können nicht durchsucht mithilfe des LDAP-Anbieters für eine Gruppe basierend auf dem das PrimaryGroupID -Attribut des Benutzerobjekts übereinstimmt, deren primäre Gruppe Sie bestimmen möchten PrimaryGroupToken -Attribut werden. Diese Regeln auch außerhalb einer reinen ADSI Lösung, die nicht von einem externen COM-Objekt zu bestimmen, die primäre Gruppe abhängig ist.

Möglichkeiten, die primäre Gruppe eines Benutzers zu bestimmen.

Im folgenden werden drei bekannte Methoden, um den Namen der primären Gruppe eines Benutzers zu ermitteln:
  • Erstellen einer SID binden Zeichenfolge für das Gruppenobjekt in Active Directory aus der Domäne RID-Komponente der SID des Benutzers und der Gruppe RID auf dem PrimaryGroupID -Attribut des Benutzerobjekts gespeichert.

    Dies ist die Methode in Microsoft KB-Artikel Q297951 (enthalten in der in diesem Artikel im Abschnitt "Reference") beschrieben. Das Hauptproblem bei dieser Methode ist, dass die SID binden Zeichenfolge erstellen, der Programmierer für das ADsSID -Objekt auf die binäre Sicherheitsbeschreibung das Domänenobjekt in seiner SDDL-Form konvertieren angewiesen. Das ADsSID -Objekt wird durch die Datei ADsSecurity.dll gehostet, die kopiert und auf dem Client registriert, bevor der Code erfolgreich ausgeführt werden kann werden müssen.
  • Verwenden Sie eine LDAP-Abfrage, um zu für alle Gruppen in einer Domäne suchen und deren PrimaryGroupToken -Attribut zurückgeben.

    Diese Methode ist eine reine LDAP-Lösung. Die skriptgesteuerte Lösung ist jedoch nicht sehr effizient, da diese Suche jede Gruppe in der Domäne auch zurückgibt, dass der Benutzer nicht Mitglied; und da das PrimaryGroupToken -Attribut auf dem Client erstellt wird, wie die Datensatzgruppe durchlaufen wird, diese Suche sehr langsam ist. Diese Methode, insbesondere zeitaufwändig Wenn eine große Anzahl von Gruppen in der Domäne. Beispiele zum Erstellen von LDAP-Dialekt ADO-Abfragen von abound und daher werden nicht einbezogen in diesem Artikel.
  • Nutzen Sie die Features der einzelnen Anbieter zum Erstellen einer hybriden Lösung.

    Diese Lösung nutzt die Features von verschiedenen Anbietern die primäre Gruppe des Benutzers zu ermitteln. Gehen Sie hierzu folgendermaßen vor:
    1. Binden Sie an das Benutzerobjekt mit dem Windows NT-Anbieter.

      Das Windows NT-Benutzerobjekt stellt eine Gruppe-Auflistung, die garantiert die primäre Gruppe des Benutzers enthalten. Außerdem wird PrimaryGroupID des Benutzerobjekts Einlagerung in einen temporären Speicherort für die Verwendung weiter unten in diesem Algorithmus gespeichert.
    2. Durchlaufen Sie die IADsUser::Groups -Auflistung.
    3. Extrahieren Sie die SamAccountName -Eigenschaft aus den ADsPath für jede Gruppe in dieser Auflistung und erstellen Sie eine LDAP-Dialekt-Abfragezeichenfolge mit den in dieser Auflistung, deren Attributwerte PrimaryGroupToken und DistinguishedName zurückgeben aufgeführte SamAccountName -Eigenschaft für alle Gruppen zu suchen.
    4. Führen Sie die ADO-ADSI-Suche, und durchlaufen Sie die Datensatzgruppe, vergleichen jede Gruppe PrimaryGroupToken mit der PrimaryGroupID -Attributwert zuvor zwischengespeicherte.
    5. Wenn Sie eine Übereinstimmung gefunden, beenden Sie und zeigen Sie den Distinguished Name für diese Gruppe als primäre Gruppe für diesen Benutzer an.
    6. Wenn Sie keine Übereinstimmung gefunden, weiterhin das Suchergebnis durchlaufen.
    Die Vorteile dieser Methode sind sofort offensichtlich. Alle verwendeten Objekte sind systemeigen auf ADSI und erfordern keine zusätzliche Komponenten. Darüber hinaus enthält die Enumeration nur die Gruppen, die möglicherweise die primäre Gruppe.

    Beachten Sie jedoch den folgenden Nachteil: bei die IADsUser::Groups -Auflistung aufgelistet ist, ist das zurückgegebene Objekt eine IADs -Schnittstelle auf den Member in der Gruppe. Wenn aus irgendeinem Grund der Benutzer, der Enumeration nicht die notwendigen Berechtigungen zum Öffnen eines bestimmten Objekts verfügt, wird die Enumeration ohne dass einen Fehler beendet. Der folgende Code veranschaulicht, wie Sie den vorherigen Algorithmus implementieren können:
    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					
Informationsquellen
Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
297951Wie Sie das PrimaryGroupID-Attribut, um die primäre Gruppe für einen Benutzer zu finden

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 321360 – Letzte Überarbeitung: 03/03/2008 17:30:05 – Revision: 5.0

Microsoft Windows Server 2003, Standard Edition (32-bit x86), Microsoft Windows 2000 Server, Microsoft Active Directory Service Interfaces 2.5, Microsoft Active Directory Client Extension

  • kbmt kbdswadsi2003swept kbinfo KB321360 KbMtde
Feedback
script> uage);" class="ng-binding" id="language-es-ve">Venezuela - Español
://c1.microsoft.com/c.gif?DI=4050&did=1&t=">;m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?"> dy>w.location.protocol) + "//c.microsoft.com/ms.js'><\/script>");