条件付き ACL のセキュリティ記述子定義言語

条件付き アクセス制御エントリ (ACE) を使用すると、アクセスチェックの実行時にアクセス条件を評価できます。 セキュリティ記述子定義言語 (SDDL) は、文字列形式で条件付き AES を定義するための構文を提供します。

条件付き ACE の SDDL は ACE の場合と同じで、条件ステートメントの構文が ACE 文字列の末尾に追加されます。 SDDL の詳細については、「セキュリティ記述子定義 言語」を参照してください

"" # 記号は、リソース属性の "0" と同義です。 たとえば、D:AI(XA;OICI;FA;;;WD;(OctetStringType== # 1 # 2 3 )) は と等価であり # # # 、D:AI(XA;OICI;FA;;; と解釈されます。WD;(OctetStringType== # 01020300))。

条件付き ACE 文字列形式

セキュリティ記述子文字列内 の各 ACE はかっこで囲まれます。 ACE のフィールドは次の順序で、セミコロンで区切;)。

AceType**;**AceFlags;権限;ObjectGuid;InheritObjectGuid;AccountSid;(ConditionalExpression)

フィールドは「ACE 文字列」で説明 されているとおりですが、次の例外があります。

  • AceType フィールド には、次のいずれかの文字列を指定できます。

    ACE 型の文字列 Sddl.h の定数 AceType 値
    "XA"
    SDDL _ コールバック _ アクセス _ が許可される
    ACCESS _ ALLOWED _ CALLBACK _ ACE _ TYPE
    "XD"
    SDDL _ コールバック _ アクセス _ が拒否されました
    アクセス _ 拒否コールバック _ _ ACE _ 型
  • ACE 文字列には、文字列の末尾にかっこで囲まれた 1 つ以上の条件式が含まれています。

条件式

条件式には、次の要素を含めできます。

式の要素 説明
AttributeName
指定した属性に 0 以外の値が含されているかどうかをテストします。
exists AttributeName
指定した属性がクライアント コンテキストに存在するかどうかをテストします。
AttributeName 演算子**の値
指定した操作の結果を返します。
ConditionalExpression || ConditionalExpression
指定した条件式が true かどうかをテストします。
ConditionalExpression **&&**ConditionalExpression
指定した条件式の両方が true かどうかをテストします。
!(ConditionalExpression)
条件式の逆。
_ {SidArray} の メンバー
クライアント コンテキストの SID および _ _ ATTRIBUTES配列に 、SidArray で指定されたコンマ区切りリスト内のすべてのセキュリティ識別子 (SID) が含まれているかどうかをテストします。
[ALLOW AES]/(AES を許可する)、クライアント コンテキスト SID で、GROUP _ _ ENABLED 属性Standard Editionが一致と見なされる必要があります。
Deny AES の場合、クライアント コンテキスト SID では 、Standard Edition _ GROUP _ ENABLED 属性または Standard Edition GROUP USE FOR DENY _ _ _ _ _ ONLY 属性が一致と見なされる必要があります。
SidArray 配列 には、SID 文字列 (例: "S-1-5-6") または SID エイリアス ("BA" など) を含めできます。

属性

属性は、クライアント コンテキストの AUTHZ _ SECURITY ATTRIBUTES INFORMATION _ _ 配列 内の要素を表します。 属性名には、任意の英数字と、":"、"/"、"."、および " " という任意の文字を含めることができます _ 。

属性値には、次の型を指定できます。

値の型 説明
整数型
10 進数または 16 進数表記の 64 ビット整数。
String
引用符で区切られた文字列値。
SID
SID(S-1-1-0) または SID(BA)。 のメンバーまたはデバイス メンバーの RHS _ 上にある _ 必要 _ があります。
BLOB
# の後に 16 進数が続きます。 数値の長さが奇数の場合、 は 0 に変換され # 、偶数になります。 また、 # 値の他の場所に表示される も 0 に変換されます。

演算子

次の演算子は、属性の値をテストする条件式で使用するために定義されています。 これらはすべて二項演算子であり 、AttributeName 演算子値 の形式で使用されます

演算子 説明
==
従来の定義。
!=
従来の定義。
<
従来の定義。
<=
従来の定義。
>
従来の定義。
>=
従来の定義。
次の値を含む
指定 した属性の値が、指定した値のスーパーセットである場合は TRUE。それ以外の場合は FALSE です
次 _ の任意の
指定 した値が、指定した属性の値のスーパーセットである場合は TRUE。それ以外の場合は FALSE です

さらに、条件式の表で説明されているとおりに、"存在する"、"メンバー"、および "否定" (!) という 1 項 _ 演算子が定義されています。

"Contains" 演算子の前と後に空白を付け、"Any of" 演算子の前に空白を付 _ けなければならない。

演算子の優先順位

演算子は次の優先順位で評価され、同じ優先順位の演算が左から右に評価されます。

  1. 存在 _ 、メンバー
  2. Contains、Any _ of
  3. ==、!=、<、<=、>、>=
  4. !
  5. &&
  6. ||

さらに、条件式の任意の部分をかっこで囲む場合があります。 かっこ内の式が最初に評価されます。

不明な値

条件式の結果は、Unknown の値を返す 場合があります。 たとえば、指定された属性が存在しない場合、リレーショナル操作は Unknown を返します。

次の表では、2 つの条件式 ConditionalExpression1 と ConditionalExpression2 の間の論理 AND 演算の結果について 説明します

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

次の表では、2 つの条件式 ConditionalExpression1 と ConditionalExpression2 の間の論理 OR 演算の結果について 説明します

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

UNKNOWN の値を持つ条件式の 否定も UNKNOWN です

条件付き ACE の評価

次の表では、条件式の最終的な評価に応じて、条件付き ACE のアクセス チェック結果について説明します。

ACE の種類 true FALSE UNKNOWN
Allow
Allow
ACE を無視する
ACE を無視する
拒否
拒否
ACE を無視する
拒否

次の例は、SDDL を使用して定義された条件付き ACE によって指定されたアクセス ポリシーがどのように表されるのか示しています。

ポリシー

次の条件が両方とも満たされている場合は、Everyone に対して実行を許可します。

  • タイトル = PM
  • 部門 = 財務または部門 = 売上

Sddl

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

ポリシー

ユーザーのプロジェクトがファイルのプロジェクトと交差している場合は、実行を許可します。

Sddl

D:(XA; ;FX;;;S-1-1-0;( @User.Project の _ 任意 @Resource.Project )

ポリシー

ユーザーがスマート カードでログインし、バックアップ オペレーターであり、Bitlocker が有効になっているマシンから接続している場合は、読み取りアクセスを許可します。

Sddl

D:(XA; ;FR;;;S-1-1-0;_({SID(Smartcard _ SID)、SID(BO)} && @Device.Bitlocker ))

[MS-DTYP: ] セキュリティ記述子記述言語