Sun Java System Directory Server Enterprise Edition 6.2 管理指南

巨集 ACI 語法

為了簡化本節中的討論,用於提供連結憑證的 ACI 關鍵字 (例如 userdnroledngroupdnuserattr) 總稱為 ACI 的主體。主體可決定套用 ACI 的對象。

下表說明可取代特定 ACI 關鍵字的巨集。

表 6–1 巨集 ACI 關鍵字

巨集 

說明 

ACI 關鍵字 

($dn)

用以在目標中進行比對,以及在主體中直接取代。 

target, targetfilter, userdn, roledn, groupdn, userattr

[$dn]

用以取代在主體的子樹狀結構中使用的多個 RDN。 

targetfilter, userdn, roledn, groupdn, userattr

($attr.attrName)

用以將目標項目中的 attributeName 屬性值取代至主體中。

userdn, roledn, groupdn, userattr

巨集 ACI 關鍵字具有下列限制:

比對目標中的 ($dn)

ACI 目標中的 ($dn) 巨集可將本身與 LDAP 請求預定為目標的項目進行比較,以決定取代值。例如,您的 LDAP 請求將下列項目預定為目標:


cn=all,ou=groups,dc=subdomain1, dc=hostedCompany1,dc=example,dc=com

此外,您具有將目標定義如下的 ACI:


(target="ldap:///ou=Groups,($dn),dc=example,dc=com")

($dn) 巨集與 “dc=subdomain1, dc=hostedCompany1” 相符。因此,此子字串將做為 ACI 主體中的取代值。

取代主體中的 ($dn)

在 ACI 的主體中,($dn) 巨集會由目標中相符的整個子字串所取代。例如:


groupdn="ldap:///cn=DomainAdmins,ou=Groups,($dn),dc=example,dc=com"

主體會變成:


groupdn="ldap:///cn=DomainAdmins,ou=Groups,
 dc=subdomain1,dc=hostedCompany1,dc=example,dc=com"

在巨集展開後,目錄伺服器會在完成一般程序後評估 ACI,以判定是否已授予存取權。


備註 –

使用巨集取代的 ACI 與標準 ACI 不同,它不一定會將存取權授予目標項目的子項。這是因為,當目標為子 DN 時,取代可能不會在主體字串中建立有效的 DN。


取代主體中的 [$dn]

[$dn] 的取代機制與 ($dn) 略有不同。目標資源的 DN 會進行數次檢查,並逐次捨棄最左邊的 RDN 元件,直到找到相符項目為止。

例如,假設您的 LDAP 請求將 cn=all,ou=groups, dc=subdomain1,dc=hostedCompany1,dc=example,dc=com 子樹狀結構預定為目標,並且具有下列 ACI:


aci: (targetattr="*")
 (target="ldap:///ou=Groups,($dn),dc=example,dc=com")
 (version 3.0; acl "Domain access"; allow (read,search)
 groupdn="ldap:///cn=DomainAdmins,ou=Groups,[$dn],
 dc=example,dc=com";)

    伺服器會以下列方式繼續作業,以展開此 ACI:

  1. 伺服器驗證目標中的 ($dn) 確實符合 dc=subdomain1,dc=hostedCompany1

  2. 伺服器將主體中的 [$dn] 取代為 dc=subdomain1,dc=hostedCompany1

    產生的主體為 groupdn="ldap:///cn=DomainAdmins,ou=Groups, dc=subdomain1,dc=hostedCompany1,dc=example,dc=com"。若因連結 DN 為該群組的成員而授予存取權,即會停止巨集展開,並評估 ACI。若連結 DN 不是成員,則會繼續進行程序。

  3. 伺服器將主體中的 [$dn] 取代為 dc=hostedCompany1

    產生的主體為 groupdn="ldap:///cn=DomainAdmins,ou=Groups, dc=hostedCompany1,dc=example,dc=com"。連結 DN 會再次被視為此群組的成員進行測試,若為其成員,則會完整評估 ACI。若連結 DN 不是成員,巨集展開則會停在最後一個具有相符值的 RDN 上,而此 ACI 的 ACI 評估即告完成。

[$dn] 巨集的好處是,它可透過彈性的方式,授予目錄樹狀結構中所有子網域的網域層級管理員存取權。因此,在表示不同網域間的階層式關係時,[$dn] 巨集即可派上用場。

例如,請考量下列 ACI:


aci: (target="ldap:///ou=*,($dn),dc=example,dc=com") (targetattr="*")
(targetfilter=(objectClass=nsManagedDomain)) 
(version 3.0; acl "Domain access"; allow (read,search) groupdn= 
"ldap:///cn=DomainAdmins,ou=Groups,[$dn],dc=example,dc=com";)

ACI 可授予 cn=DomainAdmins,ou=Groups, dc=hostedCompany1,dc=example,dc=com 的成員對 dc=hostedCompany1 下所有子網域的存取權。因此,凡屬於該群組的管理員,即可存取如子樹狀結構 ou=people,dc=subdomain1.1,dc=subdomain1 的項目。

但在此同時,cn=DomainAdmins,ou=Groups, dc=subdomain1.1 的成員將遭拒絕存取 ou=people,dc=subdomain1, dc=hostedCompany1ou=people,dc=hostedCompany1 節點。

($attr.attrName) 的巨集比對

($attr.attrname) 巨集一律用於 DN 的主體部分中。例如,您可以定義下列 roledn


roledn = "ldap:///cn=DomainAdmins,($attr.ou),dc=HostedCompany1,dc=example,dc=com"

現在,假設伺服器收到將下列項目預設為目標的 LDAP 作業:


dn: cn=Babs Jensen,ou=People,dc=HostedCompany1,dc=example,dc=com
cn: Babs Jensen
sn: Jensen
ou: Sales
...

為評估 ACI 的 roledn 部分,伺服器會讀取目標項目中所儲存的 ou 屬性值。接著,伺服器會在主體中取代此值,以展開巨集。在此範例中,roledn 會展開如下:


roledn = "ldap:///cn=DomainAdmins,ou=Sales,dc=HostedCompany1,dc=example,dc=com"

然後,目錄伺服器會根據一般 ACI 評估演算法進行 ACI 的評估。

若巨集中的已命名屬性為多值屬性,則會依序使用每個值展開巨集。會採用第一個產生成功比對的值。