條件式 ACE 的安全性描述元定義語言
條件 式存取控制專案 (ACE) 允許在執行存取檢查時評估存取條件。 安全性描述元定義語言 (SDDL) 提供以字串格式定義條件式 ACE 的語法。
條件式 ACE 的 SDDL 與任何 ACE 相同,且附加至 ACE 字串結尾的條件語句語法。 如需 SDDL 的相關信息,請參閱 安全性描述元定義語言。
“#” 符號與資源屬性中的 “0” 同義字。 例如,D:AI(XA;OICI;FA;;;白矮星;(OctetStringType==#1#2#3##))相當於並解譯為 D:AI(XA;OICI;FA;;;白矮星;(OctetStringType==#01020300))。
條件式 ACE 字串格式
安全性描述元字串中的每個 ACE 都會以括弧括住。 ACE 的欄位順序如下,並以分號分隔(;)。
AceType**;AceFlags;權利;ObjectGuid;InheritObjectGuid;AccountSid;(ConditionalExpression)**
欄位如 ACE 字串中所述,但有下列例外狀況。
AceType 欄位可以是下列其中一個字串。
ACE 類型字串 Sddl.h 中的常數 AceType 值 “XA” SDDL_CALLBACK_ACCESS_ALLOWED ACCESS_ALLOWED_CALLBACK_ACE_TYPE “XD” SDDL_CALLBACK_ACCESS_DENIED ACCESS_DENIED_CALLBACK_ACE_TYPE ACE 字串包含一或多個條件表達式,以括弧括在字串結尾。
條件運算式
條件表達式可以包含下列任一元素。
運算式元素 | 描述 |
---|---|
AttributeName |
測試指定的屬性是否具有非零值。 |
exists AttributeName |
測試指定的屬性是否存在於客戶端內容中。 |
AttributeName 運算子值 |
傳回指定作業的結果。 |
ConditionalExpression**||**ConditionalExpression |
測試指定的條件表示式是否為 true。 |
ConditionalExpression && ConditionalExpression |
測試兩個指定的條件表示式是否為 true。 |
!(ConditionalExpression) |
條件表達式的反函數。 |
Member_of{SidArray} |
測試客戶端內容的SID_AND_ATTRIBUTES陣列是否包含 SidArray 所指定逗號分隔清單中的所有安全性識別碼 (SID)。 針對 [允許 ACE],用戶端內容 SID 必須設定 SE_GROUP_ENABLED 屬性才能視為相符專案。 針對拒絕 ACE,用戶端內容 SID 必須具有SE_GROUP_ENABLED或SE_GROUP_USE_FOR_DENY_ONLY屬性設定為相符專案。 SidArray 陣列可以包含 SID 字串(例如“S-1-5-6”) 或 SID 別名(例如“BA” |
屬性
屬性代表用戶端內容中 AUTHZ_SECURITY_ATTRIBUTES_INFORMATION 數位中的專案。 屬性名稱可以包含任何英數位元和任何字元 “:”、“/”、“.” 和 “_”。
屬性值可以是下列任何類型。
值類型 | 描述 |
---|---|
整數 |
十進位或十六進位表示法中的64位整數。 |
String |
以引號分隔的字串值。 |
SID |
SID(S-1-1-0) 或 SID(BA)。 必須位於Member_of或Device_Member_of的 RHS 上。 |
BLOB |
#后面接着十六进制数字。 如果數字的長度是奇數,則 # 會轉譯為 0,使其偶數也一樣。 此外,值中其他地方出現的 # 也會轉譯為 0。 |
操作員
定義下列運算符以用於條件表達式,以測試屬性值。 所有這些運算子都是二進位運算元,並用於 AttributeName 運算子值格式。
Operator | 描述 |
---|---|
== |
傳統定義。 |
!= |
傳統定義。 |
< |
傳統定義。 |
<= |
傳統定義。 |
> |
傳統定義。 |
>= |
傳統定義。 |
包含 |
如果指定屬性的值是指定值的超集,則為TRUE , 否則為 FALSE。 |
Any_of |
如果指定的值是指定之屬性值的超集,則為TRUE , 否則為 FALSE。 |
此外,一元運算符 Exists、Member_of和否定 (!) 的定義如條件表達式數據表中所述。
“Contains” 運算符前面必須加上空格符,且 “Any_of” 運算符前面必須加上空格符。
運算子優先順序
運算子的評估順序如下,從左至右評估優先順序相等的作業。
- 存在,Member_of
- 包含、Any_of
- ==、!=、、<=、>>= <
- !
- &&
- ||
此外,條件表達式的任何部分都可以以括弧括住。 括弧內的表達式會先評估。
未知的值
條件表達式的結果有時會傳回 Unknown 的值。 例如,當指定的屬性不存在時,任何關係型作業會傳回 Unknown 。
下表描述兩個條件表達式 ConditionalExpression1 和 ConditionalExpression2 之間邏輯 AND 作業的結果。
ConditionalExpression1 | ConditionalExpression2 | ConditionalExpression1 && ConditionalExpression2 |
---|---|---|
TRUE |
TRUE |
TRUE |
TRUE |
假 |
FALSE |
TRUE |
UNKNOWN |
UNKNOWN |
假 |
TRUE |
假 |
假 |
假 |
假 |
假 |
UNKNOWN |
假 |
UNKNOWN |
TRUE |
UNKNOWN |
UNKNOWN |
FALSE |
假 |
UNKNOWN |
UNKNOWN |
UNKNOWN |
下表描述兩個條件表達式 ConditionalExpression1 和 ConditionalExpression2 之間邏輯 OR 作業的結果。
ConditionalExpression1 | ConditionalExpression2 | ConditionalExpression1 || ConditionalExpression2 |
---|---|---|
TRUE |
TRUE |
TRUE |
TRUE |
FALSE |
TRUE |
TRUE |
UNKNOWN |
TRUE |
FALSE |
TRUE |
TRUE |
假 |
假 |
假 |
假 |
UNKNOWN |
UNKNOWN |
UNKNOWN |
TRUE |
TRUE |
UNKNOWN |
假 |
UNKNOWN |
UNKNOWN |
UNKNOWN |
UNKNOWN |
具有 UNKNOWN 值的條件表達式否定也是 UNKNOWN。
條件式 ACE 評估
下表描述條件式 ACE 的存取檢查結果,視條件表達式的最終評估而定。
ACE 類型 | true | FALSE | UNKNOWN |
---|---|---|---|
允許 |
允許 |
忽略 ACE |
忽略 ACE |
拒絕 |
拒絕 |
忽略 ACE |
拒絕 |
範例
下列範例示範如何使用 SDDL 所定義的條件式 ACE 來表示指定的存取原則。
-
政策
-
如果符合下列兩個條件,請允許對所有人執行:
- 標題 = PM
- 部門 = 財務或部門 = 銷售
-
SDDL
-
D:(XA; ; ;外匯;;;S-1-1-0;(@User.Title==“PM” && (@User.Division==“Finance” || @User.Division ==“ Sales”))
-
政策
-
如果任一使用者的專案與檔案專案交集,則允許執行。
-
SDDL
-
D:(XA; ; ;外匯;;;S-1-1-0;(@User.Project Any_of @Resource.Project))
-
政策
-
如果使用者已使用智慧卡登入、是備份操作員,而且是從已啟用 Bitlocker 的電腦連線,則允許讀取存取。
-
SDDL
-
D:(XA; ;FR;;; ;S-1-1-0;(Member_of {SID(Smartcard_SID), SID(BO)} & @Device.Bitlocker))