共用方式為


條件式 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_ENABLEDSE_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” 運算符前面必須加上空格符。

運算子優先順序

運算子的評估順序如下,從左至右評估優先順序相等的作業。

  1. 存在,Member_of
  2. 包含、Any_of
  3. ==、!=、、<=、>>= <
  4. !
  5. &&
  6. ||

此外,條件表達式的任何部分都可以以括弧括住。 括弧內的表達式會先評估。

未知的值

條件表達式的結果有時會傳回 Unknown 的值。 例如,當指定的屬性不存在時,任何關係型作業會傳回 Unknown

下表描述兩個條件表達式 ConditionalExpression1ConditionalExpression2 之間邏輯 AND 作業的結果。

ConditionalExpression1 ConditionalExpression2 ConditionalExpression1 && ConditionalExpression2
TRUE
TRUE
TRUE
TRUE

FALSE
TRUE
UNKNOWN
UNKNOWN

TRUE





UNKNOWN

UNKNOWN
TRUE
UNKNOWN
UNKNOWN
FALSE

UNKNOWN
UNKNOWN
UNKNOWN

下表描述兩個條件表達式 ConditionalExpression1ConditionalExpression2 之間邏輯 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))

[MS-DTYP]: 安全性描述元描述語言