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

Sicherheitsbeschreibungen definieren die Sicherheitsattribute sicherungsfähiger Objekte wie Dateien, Registrierungsschlüssel, WMI-Namespaces, Drucker, Dienste oder Freigaben. Ein Sicherheitsdeskriptor enthält Informationen zum Besitzer und zur primären Gruppe eines Objekts. Ein Anbieter kann die Ressourcensicherheitsbeschreibung mit der Identität eines anfordernden Benutzers vergleichen und bestimmen, ob der Benutzer das Recht hat, auf die Ressource zu zugreifen, die ein Benutzer anordnt. Weitere Informationen finden Sie unter Zugriff auf sicherungsfähige WMI-Objekte.

Einige WMI-Methoden wie GetSDgeben einen Sicherheitsdeskriptor im binären Bytearrayformat 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 Changing Access Security on Securable Objects (Ändern der Zugriffssicherheit für sicherungsfähige Objekte).

Access Control und WMI-Sicherheitsobjekte

Im Folgenden finden Sie 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ährteSicherheitsmethoden , Verwalten der WMI-Sicherheitund Access Control.

Win32 _ SecurityDescriptor-Objekt

In der folgenden Tabelle sind die Eigenschaften der Win32 _ SecurityDescriptor-Klasse aufgeführt.

Eigenschaft Beschreibung
Controlflags Satz von Steuerungsbits, die die Bedeutung einer SD oder ihrer einzelnen Member qualifizieren. Weitere Informationen zum Festlegen der ControlFlags-Bitwerte finden Sie unter Win32 _ SecurityDescriptor.
DACL Discretionary Access Control List (ACL) von Benutzern und Gruppen sowie deren Zugriffsrechte auf ein gesichertes Objekt. Diese Eigenschaft enthält ein Array von Win32 _ ACE-Instanzen, die Access Control Entries darstellen. Weitere Informationen finden Sie unter Erstellen einer DACL.
Gruppe Gruppe, zu der dieses gesicherte Objekt gehört. Diese Eigenschaft enthält eine Instanz des _ Win32-Vertrauenshänders, die den Namen, die Domäne und die Sicherheits-ID (SID) der Gruppe enthält, zu der der Besitzer gehört.
Besitzer Besitzer dieses geschützten Objekts. Diese Eigenschaft enthält eine Instanz des Win32-Vertrauenshänders, _ die den Namen, die Domäne und die Sicherheits-ID (SID) des Besitzers enthält.
SACL 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 DACL (Discretionary Access Control List) und der Systemzugriffssteuerungsliste {SACL) erstellen eine Verknüpfung zwischen einem Benutzer oder einer Gruppe und ihren Zugriffsrechten.

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

Hinweis

Eine NULL-DACL bietet allen Denkberechtigungen, was ein schwerwiegendes Sicherheitsrisiko ist. Weitere Informationen finden Sie unter Erstellen einer DACL.

Win32 _ ACE, Win32-Vertrauenshänder, _ Win32-SID _

Ein Win32 _ ACE-Objekt enthält eine Instanz der Win32-Vertrauenstreuhänderklasse, die einen Benutzer oder eine Gruppe identifiziert, und eine _ AccessMask-Eigenschaft, bei der es sich um eine Bitmaske handelt, die die Aktionen angibt, die ein Benutzer oder eine Gruppe ausführen kann. Beispielsweise kann einem Benutzer oder einer Gruppe das Recht erteilt werden, eine Datei zu lesen, aber nicht in die Datei zu schreiben. Ein Win32 _ ACE-Objekt enthält auch einen ACE, der angibt, ob es sich um einen Zugriff zum Zulassen oder Verweigern handelt.

Hinweis

Die Win32 _ ACE-Reihenfolge in einer DACL ist wichtig, da der Ace (Access Control Entry, Zugriffssteuerungseintrag zulassen und verweigern) in einer DACL zulässig ist. Weitere Informationen finden Sie unter Reihenfolge der ACEs in einer DACL.

Jedes Benutzerkonto oder jede Gruppe, das bzw. die durch einen _ Win32-Vertrauensinhaber 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 Changing Access Security on Securable Objects (Ä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

Im folgenden VBScript-Codebeispiel wird die Verwendung des Druckersicherheitsdeskriptors veranschaulicht. Das Skript ruft die GetSecurityDescriptor-Methode in der Win32 _ Printer-Klasse auf, um den Deskriptor zu erhalten, und ermittelt dann, ob im Sicherheitsdeskriptor eine discretionary Access Control List (DACL) vorhanden ist. Wenn es eine DACL gibt, erhält das Skript die Liste der Access Control Entries (ACE) aus der DACL. Jeder ACE wird durch eine Instanz von Win32 _ ACE dargestellt. Das Skript überprüft jeden ACE, um den Namen des Benutzers zu erhalten und zu ermitteln, ob der Benutzer Zugriff auf den Drucker hat. Der Benutzer wird in durch eine Instanz des Win32-Vertrauenshänders _ 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

Security Descriptor Helper-Klasse

Bewährte Sicherheitsmethoden

Verwalten der WMI-Sicherheit

Zugriffssteuerung

Zugriff auf WMI-Namespaces