Freigeben über


WMI-Sicherheitsdeskriptorobjekte

WMI verfügt über Objekte und Methoden, mit denen Sie Sicherheitsdeskriptoren lesen und bearbeiten können, um zu bestimmen, wer Zugriff auf sicherungsfähige Objekte hat.

Die Rolle von Sicherheitsdeskriptoren

Sicherheitsdeskriptoren definieren die Sicherheitsattribute von sicherungsfähigen Objekten wie Dateien, Registrierungsschlüsseln, WMI-Namespaces, Druckern, Diensten oder Freigaben. Ein Sicherheitsdeskriptor enthält Informationen zum Besitzer und zur primären Gruppe eines Objekts. Ein Anbieter kann den Ressourcensicherheitsdeskriptor mit der Identität eines anfordernden Benutzers vergleichen und bestimmen, ob der Benutzer das Recht hat, auf die Ressource zuzugreifen, die ein Benutzer anfordert. Weitere Informationen finden Sie unter Zugriff auf WMI Securable Objects.

Einige WMI-Methoden, z. B. GetSD, geben einen Sicherheitsdeskriptor im Binärbytearrayformat zurück. Verwenden Sie ab Windows Vista die Methoden der Win32_SecurityDescriptorHelper-Klasse, um einen binären Sicherheitsdeskriptor in eine Instanz von Win32_SecurityDescriptorzu konvertieren, die einfacher bearbeitet werden kann. Weitere Informationen finden Sie unter Ändern der Zugriffssicherheit für sicherungsfähige Objekte.

Zugriffssteuerung und WMI-Sicherheitsobjekte

Es folgt eine Liste der WMI-Sicherheitsobjekte:

Das folgende Diagramm zeigt die Beziehungen zwischen WMI-Sicherheitsobjekten.

Beziehungen zwischen wmi-Sicherheitsobjekten

Weitere Informationen zur Rolle der Zugriffssicherheit finden Sie unter Bewährte Methoden für sicherheit, Verwalten von WMI-Sicherheits-und Zugriffssteuerung.

Win32_SecurityDescriptor-Objekt

In der folgenden Tabelle sind die Win32_SecurityDescriptor Klasseneigenschaften aufgeführt.

Eigentum Beschreibung
ControlFlags- Set of control bits that qualify the meaning of an SD or its individual members. Weitere Informationen zum Festlegen der ControlFlags Bitwerte finden Sie unter Win32_SecurityDescriptor.
DACL- ACL- (Discretionary Access Control List) von Benutzern und Gruppen sowie deren Zugriffsrechte auf ein gesichertes Objekt. Diese Eigenschaft enthält ein Array von Win32_ACE Instanzen, die Access Control Entriesdarstellen. Weitere Informationen finden Sie unter Erstellen einer DACL-.
Gruppen- Gruppieren, zu der dieses gesicherte Objekt gehört. Diese Eigenschaft enthält eine Instanz von Win32_Trustee, die den Namen, die Domäne und die Sicherheits-ID (SID) der Gruppe enthält, zu der der Besitzer gehört.
Besitzer- Besitzer dieses gesicherten Objekts. Diese Eigenschaft enthält eine Instanz von Win32_Trustee, die den Namen, die Domäne und die Sicherheits-ID (SID) des Besitzers enthält.
SACL- Systemzugriffssteuerungsliste (System Access Control List, ACL) enthält ein Array von Win32_ACE Instanzen, die den Typ der Zugriffsversuche darstellen, die Überwachungsdatensätze für Benutzer oder Gruppen generieren. Weitere Informationen finden Sie unter SACL für ein neues Objekt.

DACL und SACL

Die Arrays von Win32_ACE Objekten in der diskretionären Zugriffssteuerungsliste (ACCESS Control List, DACL) und der Systemzugriffssteuerungsliste {SACL) erstellen eine Verknüpfung zwischen einem Benutzer oder einer Gruppe und seinen Zugriffsrechten.

Wenn eine DACL-Eigenschaft keinen Zugriffssteuerungseintrag (Access Control Entry, ACE) enthält, werden keine Zugriffsrechte gewährt und der Zugriff auf das Objekt verweigert.

Anmerkung

Eine NULL- DACL bietet allen Benutzern Vollzugriff, was ein ernstes Sicherheitsrisiko darstellt. Weitere Informationen finden Sie unter Erstellen einer DACL-.

Win32_ACE, Win32_Trustee, Win32_SID

Ein Win32_ACE-Objekt enthält eine Instanz der Win32_Trustee-Klasse, die einen Benutzer oder eine Gruppe identifiziert, und eine AccessMask-Eigenschaft, die eine Bitmaske ist, die die Aktionen angibt, die ein Benutzer oder eine Gruppe ausführen kann. Beispielsweise kann einem Benutzer oder einer Gruppe das Recht gewährt werden, eine Datei zu lesen, aber nicht in die Datei zu schreiben. Ein Win32_ACE-Objekt enthält auch eine ACE, die angibt, ob es sich um eine Zulassung oder einen Verweigerungszugriff handelt.

Anmerkung

Die Win32_ACE Reihenfolge in einer DACL ist wichtig, da sowohl die Zugriffssteuerungseingabe als auch die Zugriffssteuerungseingabe (Access Control Entry, ACE) in einer DACL zulässig sind. Weitere Informationen finden Sie unter Order of ACEs in einer DACL-.

Jedes Benutzerkonto oder jede Gruppe, die durch eine Win32_Trustee dargestellt wird, verfügt über eine Sicherheits-ID (SID), die ein Konto eindeutig identifiziert und die Zugriffsberechtigungen des Kontos angibt. Wie Sie die SID-Daten angeben, hängt vom Betriebssystem ab. Weitere Informationen finden Sie unter Ändern der Zugriffssicherheit für sicherungsfähige Objekte.

Das folgende Diagramm zeigt den Inhalt einer Win32_ACE Instanz.

Inhalt einer win32-ace-Instanz

Beispiel: Überprüfen, wer Zugriff auf Drucker hat

Das folgende VBScript-Codebeispiel zeigt, wie der Druckersicherheitsdeskriptor verwendet wird. Das Skript ruft die GetSecurityDescriptor--Methode in der Win32_Printer-Klasse auf, um den Deskriptor abzurufen, und bestimmt dann, ob im Sicherheitsdeskriptor eine DACL (Discretionary Access Control List) vorhanden ist. Wenn eine DACL vorhanden ist, ruft das Skript die Liste der Zugriffssteuerungseinträge (Access Control Entries, ACE) aus der DACL ab. Jede ACE wird durch eine Instanz von Win32_ACEdargestellt. Das Skript überprüft jede ACE, um den Namen des Benutzers abzurufen und zu bestimmen, ob der Benutzer Zugriff auf den Drucker hat. Der Benutzer wird durch eine Instanz von Win32_Trustee dargestellt, die in die Win32_ACE-Instanz eingebettet ist.

SE_DACL_PRESENT = &h4
ACCESS_ALLOWED_ACE_TYPE = &h0
ACCESS_DENIED_ACE_TYPE  = &h1

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate, (Security)}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters =  objWMIService.ExecQuery _
    ("Select * from Win32_Printer")

For Each objPrinter in colInstalledPrinters
   Wscript.Echo "Name: " & objPrinter.Name 
' Get security descriptor for printer
    Return = objPrinter.GetSecurityDescriptor( objSD )
    If ( return <> 0 ) Then
 WScript.Echo "Could not get security descriptor: " & Return
 wscript.Quit Return
    End If
' Extract the security descriptor flags
    intControlFlags = objSD.ControlFlags
    If intControlFlags AND SE_DACL_PRESENT Then
' Get the ACE entries from security descriptor
        colACEs = objSD.DACL
    For Each objACE in colACEs
' Get all the trustees and determine which have access to printer
        WScript.Echo objACE.Trustee.Domain & "\" & objACE.Trustee.Name
        If objACE.AceType = ACCESS_ALLOWED_ACE_TYPE Then
            WScript.Echo vbTab & "User has access to printer"
        ElseIf objACE.AceType = ACCESS_DENIED_ACE_TYPE Then
            WScript.Echo vbTab & "User does not have access to the printer"
        End If
    Next
    Else
    WScript.Echo "No DACL found in security descriptor"
End If
Next

Ändern der Zugriffssicherheit für sicherungsfähige Objekte

Sicherheitsdeskriptor-Hilfsklasse

bewährte Methoden für die Sicherheit

Verwalten von WMI-Sicherheits-

Zugriffssteuerung

Zugriff auf WMI-Namespaces