WMI-Sicherheitsbeschreibungsobjekte

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

Die Rolle von Sicherheitsbeschreibungen

Sicherheitsbeschreibungen definieren die Sicherheitsattribute von sicherungsfähigen Objekten wie Dateien, Registrierungsschlüsseln, WMI-Namespaces, Druckern, Diensten oder Freigaben. Eine Sicherheitsbeschreibung enthält Informationen zum*r Besitzer*in und zur primären Gruppe eines Objekts. Ein Anbieter kann die Ressourcensicherheitsbeschreibung mit der Identität eines anfordernden Benutzers bzw. einer anfordernden Benutzerin vergleichen und feststellen, ob der*die Benutzer*in das Recht hat, auf die angeforderte Ressource zuzugreifen. Weitere Informationen finden Sie unter Zugriff auf sicherungsfähige WMI-Objekte.

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

Zugriffssteuerung und WMI-Sicherheitsobjekte

Im Anschluss 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 Best Practices for the Security APIs (Bewährte Methoden für die Sicherheits-APIs), Aufrechterhalten der WMI-Sicherheit und Zugriffssteuerung (Autorisierung).

Objekt „Win32_SecurityDescriptor“

Die folgende Liste enthält die Eigenschaften der Klasse Win32_SecurityDescriptor.

Eigenschaft BESCHREIBUNG
ControlFlags Satz von Steuerungsbits, die die Bedeutung einer SD oder ihrer einzelnen Elemente qualifizieren. Weitere Informationen zum Festlegen der ControlFlags-Bitwerte finden Sie unter Win32_SecurityDescriptor.
DACL Besitzerverwaltete Zugriffssteuerungsliste (Discretionary Access Control List, DACL) mit Benutzer*innen und Gruppen und ihren Zugriffsrechten für ein geschütztes Objekt. Diese Eigenschaft enthält ein Array von Win32_ACE-Instanzen, die Zugriffssteuerungseinträge darstellen. Weitere Informationen finden Sie unter Erstellen einer DACL.
Gruppieren Gruppe, zu der dieses geschützte 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*die Besitzer*in gehört.
Besitzer Besitzer*in dieses geschützten Objekts. Diese Eigenschaft enthält eine Instanz von Win32_Trustee, die den Namen, die Domäne und die Sicherheits-ID (SID) des Besitzers bzw. der Besitzerin enthält.
SACL Die 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*innen oder Gruppen generieren. Weitere Informationen finden Sie unter SACL for a New Object (SACL für ein neues Objekt).

DACL und SACL

Die Arrays von Win32_ACE-Objekten in der DACL (Discretionary Access Control List, besitzerverwaltete Zugriffssteuerungsliste) und der SACL (System Access Control List, Systemzugriffssteuerungsliste) erstellen eine Verknüpfung zwischen einem*r Benutzer*in oder einer Gruppe und seinen bzw. ihren Zugriffsrechten.

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

Hinweis

Eine DACL vom Typ NULL erteilt allen Benutzer*innen 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 eine*n Benutzer*in oder eine Gruppe identifiziert, und eine AccessMask-Eigenschaft, die eine Bitmaske ist und die Aktionen angibt, die ein*e Benutzer*in oder eine Gruppe ausführen kann. Beispielsweise kann einem*r Benutzer*in 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 einen ACE, der angibt, ob der Zugriff zugelassen oder verweigert wird.

Hinweis

Die Win32_ACE-Reihenfolge in einer DACL ist wichtig, da Zugriffssteuerungseinträge (Access Control Entry, ACE) vom Typ „Zulassen“ und „Verweigern“ in einer DACL zulässig sind. Weitere Informationen finden Sie unter Reihenfolge von ACEs in einer DACL.

Jedes Benutzerkonto oder jede Gruppe, das bzw. die durch eine Win32_Trustee-Instanz 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

Im folgenden VBScript-Codebeispiel wird die Verwendung der Druckersicherheitsbeschreibung veranschaulicht. Das Skript ruft die GetSecurityDescriptor-Methode in der Win32_Printer-Klasse auf, um die Beschreibung abzurufen, und bestimmt dann, ob in der Sicherheitsbeschreibung eine DACL vorhanden ist. Wenn eine DACL vorhanden ist, ruft das Skript die Liste der Zugriffssteuerungseinträge aus der DACL ab. Jeder ACE wird durch eine Instanz von Win32_ACE dargestellt. Das Skript überprüft jeden ACE, um den Namen des Benutzers bzw. der Benutzerin abzurufen und zu ermitteln, ob er bzw. sie Zugriff auf den Drucker hat. Der Benutzer bzw. die Benutzerin 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

Sicherheitsbeschreibungshilfsklasse

Best Practices for the Security APIs (Bewährte Methoden für die Sicherheits-APIs)

Aufrechterhalten der WMI-Sicherheit

Zugriffssteuerung

Zugriff auf WMI-Namespaces