Definitionssprache für Sicherheitsbeschreibungen für bedingte ACEs

Mit einem ACE (Conditional Access Control Entry) kann eine Zugriffsbedingung ausgewertet werden, wenn eine Zugriffsüberprüfung durchgeführt wird. Die Sicherheitsbeschreibungsdefinitionssprache (SECURITY Descriptor Definition Language, SDDL) stellt Syntax zum Definieren bedingter ACEs in einem Zeichenfolgenformat zur Verfügung.

Die SDDL für einen bedingten ACE ist mit der für jeden ACE identisch, und die Syntax für die bedingte Anweisung wird an das Ende der ACE-Zeichenfolge angefügt. Informationen zu SDDL finden Sie unter Security Descriptor Definition Language.

Das # ""-Zeichen ist synonym mit "0" in Ressourcenattributen. Beispiel: D:AI(XA;OICI;FA;;; WD;(OctetStringType== 1 2 3 )) entspricht und wird als # # # # # D:AI(XA;OICI;FA;;; WD;(OctetStringType== # 01020300)).

Bedingtes ACE-Zeichenfolgenformat

Jeder ACE in einer Sicherheitsbeschreibungszeichenfolge ist in Klammern eingeschlossen. Die Felder des ACE befinden sich in der folgenden Reihenfolge und werden durch Semikolons (;).

AceType**;** AceFlags* ; Rechte; ObjectGuid; InheritObjectGuid; AccountSid;(ConditionalExpression)*

Die Felder sind wie unter ACE-Zeichenfolgen beschrieben,mit den folgenden Ausnahmen.

  • Das AceType-Feld kann eine der folgenden Zeichenfolgen sein.

    ACE-Typzeichenfolge Konstante in Sddl.h AceType-Wert
    "XA"
    _SDDL-RÜCKRUFZUGRIFF _ _ ZULÄSSIG
    ACCESS _ ALLOWED _ CALLBACK _ ACE _ TYPE
    "XD"
    _SDDL-RÜCKRUFZUGRIFF _ _ VERWEIGERT
    ACCESS _ DENIED _ CALLBACK _ ACE _ TYPE
  • Die ACE-Zeichenfolge enthält mindestens einen bedingten Ausdruck, der am Ende der Zeichenfolge in Klammern eingeschlossen ist.

Bedingte Ausdrücke

Ein bedingter Ausdruck kann eines der folgenden Elemente enthalten.

Ausdruckselement Beschreibung
AttributeName
Testet, ob das angegebene Attribut über einen Wert ungleich 0 (null) verfügt.
exists AttributeName
Testet, ob das angegebene Attribut im Clientkontext vorhanden ist.
AttributeName-Operatorwert
Gibt das Ergebnis des angegebenen Vorgangs zurück.
ConditionalExpression || ConditionalExpression
Testet, ob einer der angegebenen bedingten Ausdrücke true ist.
ConditionalExpression && ConditionalExpression
Testet, ob beide angegebenen bedingten Ausdrücke true sind.
! (ConditionalExpression)
Die Umkehrung eines bedingten Ausdrucks.
Member _ von{SidArray}
Testet, ob das _ SID AND _ ATTRIBUTES-Array des Clientkontexts alle Sicherheits-IDs (SIDs) in der durch Komma getrennten Liste enthält, die von SidArray angegeben wird.
Für Allow ACEs muss für eine Clientkontext-SID SE _ GROUP _ ENABLED-Attribut festgelegt sein, um als Übereinstimmung angesehen zu werden.
Für Deny ACEs muss für eine Clientkontext-SID entweder das attribut SE _ GROUP _ ENABLED oder das SE GROUP USE FOR _ _ _ _ DENY _ ONLY-Attribut festgelegt sein, um als Übereinstimmung angesehen zu werden.
Das SidArray-Array kann entweder SID-Zeichenfolgen (z. B. "S-1-5-6") oder SID-Aliase (z. B. "BA" enthalten.

Attribute

Ein Attribut stellt ein Element im ARRAY MIT SICHERHEIT ATTRIBUTE INFORMATION _ _ _ im Clientkontext dar. Ein Attributname kann alle alphanumerischen Zeichen und alle Zeichen ":", "/", "." und "" _ enthalten.

Ein Attributwert kann einer der folgenden Typen sein.

Werttyp BESCHREIBUNG
Integer
Eine 64-Bit-Ganzzahl in dezimaler oder hexadezimaler Notation.
String
Ein durch Anführungszeichen getrennter Zeichenfolgenwert.
SID
SID(S-1-1-0) oder SID(BA). Muss in RHS des Mitglieds _ oder _ Gerätemitglieds von _ sein.
BLOB
# gefolgt von Hexadezimalzahlen. Wenn die Länge der Zahlen ungerade ist, wird in eine 0 übersetzt, # um sie gleichmäßig zu machen. Außerdem wird ein , das an anderer Stelle im Wert angezeigt # wird, in 0 übersetzt.

Operatoren

Die folgenden Operatoren sind für die Verwendung in bedingten Ausdrücken definiert, um die Werte von Attributen zu testen. All diese Operatoren sind binäre Operatoren und werden in der Form AttributeName Operator Value verwendet.

Operator Beschreibung
==
Konventionelle Definition.
!=
Konventionelle Definition.
<
Konventionelle Definition.
<=
Konventionelle Definition.
>
Konventionelle Definition.
>=
Konventionelle Definition.
Enthält
TRUE, wenn der Wert des angegebenen Attributs eine Obermenge des angegebenen Werts ist; andernfalls FALSE.
Ein _ beliebiges von
TRUE, wenn der angegebene Wert eine Obermenge des Werts des angegebenen Attributs ist; andernfalls FALSE.

Darüber hinaus werden die unären Operatoren Exists, Member von und Negation (!) wie in der Tabelle _ Conditional Expressions beschrieben definiert.

Dem Contains-Operator muss Leerzeichen vorangehende und gefolgt werden, und dem Operator "Any of" muss Leerzeichen _ vorangehende werden.

Operatorrangfolge

Die Operatoren werden in der folgenden Rangfolge ausgewertet, und Vorgänge mit gleicher Rangfolge werden von links nach rechts ausgewertet.

  1. Exists, Member _ von
  2. Contains, Any _ of
  3. ==, !=, <, <=, >, >=
  4. !
  5. &&
  6. ||

Darüber hinaus kann jeder Teil eines bedingten Ausdrucks in Klammern eingeschlossen werden. Ausdrücke in Klammern werden zuerst ausgewertet.

Unbekannte Werte

Die Ergebnisse bedingter Ausdrücke geben manchmal den Wert Unknown zurück. Beispielsweise gibt jeder der relationalen Vorgänge Unknown zurück, wenn das angegebene Attribut nicht vorhanden ist.

In der folgenden Tabelle werden die Ergebnisse für einen logischen AND-Vorgang zwischen zwei bedingten Ausdrücken beschrieben: ConditionalExpression1 und ConditionalExpression2.

ConditionalExpression1 ConditionalExpression2 ConditionalExpression1 && ConditionalExpression2
TRUE
TRUE
TRUE
TRUE
FALSE
FALSE
TRUE
UNKNOWN
UNKNOWN
FALSE
TRUE
FALSE
FALSE
FALSE
FALSE
FALSE
UNKNOWN
FALSE
UNKNOWN
TRUE
UNKNOWN
UNKNOWN
FALSE
FALSE
UNKNOWN
UNKNOWN
UNKNOWN

In der folgenden Tabelle werden die Ergebnisse für einen logischen OR-Vorgang zwischen zwei bedingten Ausdrücken beschrieben: ConditionalExpression1 und ConditionalExpression2.

ConditionalExpression1 ConditionalExpression2 ConditionalExpression1 || ConditionalExpression2
TRUE
TRUE
TRUE
TRUE
FALSE
TRUE
TRUE
UNKNOWN
TRUE
FALSE
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE
UNKNOWN
UNKNOWN
UNKNOWN
TRUE
TRUE
UNKNOWN
FALSE
UNKNOWN
UNKNOWN
UNKNOWN
UNKNOWN

Die Negation eines bedingten Ausdrucks mit dem Wert UNKNOWN ist ebenfalls UNKNOWN.

Bedingte ACE-Auswertung

In der folgenden Tabelle wird das Ergebnis der Zugriffsüberprüfung eines bedingten ACE in Abhängigkeit von der endgültigen Auswertung des bedingten Ausdrucks beschrieben.

ACE-Typ TRUE FALSE UNKNOWN
Zulassen
Zulassen
ACE ignorieren
ACE ignorieren
Verweigern
Verweigern
ACE ignorieren
Verweigern

Beispiele

In den folgenden Beispielen wird gezeigt, wie die angegebenen Zugriffsrichtlinien durch einen bedingten ACE dargestellt werden, der mithilfe von SDDL definiert wird.

Politik

Lassen Sie Die Ausführung an alle zu, wenn beide der folgenden Bedingungen erfüllt sind:

  • Title = PM
  • Division = Finance oder Division = Sales

Sddl

D:(XA; ; FX;;; S-1-1-0; ( @User.Title =="PM" && ( @User.Division =="Finance" | | @User.Division ==" Sales")))

Politik

Ausführung zulassen, wenn sich eines der Projekte des Benutzers mit den Projekten der Datei überschneidet.

Sddl

D:(XA; ; FX;;; S-1-1-0; ( @User.Project Any _ of @Resource.Project ))

Politik

Lesezugriff zulassen, wenn sich der Benutzer mit einer Smartcard angemeldet hat, ein Sicherungsoperator ist und von einem Computer aus eine Verbindung mit aktivierter BitLocker-Verbindung stellt.

Sddl

D:(XA; ;FR;;; S-1-1-0; (Member _ von {SID(Smartcard _ SID), SID(BO)} && @Device.Bitlocker ))

[MS-DTYP: ] Beschreibungssprache für Sicherheitsbeschreibungen