Definitionssprache der Sicherheitsbeschreibung für bedingte ACEs
Ein bedingter Zugriffssteuerungseintrag (Access Control Entry, ACE) ermöglicht die Auswertung einer Zugriffsbedingung, wenn eine Zugriffsüberprüfung durchgeführt wird. Die Definitionssprache der Sicherheitsbeschreibung (Security Descriptor Definition Language, SDDL) stellt eine Syntax zum Definieren bedingter ACEs in einem Zeichenfolgenformat bereit.
Die SDDL für einen bedingte Zugriffssteuerungseintrag ist dieselbe wie für jede andere, wobei die Syntax für die bedingte Anweisung an das Ende der ACE-Zeichenfolge angefügt wird. Weitere Informationen über die SDDL finden Sie unter Definitionssprache der Sicherheitsbeschreibung.
Das „#“-Zeichen ist synonym mit „0“ in Ressourcenattributen. Beispiel: D:AI(XA;OICI;FA;;;WD;(OctetStringType==#1#2#3##)) entspricht und wird interpretiert als D:AI(XA;OICI;FA;;;WD;(OctetStringType==#01020300)).
- Bedingtes ACE-Zeichenfolgenformat
- Conditional Expressions (Bedingte Ausdrücke)
- Attribute
- Operatoren
- Operatorrangfolge
- Unbekannte Werte
- Bedingte ACE-Auswertung
- Beispiele
- Verwandte Themen
Bedingtes ACE-Zeichenfolgenformat
Jeder ACE in einer Sicherheitsbeschreibungszeichenfolge wird in Klammern gesetzt. Die Felder des Zugriffssteuerungseintrag haben folgende Reihenfolge und werden durch Semikolons (;) getrennt.
AceType**;AceFlags;Rechte;ObjectGuid;InheritObjectGuid;AccountSid;(ConditionalExpression)**
Die Felder werden in ACE-Zeichenfolgen mit den folgenden Ausnahmen beschrieben.
Das AceType-Feld kann eine der folgenden Zeichenfolgen sein.
ACE-Typzeichenfolge Konstant in Sddl.h ACE-Typwert "XA" SDDL_CALLBACK_ACCESS_ALLOWED ACCESS_ALLOWED_CALLBACK_ACE_TYPE "XD" SDDL_CALLBACK_ACCESS_DENIED ACCESS_DENIED_CALLBACK_ACE_TYPE Die ACE-Zeichenfolge enthält einen oder mehrere bedingte Ausdrücke, die am Ende der Zeichenfolge in Klammern gesetzt sind.
Bedingte Ausdrücke
Ein bedingter Ausdruck kann eines der folgenden Elemente enthalten.
Ausdruckselement | Beschreibung |
---|---|
AttributeName |
Überprüft, ob das angegebene Attribut einen Wert ungleich Null aufweist. |
exists AttributeName |
Testet, ob das angegebene Attribut im Clientkontext vorhanden ist. |
AttributeName Operator Value |
Gibt das Ergebnis des angegebenen Vorgangs zurück. |
ConditionalExpression**||**ConditionalExpression |
Testet, ob einer der angegebenen bedingten Ausdrücke wahr ist. |
ConditionalExpression && ConditionalExpression |
Testet, beide angegebenen bedingten Ausdrücke wahr sind. |
!(ConditionalExpression) |
Die Umkehrung eines bedingten Ausdrucks. |
Member_of{SidArray} |
Überprüft, ob das SID_AND_ATTRIBUTES-Array des Clientkontexts alle Sicherheits-IDs (SIDs) in der durch SidArray angegebenen und durch Trennzeichen getrennten Liste enthält. Für „Allow-ACEs“ muss für eine Clientkontext-SID das Attribut SE_GROUP_ENABLED als übereinstimmend festgelegt sein. Für „Deny-ACEs“ muss für eine Clientkontext-SID entweder das SE_GROUP_ENABLED- oder das SE_GROUP_USE_FOR_DENY_ONLY-Attribut als übereinstimmend festgelegt sein. 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 AUTHZ_SECURITY_ATTRIBUTES_INFORMATION-Array im Clientkontext dar. Ein Attributname kann alle alphanumerischen Zeichen sowie die Zeichen „:“, „/“, „.“ und „_“ enthalten.
Ein Attributwert kann einer der folgenden Typen sein.
Werttyp | Beschreibung |
---|---|
Integer |
Eine 64-Bit-Ganzzahl in dezimaler oder hexadezimaler Schreibweise. |
String |
Ein durch Anführungszeichen getrennter Zeichenfolgenwert. |
SID |
SID(S-1-1-0) oder SID(BA). Muss im Ressourcenhosting-Subsystem (RHS) von Member_of oder Device_Member_of sein. |
BLOB |
# gefolgt von hexadezimalen Zahlen. Wenn die Länge der Zahlen ungerade ist, wird „#“ in Null übersetzt, um sie gerade zu machen. Außerdem wird ein „#“, das an anderer Stelle im Wert auftaucht, in Null übersetzt. |
Operatoren
Die folgenden Operatoren werden für die Verwendung in bedingten Ausdrücken definiert, um die Werte von Attributen zu testen. All diese sind binäre Operatoren und werden im Formular AttributName Operator Value verwendet.
Operator | Beschreibung |
---|---|
== |
Konventionelle Definition. |
!= |
Konventionelle Definition. |
< |
Konventionelle Definition. |
<= |
Konventionelle Definition. |
> |
Konventionelle Definition. |
>= |
Konventionelle Definition. |
Enthält |
Nimmt den Wert TRUE an, wenn der Wert des angegebenen Attributs eine Obermenge des angegebenen Werts ist (andernfalls FALSE). |
Any_of |
Nimmt den Wert TRUE an, wenn der angegebene Wert eine Obermenge des Werts des angegebenen Attributs ist (andernfalls FALSE). |
Darüber hinaus sind die unären Operatoren „Exists“, „Member_of“ und „Negation (!)“ wie in der Tabelle mit bedingten Ausdrücken beschrieben definiert.
Der Operator „Contains“ muss vorangestellt und von Leerzeichen gefolgt sein, und dem Operator „Any_of“ müssen Leerzeichen vorangestellt werden.
Operatorrangfolge
Die Operatoren werden in der folgenden Reihenfolge der Rangfolge ausgewertet, wobei Vorgänge gleicher Rangfolge von links nach rechts ausgewertet werden.
- Exists, Member_of
- Contains, Any_of
- ==, !=, <, <=, >, >=
- !
- &&
- ||
Darüber hinaus kann jeder Teil eines bedingten Ausdrucks in Klammern gesetzt werden. Ausdrücke innerhalb von Klammern werden zuerst ausgewertet.
Unbekannte Werte
Die Ergebnisse bedingter Ausdrücke geben manchmal den Wert Unknown (Unbekannt) zurück. Eine der relationalen Vorgänge gibt beispielsweise 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 |
UNBEKANNT |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
UNBEKANNT |
FALSE |
UNBEKANNT |
TRUE |
UNKNOWN |
UNBEKANNT |
FALSE |
FALSE |
UNKNOWN |
UNBEKANNT |
UNBEKANNT |
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 |
UNBEKANNT |
TRUE |
FALSE |
TRUE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
UNKNOWN |
UNBEKANNT |
UNKNOWN |
TRUE |
TRUE |
UNBEKANNT |
FALSE |
UNKNOWN |
UNBEKANNT |
UNBEKANNT |
UNBEKANNT |
Die Negation eines bedingten Ausdrucks mit dem Wert UNKNOWN ist ebenfalls UNKNOWN.
Bedingte ACE-Auswertung
In der folgenden Tabelle wird das Ergebnis einer Zugriffsüberprüfung eines bedingten ACE abhängig 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
Die folgenden Beispiele zeigen, wie die angegebenen Zugriffsrichtlinien durch einen bedingten ACE dargestellt wird, der mithilfe der SDDL definiert wird.
-
Richtlinie
-
„Ausführen für alle zulassen“, wenn beide der folgenden Bedingungen erfüllt sind:
- Titel = PM
- Division = Finance or Division = Sales
-
SDDL
-
D:(XA; ;FX;;;S-1-1-0; (@User.Title=="PM" && (@User.Division=="Finance" || @User.Division ==" Sales")))
-
Richtlinie
-
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))
-
Richtlinie
-
Lesezugriff zulassen, wenn sich der Benutzer mit einer Smartcard angemeldet hat, ein Sicherungsoperator ist und eine Verbindung von einem Computer mit aktiviertem Bitlocker herstellt.
-
SDDL
-
D:(XA; ;FR;;;S-1-1-0; (Member_of {SID(Smartcard_SID), SID(BO)} && @Device.Bitlocker))