照合順序

注: 以下の説明が当てはまるのは、互換性ルールの照合が有効になっている場合のみとなります。MLDAP ESM Module のバージョン 2 のデフォルト動作では、新しい規則照合アルゴリズムが使用されます。このアルゴリズムでは、LDAP リポジトリから該当するすべての規則が取得され、最も一致度が高いものから順にそれらがチェックされます。新しいアルゴリズムでは、ワイルドカードのシーケンスを何文字置換すれば要求の名前に一致するかに基づいて照合が行われます。

照合順序によって規則と ACE に優先順位が付与されます。照合順序は、ESM Module が検索しているリテラル文字列 (リソース名またはユーザー/グループ名) がワイルドカード文字列とどれだけ似ているかを測るものです。照合順序は整数値で表され、この値が大きくなるほど類似度が高いとされ、照合項目の優先順位が高くなります。

照合順序は一致したパターンにのみ適用されます。照合しなかったパターンはスキップされ、順位は付与されません。

照合順序はリテラル文字の数と、パターン内の別個のワイルドカード シーケンスの数から算出されます。別個のワイルドカード シーケンスとは、隣接する複数のワイルドカード文字のことで、たとえば "*" と "**" は両方とも 1 シーケンスと見なされます。順位はパターンと照合する名前の長さによって正規化されます。そのため ESM Module は、ユーザー名とグループ名の長さが異なる場合 (通常は異なる) でも、ユーザー ACE とグループ ACE を比較できます。式は次のとおりです:

R = 512 x L / N - W + 1

R は順位の値で、L はパターン内のリテラル文字の数、N は照合する名前の長さ、W はワイルドカード シーケンスの数です。たとえば、"pat" は "p**t**" より上位であり、"p**t**" は "p*" より上位です。"p*" は "*a*" より上位であり、"*a*" は "*" より上位ということになります。

ワイルドカード検索で複数の規則を取得すると、MLDAP ESM Module はこれらの規則を照合順序でソートし、優先順位どおりに規則を処理します。(クエリが解決したときに処理は停止します。詳細については、「リソース規則」を参照してください。)モジュールが ACL 内の ACE を処理しているときに、高い順位の ACE (ユーザーまたはグループの名前により近いほう) が低い順位の ACE をオーバーライドします。

たとえば、"RESOURCE" という名前のリソースへのアクセスを認可するよう求められたモジュールは、"R*" と "R*E" という名前の規則を検出しますが、より高い順位を持つ後の規則を最初に処理します。ユーザー "USER" を認可するときに、"allow:U*:read" と "deny:*:read" という ACE が検出された場合、より高い順位を持つ最初の規則が優先されます。

同一順位の規則または ACE が 2 つ検出された場合、相対的な優先順位は一定ではなく、どちらの規則も有効になる可能性があるため、同順位で競合する規則や ACE は作成しないようにしてください。