Linguaggio di definizione del descrittore di sicurezza per gli ACL condizionali

Una voce di controllo di accesso condizionale (ACE) consente di valutare una condizione di accesso quando viene eseguito un controllo di accesso. Il linguaggio SDDL (Security Descriptor Definition Language) fornisce la sintassi per definire gli ACL condizionali in un formato stringa.

L'SDDL per un ace condizionale è uguale a quello di qualsiasi ACE, con la sintassi per l'istruzione condizionale aggiunta alla fine della stringa ACE. Per informazioni su SDDL, vedere Security Descriptor Definition Language.

Il segno "#" è sinonimo di "0" negli attributi della risorsa. Ad esempio, D:AI(XA; OICI;FA;;; Nana bianca; (OctetStringType==#1#2#3#)) equivale a e interpretato come D:AI(XA; OICI;FA;;; Nana bianca; (OctetStringType==#01020300)).

Formato stringa ACE condizionale

Ogni ACE in una stringa del descrittore di sicurezza è racchiusa tra parentesi. I campi dell'ace sono nell'ordine seguente e sono separati da punti e virgola (;).

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

I campi sono descritti in Stringhe ACE, con le eccezioni seguenti.

  • Il campo AceType può essere una delle stringhe seguenti.

    Stringa di tipo ACE Costante in Sddl.h Valore AceType
    "XA"
    SDDL_CALLBACK_ACCESS_ALLOWED
    ACCESS_ALLOWED_CALLBACK_ACE_TYPE
    "XD"
    SDDL_CALLBACK_ACCESS_DENIED
    ACCESS_DENIED_CALLBACK_ACE_TYPE
  • La stringa ACE include una o più espressioni condizionali, racchiuse tra parentesi alla fine della stringa.

Espressioni condizionali

Un'espressione condizionale può includere uno degli elementi seguenti.

Elemento dell'espressione Descrizione
AttributeName
Verifica se l'attributo specificato ha un valore diverso da zero.
Exists AttributeName
Verifica se l'attributo specificato esiste nel contesto client.
Valore dell'operatore AttributeName
Restituisce il risultato dell'operazione specificata.
ConditionalExpression ConditionalExpression**||**
Verifica se una delle espressioni condizionali specificate è true.
ConditionalExpression && ConditionalExpression
Verifica se entrambe le espressioni condizionali specificate sono true.
! (ConditionalExpression)
Inverso di un'espressione condizionale.
Member_of{SidArray}
Verifica se la matrice SID_AND_ATTRIBUTES del contesto client contiene tutti gli identificatori di sicurezza (SID) nell'elenco delimitato da virgole specificato da SidArray.
Per Consenti ACL, un SID del contesto client deve avere l'attributo SE_GROUP_ENABLED impostato per essere considerato una corrispondenza.
Per Deny ACEs, un SID del contesto client deve avere il SE_GROUP_ENABLED o l'attributo SE_GROUP_USE_FOR_DENY_ONLY impostato per essere considerato una corrispondenza.
La matrice SidArray può contenere stringhe SID (ad esempio, "S-1-5-6") o alias SID (ad esempio, "BA"

Attributi

Un attributo rappresenta un elemento nella matrice AUTHZ_SECURITY_ATTRIBUTES_INFORMATION nel contesto client. Un nome di attributo può contenere qualsiasi carattere alfanumerico e qualsiasi carattere ":", "/", "." e "_".

Un valore di attributo può essere uno dei tipi seguenti.

Tipo di valore Descrizione
Intero
Intero a 64 bit nella notazione decimale o esadecimale.
String
Valore stringa delimitato da virgolette.
SID
SID(S-1-1-0) o SID(BA). Deve essere su RHS di Member_of o Device_Member_of.
BLOB
# seguito da numeri esadecimali. Se la lunghezza dei numeri è dispari, il valore # viene convertito in 0 per renderlo pari. Anche un oggetto # visualizzato altrove nel valore viene convertito in 0.

Operatori

Gli operatori seguenti vengono definiti per l'uso nelle espressioni condizionali per testare i valori degli attributi. Tutti questi sono operatori binari e usati nel formato AttributeName Operator Value.

Operatore Descrizione
==
Definizione convenzionale.
!=
Definizione convenzionale.
<
Definizione convenzionale.
<=
Definizione convenzionale.
>
Definizione convenzionale.
>=
Definizione convenzionale.
Contiene
TRUE se il valore dell'attributo specificato è un superset del valore specificato; in caso contrario, FALSE.
Any_of
TRUE se il valore specificato è un superset del valore dell'attributo specificato; in caso contrario, FALSE.

Inoltre, gli operatori unari Esistono, Member_of e negazione (!) vengono definiti come descritto nella tabella Espressioni condizionali.

L'operatore "Contains" deve essere preceduto e seguito da spazi vuoti e l'operatore "Any_of" deve essere preceduto da spazi vuoti.

Ordine di precedenza degli operatori

Gli operatori vengono valutati nell'ordine di precedenza seguente, con operazioni di uguale precedenza valutate da sinistra a destra.

  1. Esiste, Member_of
  2. Contiene, Any_of
  3. ==, !=, <, <=, >, >=
  4. !
  5. &&
  6. ||

Inoltre, qualsiasi parte di un'espressione condizionale può essere racchiusa tra parentesi. Le espressioni racchiuse tra parentesi vengono valutate per prime.

Valori sconosciuti

I risultati delle espressioni condizionali a volte restituiscono un valore Sconosciuto. Ad esempio, una delle operazioni relazionali restituisce Unknown quando l'attributo specificato non esiste.

Nella tabella seguente vengono descritti i risultati di un'operazione AND logica tra due espressioni condizionali, ConditionalExpression1 e ConditionalExpression2.

ConditionalExpression1 ConditionalExpression2 ConditionalExpression1 && ConditionalExpression2
TRUE
TRUE
TRUE
TRUE
FALSE
FALSE
TRUE
SCONOSCIUTO
SCONOSCIUTO
FALSE
TRUE
FALSE
FALSE
FALSE
FALSE
FALSE
SCONOSCIUTO
FALSE
SCONOSCIUTO
TRUE
SCONOSCIUTO
SCONOSCIUTO
FALSE
FALSE
SCONOSCIUTO
SCONOSCIUTO
SCONOSCIUTO

Nella tabella seguente vengono descritti i risultati di un'operazione OR logica tra due espressioni condizionali, ConditionalExpression1 e ConditionalExpression2.

ConditionalExpression1 ConditionalExpression2 ConditionalExpression1 || ConditionalExpression2
TRUE
TRUE
TRUE
TRUE
FALSE
TRUE
TRUE
SCONOSCIUTO
TRUE
FALSE
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE
SCONOSCIUTO
SCONOSCIUTO
SCONOSCIUTO
TRUE
TRUE
SCONOSCIUTO
FALSE
SCONOSCIUTO
SCONOSCIUTO
SCONOSCIUTO
SCONOSCIUTO

Anche la negazione di un'espressione condizionale con un valore UNKNOWN è UNKNOWN.

Valutazione ACE condizionale

La tabella seguente descrive il risultato del controllo di accesso di un ace condizionale a seconda della valutazione finale dell'espressione condizionale.

Tipo ACE TRUE FALSE SCONOSCIUTO
Consenti
Consenti
Ignora ACE
Ignora ACE
Nega
Nega
Ignora ACE
Nega

Esempi

Gli esempi seguenti illustrano come i criteri di accesso specificati sono rappresentati da un ace condizionale definito tramite SDDL.

Politica

Consenti esecuzione a tutti se vengono soddisfatte entrambe le condizioni seguenti:

  • Title = PM
  • Divisione = Finanza o Divisione = Vendite

SDDL

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

Politica

Consenti l'esecuzione se uno dei progetti dell'utente si interseca con i progetti del file.

SDDL

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

Politica

Consentire l'accesso in lettura se l'utente ha eseguito l'accesso con una smart card, è un operatore di backup e si connette da un computer con Bitlocker abilitato.

SDDL

D:(XA; ;FR;;; S-1-1-0; (Member_of {SID(Smartcard_SID), SID(BO)} && @Device.Bitlocker))

[MS-DTYP]: Linguaggio di descrizione del descrittore di sicurezza