Freigeben über


Verwaltung von Sicherheitsbeschreibungen

Es ist nicht möglich, alle Aufgaben durch Ändern der Attribute eines Objekts zu erledigen. Bisweilen ist es erforderlich, die Sicherheitsbeschreibung eines Objekts zu ändern. Standardmäßig kann ein normaler Benutzer beispielsweise die meisten Attribute zwar lesen, aber nicht ändern. Sie können es einem Benutzer jedoch ermöglichen, seine Telefonnummer zu lesen und zu schreiben. Dies wird durch Hinzufügen eines Zugriffssteuerungseintrags zur freigegebenen Zugriffssteuerungsliste (DACL) des Benutzerobjekts erreicht. Dieser Zugriffssteuerungseintrag ermöglicht den Lesezugriff auf die telephoneNumber-Eigenschaft. Weitere Informationen zur telephoneNumber-Eigenschaft finden Sie in den Themen "telephoneNumber" bzw. "Telephone-Number" in der MSDN Library unter https://go.microsoft.com/fwlink/?LinkID=27252.

In den Versionen 1.0 und 1.1 von .NET Framework ist keine systemeigene Unterstützung zum Ändern der Sicherheitsbeschreibungen von Active Directory-Objekten enthalten. Die Sicherheitsbeschreibung eines Active Directory-Objekts kann durch Aufrufen von ADSI und Verwendung von IADsSecurityDescriptor sowie der zugehörigen Schnittstellen bearbeitet werden. Weitere Informationen hierzu finden Sie unter Aufrufen von ADSI. Weitere Informationen zur IADsSecurityDescriptor-Schnittstelle finden Sie im Thema "IADsSecurityDescriptor" in der MSDN Library unter https://go.microsoft.com/fwlink/?LinkID=27252.

In .NET Framework 2.0 enthält der System.DirectoryServices-Namespace mehrere Klassen, die die Bearbeitung einer Sicherheitsbeschreibung ermöglichen, ohne ADSI aufrufen zu müssen. Die primäre Klasse für Sicherheitsbeschreibungen von Active Directory-Objekten ist ActiveDirectorySecurity. Sie können mit der ObjectSecurity-Eigenschaft ein ActiveDirectorySecurity-Objekt abrufen, das die Sicherheitsbeschreibung eines Active Directory-Objekts darstellt.

Die ActiveDirectorySecurity-Klasse verfügt über Methoden und Eigenschaften, mit denen die freigegebene Zugriffssteuerungsliste und die sekundäre Zugriffssteuerungsliste eines Objekts gelesen und geändert werden können.

Ein Zugriffssteuerungseintrag in einer freigegebenen Zugriffssteuerungsliste wird Zugriffsregel genannt Die primäre Klasse, die eine Zugriffsregel darstellt, ist die ActiveDirectoryAccessRule-Klasse. Darüber hinaus gibt es mehrere Klassen, die von der ActiveDirectoryAccessRule-Klasse abgeleitet werden, mit denen spezielle Typen von Zugriffsregeln dargestellt werden können. Die folgende Tabelle enthält eine Liste dieser speziellen Klassen und deren Verwendung.

Klasse Verwendung

CreateChildAccessRule

Diese Klasse stellt eine Zugriffsregel dar, die verwendet wird, um einem Active Directory-Objekt das Recht zum Erstellen untergeordneter Objekte zu gewähren oder zu verweigern.

DeleteChildAccessRule

Diese Klasse stellt eine Zugriffsregel dar, die verwendet wird, um einem Active Directory-Objekt das Recht zum Löschen untergeordneter Objekte zu gewähren oder zu verweigern.

DeleteTreeAccessRule

Diese Klasse stellt eine Zugriffsregel dar, die verwendet wird, um einem Active Directory-Objekt das Recht zum Löschen aller untergeordneter Objekte zu gewähren oder zu verweigern.

ExtendedRightAccessRule

Diese Klasse stellt eine Zugriffsregel dar, die verwendet wird, um einem Active Directory-Objekt ein erweitertes Recht zu gewähren oder zu verweigern.

ListChildrenAccessRule

Diese Klasse stellt eine Zugriffsregel dar, die verwendet wird, um einem Active Directory-Objekt das Recht zum Auflisten untergeordneter Objekte zu gewähren oder zu verweigern.

PropertyAccessRule

Diese Klasse stellt eine Zugriffsregel dar, die verwendet wird, um den Zugriff auf eine Active Directory-Eigenschaft zu gewähren oder zu verweigern.

PropertySetAccessRule

Diese Klasse stellt eine Zugriffsregel dar, die verwendet wird, um den Zugriff auf ein Active Directory-Eigenschaftenset zu gewähren oder zu verweigern.

Ein Zugriffssteuerungseintrag in einer Systemzugriffssteuerungsliste wird Überwachungsregel genannt und durch die ActiveDirectoryAuditRule-Klasse dargestellt.

In vielen Fällen ist das Hinzufügen einer Zugriffsregel zu allen einzelnen Objekten unpraktisch, um Zugriff zu gewähren oder zu verweigern. In diesen Fällen sollte die Sicherheitsbeschreibung des Containers geändert und die Zugriffsregel vererbbar gemacht werden. Dadurch wird beim Erstellen neuer Objekte auch sichergestellt, dass die Objekte automatisch die entsprechenden Berechtigungen erhalten. Im obigen telephoneNumber-Beispiel möchten Sie u. U. allen Benutzern Lesezugriff auf ihre Telefonnummer gewähren. Die einfachste Möglichkeit dazu besteht darin, einem Container, z. B. einer Organisationseinheit, eine vererbbare Zugriffsregel hinzuzufügen und alle Benutzer unter der Organisationseinheit einzufügen. In den folgenden Codebeispielen wird dies veranschaulicht.

Beispiel

Im folgenden Visual Basic .NET-Beispiel wird veranschaulicht, wie eine Zugriffsregel zu einem Container hinzugefügt wird, die allen untergeordneten Benutzerobjekten des Containers Lesezugriff auf die telephoneNumber-Eigenschaft gewährt. Weitere Informationen zur telephoneNumber-Eigenschaft finden Sie in den Themen "telephoneNumber" bzw. "Telephone-Number" in der MSDN Library unter https://go.microsoft.com/fwlink/?LinkID=27252.

Sub SetWritePhonePermission(ByVal container As DirectoryEntry)
    Try
        ' Get the ActiveDirectorySecurity for the container.
        Dim containerSecurity As ActiveDirectorySecurity
        containerSecurity = container.ObjectSecurity

        ' Create a SecurityIdentifier object for "self".
        Dim selfSid As New SecurityIdentifier(WellKnownSidType.SelfSid, _
            Nothing)

        ' Get the schema for the currently logged on user.
        Dim schema As ActiveDirectorySchema
        schema = ActiveDirectorySchema.GetCurrentSchema()

        ' Get the telephoneNumber schema property object.
        Dim phoneProperty As ActiveDirectorySchemaProperty
        phoneProperty = schema.FindProperty("telephoneNumber")

        ' Get the user schema class object.
        Dim userClass As ActiveDirectorySchemaClass
        userClass = schema.FindClass("user")

        ' Create a property access rule to allow a user to write to their own telephoneNumber property.
        Dim allowWritePhoneRule As New PropertyAccessRule(selfSid, _
            AccessControlType.Allow, _
            PropertyAccess.Write, _
            phoneProperty.SchemaGuid, _
            ActiveDirectorySecurityInheritance.Descendents, _
            userClass.SchemaGuid)

        ' Add the access rule to the DACL.
        container.ObjectSecurity.AddAccessRule(allowWritePhoneRule)

        ' Commit the changes.
        container.CommitChanges()

    Catch notFoundEx As ActiveDirectoryObjectNotFoundException
        ' The schema class or property could not be found.
    End Try

End Sub 'SetWritePhonePermission

Im folgenden C#-Beispiel wird veranschaulicht, wie eine Zugriffsregel zu einem Container hinzugefügt wird, die allen untergeordneten Benutzerobjekten des Containers Lesezugriff auf die telephoneNumber-Eigenschaft gewährt. Weitere Informationen zur telephoneNumber-Eigenschaft finden Sie in den Themen "telephoneNumber" bzw. "Telephone-Number" in der MSDN Library unter https://go.microsoft.com/fwlink/?LinkID=27252.

static void SetWritePhonePermission(DirectoryEntry container)
{
    try
    {
        // Get the ActiveDirectorySecurity for the container.
        ActiveDirectorySecurity containerSecurity = container.ObjectSecurity;

        // Create a SecurityIdentifier object for "self".
        SecurityIdentifier selfSid =
            new SecurityIdentifier(WellKnownSidType.SelfSid, null);

        // Get the schema for the currently logged on user.
        ActiveDirectorySchema schema = ActiveDirectorySchema.GetCurrentSchema();

        // Get the telephoneNumber schema property object.
        ActiveDirectorySchemaProperty phoneProperty = schema.FindProperty("telephoneNumber");

        // Get the user schema class object.
        ActiveDirectorySchemaClass userClass = schema.FindClass("user");

        // Create a property access rule to allow a user to write to their own telephoneNumber property.
        PropertyAccessRule allowWritePhoneRule =
            new PropertyAccessRule(
                selfSid,
                AccessControlType.Allow,
                PropertyAccess.Write,
                phoneProperty.SchemaGuid,
                ActiveDirectorySecurityInheritance.Descendents,
                userClass.SchemaGuid);

        // Add the access rule to the DACL.
        container.ObjectSecurity.AddAccessRule(allowWritePhoneRule);

        // Commit the changes.
        container.CommitChanges();
    }
    catch (ActiveDirectoryObjectNotFoundException)
    {
        // The schema class or property could not be found.
    }
}

Siehe auch

Referenz

System.DirectoryServices
ActiveDirectorySecurity
ActiveDirectoryAccessRule
ActiveDirectoryAuditRule

Konzepte

Systemverwaltungsaufgaben

Send comments about this topic to Microsoft.

Copyright © 2007 Microsoft Corporation. Alle Rechte vorbehalten.