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
- Bedingte Ausdrücke
- Attribute
- Operatoren
- Operatorrangfolge
- Unbekannte Werte
- Bedingte ACE-Auswertung
- Beispiele
- Zugehörige Themen
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.
- Exists, Member _ von
- Contains, Any _ of
- ==, !=, <, <=, >, >=
- !
- &&
- ||
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 ))