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

第 9 章 目錄伺服器群組、角色與 CoS

管理代表使用者的項目除了其資料在目錄中採階層式資料結構之外,通常還需要建立共用屬性值的群組。目錄伺服器透過群組、角色與服務類別 (CoS) 提供進階的項目管理功能。

本章包含下列主題:

關於群組、角色與服務類別

群組、角色與 CoS 定義如下:

目錄伺服器提供根據角色、群組與 CoS 運算屬性值執行搜尋的能力。任何作業中使用的篩選字串可以包含 nsRole 屬性或任何 CoS 定義所產生的屬性。篩選字串也可用以在此屬性值上執行任何比較作業。但是,CoS 運算屬性無法編製索引。因此,與 CoS 產生的屬性相關之任何搜尋,皆可能會消耗大量的時間與記憶體資源。

若要充分利用角色、群組與服務類別所提供的功能,請在目錄部署的規劃階段決定目錄拓樸。如需這些功能及其如何簡化拓樸的說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」中的「Grouping Directory Entries and Managing Attributes」

如需詳細瞭解角色與群組的運作方式,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的第 8 章「Directory Server Groups and Roles」。如需 CoS 的詳細說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的第 9 章「Directory Server Class of Service」

管理群組

群組可讓您產生項目關聯以便於管理。例如,使用群組可讓定義存取控制指令 (ACI) 更加容易。群組定義是特殊的項目,可以在靜態清單中命名這些項目的成員,或提供定義一組動態項目的篩選。

不論群組定義項目的位置為何,群組的可能成員範圍為整個目錄。為了簡化管理,通常會在單一位置儲存所有群組定義項目,該位置通常位於根尾碼下的 ou=Groups

群組可分為靜態群組與動態群組兩種類型。

Procedure建立新的靜態群組

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 使用 ldapmodify 指令建立新的靜態群組。

    例如,若要建立稱為 System Administrators 的新靜態群組並增加一些成員,請使用此指令:


    $ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    dn: cn=System Administrators, ou=Groups, dc=example,dc=com
    cn: System Administrators
    objectclass: top
    objectclass: groupOfNames
    ou: Groups
    member: uid=kvaughan, ou=People, dc=example,dc=com
    member: uid=rdaugherty, ou=People, dc=example,dc=com
    member: uid=hmiller, ou=People, dc=example,dc=com
  2. 檢查是否已建立新群組以及是否已增加成員。

    例如,若要檢查 Kirsten Vaughan 是否在新的 System Administrators 群組中,請鍵入:


    $ ldapsearch -b "dc=example,dc=com" uid=kvaughan isMemberOf
    uid=kvaughan,ou=People,dc=example,dc=com
    isMemberOf: cn=System Administrators, ou=Groups, dc=example,dc=com 
    isMemberOf: cn=HR Managers,ou=groups,dc=example,dc=com

Procedure建立新的動態群組

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

    使用 ldapmodify 指令建立新的動態群組。

    例如,若要建立稱為 Database Administrators 的新動態群組,並增加姓氏為 Jensen 的成員,可使用此指令:


    $ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
    dn: cn=Database Administrators, ou=Groups, dc=example,dc=com
    cn: Database  Administrators
    objectclass: top
    objectclass: groupOfUrls
    ou: Groups
    memberURL: ldap:///dc=example,dc=com??sub?(sn=Jensen)

管理角色

角色是設計供應用程式的使用更加有效且更容易的替代群組機制。雖然角色以類似群組的方式定義與管理,但是每個成員項目所產生的角色屬性會自動表示項目的角色。例如,應用程式可以讀取項目的角色,而不是選取群組並瀏覽成員清單。

角色的範圍預設會限制在所定義範圍的子樹狀結構內。但是,您可以延伸巢式角色的範圍。您可以允許範圍延伸到位於其他子樹狀結構的巢式角色以及包含目錄中任意位置的成員。如需詳細資訊,請參閱延伸角色的範圍巢式角色定義的範例

本節說明如何安全地使用角色,以及如何從指令行管理角色。

安全地使用角色

若要安全地使用角色,必須將存取控制指令 (ACI) 設為保護適當的屬性。例如,使用者 A 擁有管理角色 MR。管理角色相當於靜態群組,經由將 nsRoleDN 屬性增加至項目,明確地指定角色給每個成員項目。已透過指令行使用帳號停用鎖定 MR 角色。亦即,由於該使用者的 nsAccountLock 屬性經運算為 true,因此使用者 A 無法連結至伺服器。但是,假設使用者已連結,並知悉其已因 MR 角色而處於鎖定狀態。如果不存在 ACI 以防止使用者具備寫入存取 nsRoleDN 屬性,使用者可以從其本身的項目移除 nsRoleDN 屬性,並解除鎖定。

若要避免使用者移除 nsRoleDN 屬性,必須套用 ACI。針對篩選的角色,您必須保護能避免使用者修改屬性以放棄篩選的角色之篩選部分。應禁止使用者增加、刪除或修改篩選的角色所用之屬性。同理,如果已運算篩選的屬性值,可以修改篩選的屬性值之所有屬性皆須受到保護。由於巢式角色包含篩選與管理的角色,應針對巢式角色中所含的各角色考量以上幾點。

如需設定安全性 ACI 的詳細指示,請參閱第 6 章, 目錄伺服器存取控制

從指令行管理角色

角色會在 Directory Administrator 可以透過指令行公用程式存取的項目中定義。建立角色之後,可以依下列方式指定成員給角色:

所有角色定義繼承自 LDAPsubentrynsRoleDefinition 物件類別。下列範例顯示各種角色類型特定的其他物件類別與相關屬性。

管理角色定義的範例

若要建立所有行銷人員的角色,請使用下列 ldapmodify 指令:


$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=Marketing,ou=marketing,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsSimpleRoleDefinition
objectclass: nsManagedRoleDefinition
cn: Marketing
description: managed role for marketing staff

請注意,nsManagedRoleDefinition 物件類別繼承自 LDAPsubentrynsRoleDefinitionnsSimpleRoleDefinition 物件類別。

依下列方式更新名為 Bob 的行銷人員項目,以指定角色:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=Bob Arnold,ou=marketing,ou=People,dc=example,dc=com
changetype: modify
add: nsRoleDN
nsRoleDN: cn=Marketing,ou=marketing,ou=People,dc=example,dc=com

nsRoleDN 屬性表示項目為管理角色的成員。管理的角色由角色定義的 DN 所識別。若要讓使用者修改自己的 nsRoleDN 屬性,但不想讓使用者增加或移除 nsManagedDisabledRole,請增加下列 ACI:


aci: (targetattr="nsRoleDN")(targattrfilters="add=nsRoleDN: 
(!(nsRoleDN=cn=AdministratorRole,dc=example,dc=com)), 
del=nsRoleDN:(!(nsRoleDN=cn=nsManagedDisabledRole,dc=example, dc=com)") 
(version3.0;aci "allow mod of nsRoleDN by self except for critical values"; 
allow(write) userdn="ldap:///self";)

篩選角色定義的範例

若要設定行銷經理的篩選角色,且假設所有經理皆有 isManager 屬性,請使用下列 ldapmodify 指令:


$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=ManagerFilter,ou=sales,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsComplexRoleDefinition
objectclass: nsFilteredRoleDefinition
cn: ManagerFilter 
nsRoleFilter: (isManager=True)
Description: filtered role for sales managers

請注意 nsFilteredRoleDefinition 物件類別繼承自 LDAPsubentrynsRoleDefinition nsComplexRoleDefinition 物件類別。nsRoleFilter 屬性會指定尋找 ou=sales 機構中有下屬的所有員工之篩選器,例如:


$ ldapsearch -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - \
 -b "ou=People,dc=example,dc=com" -s sub "(cn=*Fuentes)"
dn: cn=Carla Fuentes,ou=sales,ou=People,dc=example,dc=comcn: Carla Fuentes 
isManager: TRUE...
nsRole: cn=ManagerFilter,ou=sales,ou=People,
dc=example,dc=com

備註 –

篩選角色的篩選字串可以根據任何屬性,CoS 機制產生的運算屬性除外。


當篩選的角色成員為使用者項目時,您可以選擇限制成員增加或移除角色成員的能力。使用 ACI 保護篩選的屬性。

巢式角色定義的範例

位於巢式角色內的角色可使用 nsRoleDN 屬性加以指定。使用下列指令可建立包含上一個範例中所建立的行銷人員與行銷經理角色成員之角色:


$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=MarketingSales,ou=marketing,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsComplexRoleDefinition
objectclass: nsNestedRoleDefinition
cn: MarketingSales
nsRoleDN: cn=ManagerFilter,ou=sales,ou=People,dc=example,dc=com
nsRoleDN: cn=Marketing,ou=marketing,ou=People,dc=example,dc=com
nsRoleScopeDN: ou=sales,ou=People,dc=example,dc=com

請注意,nsNestedRoleDefinition 物件類別繼承自 LDAPsubentrynsRoleDefinitionnsComplexRoleDefinition 物件類別。nsRoleDN 屬性包含行銷管理角色與行銷經理篩選角色的 DN。上一個範例中的兩個使用者 Bob 與 Carla 會是此新巢式角色的成員。

此篩選的範圍包含預設範圍 (篩選所在的子樹狀結構),以及任意 nsRoleScopeDN 屬性值以下的子樹狀結構。在此例中,ManagerFilter 位於 ou=sales,ou=People,dc=example,dc=com 子樹狀結構中。此子樹狀結構必須增加至範圍。

延伸角色的範圍

目錄伺服器提供允許角色的範圍延伸到角色定義項目以外的子樹狀結構之屬性。此單值屬性 nsRoleScopeDN 包含要增加至現有角色的範圍 DN。nsRoleScopeDN 屬性僅能增加至巢式角色。請參閱巢式角色定義的範例

Procedure延伸角色的範圍

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

nsRoleScopeDN 屬性可讓您延伸某個子樹狀結構中的角色範圍,以包含其他子樹狀結構的項目。例如,請想像 example.com 目錄樹狀結構中有兩個主要的子樹狀結構:o=eng,dc=example,dc=com (工程部門子樹狀結構) 與 o=sales,dc=example,dc=com (行銷部門子樹狀結構)。在工程部門子樹狀結構中,有某個使用者需要存取行銷部門子樹狀結構中的角色 (SalesAppManagedRole) 所管理之行銷部門應用程式。若要延伸角色範圍,請執行下列作業:

  1. 在工程部門子樹狀結構中建立使用者的角色。

    例如,建立角色 EngineerManagedRole。此範例使用管理的角色,不過也有可能是篩選的角色或巢式角色。

  2. 例如,在行銷部門子樹狀結構中建立巢式角色 SalesAppPlusEngNestedRole,以裝載新建立的 EngineerManagedRole 與初始 SalesAppManagedRole

  3. 使用要增加的工程部門子樹狀結構範圍 DN,將 nsRoleScopeDN 屬性增加至 SalesAppPlusEngNestedRole, 在此例中為 o=eng,dc=example,dc=com

    工程部門的使用者必須具備必要的權限,才能存取 SalesAppPlusEngNestedRole 角色,進而使用行銷部門的應用程式。此外還必須複寫整個角色範圍。


    備註 –

    對巢式角色延伸範圍的限制,表示之前是某一個網域中管理角色的管理員,僅有權使用已在另一個網域存在的角色。管理員無法在另一個網域中建立任意的角色。


服務類別

服務類別 (CoS) 機制產生運算屬性的方式,如同為用戶端應用程式擷取項目一般,因而簡化了項目管理並可降低儲存需求。CoS 機制允許在項目之間共用屬性,且如同群組與角色,CoS 依賴輔助程式項目。

如需有關如何在部署中使用 CoS 的說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Deployment Planning Guide」中的「Managing Attributes With Class of Service」

如需 CoS 如何在目錄伺服器中執行的說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的第 9 章「Directory Server Class of Service」


備註 –

任何搜尋作業皆可測試是否存在 CoS 產生的屬性或比較屬性的值。運算屬性的名稱可能會用在來自用戶端搜尋作業的任何篩選字串中,篩選角色中所用的內部篩選除外。


安全地使用 CoS

下列幾節說明每個 CoS 項目資料的讀取與寫入保護之一般原則。定義個別存取控制指令 (ACI) 的詳細程序如第 6 章, 目錄伺服器存取控制中所述。

保護 CoS 定義項目

雖然 CoS 定義項目不包含所產生屬性的值,但會提供尋找該值的資訊。讀取 CoS 定義項目可指出如何尋找包含該值的範本項目。寫入此項目會修改運算屬性的產生方式。

因此您應為 CoS 定義項目定義讀取與寫入 ACI。

保護 CoS 範本項目

CoS 範本項目包含產生的 CoS 屬性值。因此,範本中的 CoS 屬性至少必須受到 ACI 的讀取與更新保護。

保護 CoS 的目標項目

在 CoS 定義的範圍中,所有會為其產生 CoS 運算屬性的項目,皆會參與計算屬性值。

若是在目標項目中已存在 CoS 屬性,CoS 機制預設不會覆寫此值。若不想要此運作方式,請定義 CoS 會覆寫目標項目,或保護所有潛在目標項目中的 CoS 屬性。

間接與類別 CoS 也依賴於目標項目中的限定符號屬性。此屬性會指定要使用的範本項目 DN 或 RDN。您應使用 ACI 在 CoS 的整個範圍內保護此屬性,或在需要保護的個別目標項目上保護此屬性。

保護其他相依性

運算的 CoS 屬性可以根據其他產生的 CoS 屬性與角色進行定義。您必須瞭解並保護這些相依性,以確保運算的 CoS 屬性受到保護。

例如,目標項目中的 CoS 限定符號屬性可能是 nsRole。因此,角色定義必須也受到 ACI 保護。

計算運算屬性值的過程中所包含的任何屬性或項目,一般應會有 ACI 控制讀取與寫入存取。因此,應完善規劃或簡化複合相依性,以降低後續存取控制實作的複雜度。將其他運算屬性上的相依性降至最小,能改善目錄效能並減少維護作業。

從指令行管理 CoS

由於所有配置資訊與範本資料皆會儲存為目錄中的項目,因此您可以使用 LDAP 指令行工具配置並管理 CoS 定義。本節顯示如何從指令行建立 CoS 定義項目與 CoS 範本項目。

從指令行建立 CoS 定義項目

所有 CoS 定義項目皆有 LDAPsubentry 物件類別,且皆繼承自 cosSuperDefinition 物件類別。此外,每種 CoS 類型皆繼承自特定物件類別並包含對應的屬性。下表列出與各種 CoS 定義項目類型相關的物件類別與屬性。

表 9–1 CoS 定義項目中的物件類別與屬性

CoS 類型 

CoS 定義項目 

指標 CoS 

objectclass: top

objectclass: LDAPsubentry

objectclass: cosSuperDefinition

objectclass: cosPointerDefinition

cosTemplateDN: DN

cosAttribute: attributeName override merge

間接 CoS 

objectclass: top

objectclass: LDAPsubentry

objectclass: cosSuperDefinition

objectclass: cosIndirectDefinition

cosIndirectSpecifier: attributeName

cosAttribute: attributeName override merge

類別 CoS 

objectclass: top

objectclass: LDAPsubentry

objectclass: cosSuperDefinition

objectclass: cosClassicDefinition

cosTemplateDN: DN

cosSpecifier: attributeName

cosAttribute: attributeName override merge

cosAttribute 一律為多值。各值會定義 CoS 機制所產生的一個屬性。

您可以使用 CoS 定義項目中的下列屬性。如需有關各屬性的更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Man Page Reference」中的個別屬性。

表 9–2 CoS 定義項目屬性

屬性 

CoS 定義項目內的用途 

cosAttribute

attributeName override merge

定義要產生值的運算屬性名稱。此屬性為多值,每個值代表其值會從範本產生的屬性名稱。overridemerge 限定元指定在此表之後所述的特殊案例中,CoS 屬性值的運算方式。

attributeName 無法包含任何子類型。含子類型的屬性名稱會遭忽略,不過仍會處理 cosAttribute 的其他值。

cosIndirectSpecifier

attributeName

定義目標項目中的屬性名稱,間接 CoS 會使用其值識別範本項目。已命名的屬性稱為限定符號,必須包含每個目標項目中完整的 DN 字串。此屬性為單值,但是 attributeName 可以是多值,以定義多個範本。

cosSpecifier

attributeName

定義目標項目中的屬性名稱,類別 CoS 會使用其值識別範本項目。已命名的屬性稱為限定符號,且必須包含範本項目的 RDN 中可以找到的字串。此屬性為單值,但是 attributeName 可以是多值,以定義多個範本。

cosTemplateDN

DN

提供範本項目的完整 DN 給指標 CoS 定義,或提供範本項目的基底 DN 給類別 CoS。此屬性為單值。 

cosAttribute 屬性允許 CoS 屬性名稱之後有兩個限定元:override 限定元與 merge 限定元。

override 限定元說明 CoS 動態產生的屬性已實際存在於項目中時的運作方式。override 限定元可以是下列其中之一:

merge 限定元不存在或為 merge-schemes。此限定元允許運算的 CoS 屬性可為來自多個範本或多個 CoS 定義的多重值。如需更多資訊,請參閱多值 CoS 屬性

覆寫實際屬性值

您可能依下列方式建立包含 override 限定元的指標 CoS 定義項目:


dn: cn=pointerCoS,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosPointerDefinition
cosTemplateDn: cn=exampleUS,cn=data
cosAttribute: postalCode override

此指標 CoS 定義項目表示項目與產生 postalCode 屬性值的範本項目 cn=exampleUS,cn=data 相關。override 限定元表示如果目標項目內存在 postalCode 屬性,則此值會取代屬性值。


備註 –

如果使用 operationaloverride 限定元定義 CoS 屬性,則無法在 CoS 範圍內任何項目中的屬性「實際」值上執行寫入作業。


多值 CoS 屬性

指定 merge-schemes 限定元時,產生的 CoS 屬性的多值情況有下列兩種:

這兩種情況可同時發生,並定義更多值。但是在所有情況下,重複的值僅會在產生的屬性中一次傳回。

如果沒有 merge-schemes 限定元,會使用範本項目的 cosPriority 屬性,為產生的屬性決定所有範本之間的單一值。此範例會在下一節中說明。

merge-schemes 限定元永遠不會合併在目標中以範本產生的值所定義之「實際」值。merge 限定元與 override 限定元無關。所有配對皆有可能,且可進行各配對的運作方式。此外,限定元可以在屬性名稱之後以任何順序指定。


備註 –

同一屬性有多個 CoS 定義時,所有定義皆必須有相同的 overridemerge 限定元。當 CoS 定義中有不同的成對之限定元時,會任意從所有定義選取其中一個組合。


CoS 屬性優先權

如果存在多重 CoS 定義或多值限定符號,但沒有 merge-schemes 限定元,目錄伺服器會使用優先權屬性選取定義運算屬性的單一值之單一範本。

cosPriority 屬性代表所有考量中範本之特定範本的全域優先權。優先權零是最高優先權。沒有 cosPriority 屬性的範本會視為最低的優先權。當兩個以上的範本提供一個屬性值,但有相同的優先權或沒有優先權時,會隨意選擇值。

使用 merge-schemes 限定元時不會考量範本優先權。合併時,所有考量的範本會定義一個值,而不管範本定義的優先權。如下節中所述,會在 CoS 範本項目上定義 cosPriority 屬性。


備註 –

cosPriority 屬性不得有負值。此外,間接 CoS 產生的屬性不支援優先權。請勿在間接 CoS 定義的範本項目中使用 cosPriority


從指令行建立 CoS 範本項目

使用指標 CoS 或類別 CoS 時,範本項目會包含 LDAPsubentrycosTemplate 物件類別。必須特別針對 CoS 定義建立此項目。將 CoS 範本項目做為 LDAPsubentry 物件類別的實例,可不受配置項目的影響而執行一般的搜尋。

間接 CoS 機制的範本為目錄中任意的現有項目。目標不需要提前識別或提供 LDAPsubentry 物件類別,但是目標必須有輔助 cosTemplate 物件類別。只有在 CoS 評估為產生運算屬性與其值時,才需存取間接 CoS 範本。

在所有情況下,CoS 範本項目必須包含目標項目上 CoS 所產生的屬性與值。屬性名稱指定於 CoS 定義項目的 cosAttribute 屬性中。

下列範例顯示產生 postalCode 屬性的指標 CoS 最高優先權之範本項目:


dn: cn=ZipTemplate,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: extensibleobject
objectclass: cosTemplate
postalCode: 95054
cosPriority: 0

下節提供範本項目範例,以及各種 CoS 定義項目類型的範例。

指標 CoS 的範例

下列指令會建立具有 cosPointerDefinition 物件類別的指標 CoS 定義。此定義項目使用上節範例中陳述的 CoS 範本項目,以在 ou=People,dc=example,dc=com 樹狀結構的所有項目之間共用郵遞區號。


$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=pointerCoS,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosPointerDefinition
cosTemplateDn: cn=ZipTemplate,ou=People,dc=example,dc=com
cosAttribute: postalCode

CoS 範本項目 (cn=ZipTemplate,ou=People,dc=example,dc=com) 會提供儲存在其 postalCode 屬性中的值,給所有位於 ou=People,dc=example,dc=com 尾碼下的項目。如果搜尋相同子樹狀結構中沒有郵遞區號的任何項目,則會看到產生的屬性值:


$ ldapsearch -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - \
 -b "ou=People,dc=example,dc=com" -s sub "(cn=*Jensen)"
dn: cn=Babs Jensen,ou=People,dc=example,dc=com
cn: Babs Jensen
...
postalCode: 95054

間接 CoS 的範例

間接 CoS 會命名 cosIndirectSpecifier 屬性中的一項屬性,以找出每個目標特定的範本。間接 CoS 的範本項目可以是目錄中的任何項目,包含其他使用者項目。此間接 CoS 範例使用目標項目的 manager 屬性識別 CoS 範本項目。範本項目是經理的使用者項目。經理的使用者項目包含要產生的屬性值。在此案例中為 departmentNumber 的值。

下列指令會建立間接 CoS 定義項目,包含 cosIndirectDefinition 物件類別:


$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=generateDeptNum,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosIndirectDefinition
cosIndirectSpecifier: manager
cosAttribute: departmentNumber

接著,將 cosTemplate 物件類別增加至範本項目中,並確定這些項目會定義要產生的屬性。在此範例中,所有經理項目皆為範本:


$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=Carla Fuentes,ou=People,dc=example,dc=com
changetype: modify
add: objectclass
objectclass: cosTemplate
-
add: departmentNumber
departmentNumber: 318842

在此 CoS 中,包含 manager 屬性的目標項目 (ou=People,dc=example,dc=com 下的項目) 自動會有其經理的部門號碼。由於伺服器沒有 departmentNumber 屬性,因此會在目標項目上運算該屬性。但是,departmentNumber 屬性會以目標項目的一部分傳回。例如,如果 Babs Jensen 的經理定義為 Carla Fuentes,其部門號碼如下所示:


$ ldapsearch -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - \
 -b "ou=People,dc=example,dc=com" -s sub "(cn=*Jensen)"
dn: cn=Babs Jensen,ou=People,dc=example,dc=com
cn: Babs Jensen
...
manager: cn=Carla Fuentes,ou=People,dc=example,dc=com
departmentNumber: 318842

類別 CoS 的範例

此範例顯示如何使用類別 CoS 產生郵寄地址。產生的值指定於由 CoS 定義中 cosTemplateDN 與目標項目中 cosSpecifier 之組合,所指定之位置的範本項目內。下列指令使用 cosClassicDefinition 物件類別建立定義項目:


$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: cn=classicCoS,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosClassicDefinition
cosTemplateDn: ou=People,dc=example,dc=com
cosSpecifier: building
cosAttribute: postalAddress

使用相同的指令,建立提供每棟大樓的郵寄地址之範本項目:


dn: cn=B07,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: extensibleobject
objectclass: cosTemplate
postalAddres: 7 Old Oak Street, Anytown, CA 95054

在此 CoS 中,包含 building 屬性的目標項目 (ou=People,dc=example,dc=com 下的項目) 自動會有對應的郵寄地址。CoS 機制會搜尋其 RDN 中有限定符號屬性值的範本項目。在此範例中,如果 Babs Jensen 指定給大樓 B07,會產生如下的郵寄地址:


$ ldapsearch -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - \
 -b "ou=People,dc=example,dc=com" -s sub "(cn=*Jensen)"
dn: cn=Babs Jensen,ou=People,dc=example,dc=com
cn: Babs Jensen
...
building: B07
postalAddress: 7 Old Oak Street, Anytown, CA 95054

建立角色型屬性

您可以建立類別 CoS 模式,為以項目擁有的角色為基礎之項目,產生項目的屬性值。例如,您可以使用角色型屬性,設定伺服器查詢限制為逐項。

若要建立角色型屬性,請使用 nsRole 屬性做為類別 CoS 的 CoS 定義項目內之 cosSpecifier。由於 nsRole 屬性可以為多值,因此您可以定義有多個可能範本項目的 CoS 模式。若要解決要使用哪個範本項目的模擬兩可之情況,請於 CoS 範本項目中包含 cosPriority 屬性。

例如,您可以建立 CoS,允許經理角色的成員超過標準電子信箱配額。經理角色如下:


dn: cn=ManagerRole,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: nsRoleDefinition
objectclass: nsComplexRoleDefinition
objectclass: nsFilteredRoleDefinition
cn: ManagerRole
nsRoleFilter: (isManager=True)
Description: filtered role for managers

依下列方式建立類別 CoS 定義項目:


dn: cn=generateManagerQuota,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: cosSuperDefinition
objectclass: cosClassicDefinition
cosTemplateDn: cn=managerCOS,ou=People,dc=example,dc=com
cosSpecifier: nsRole
cosAttribute: mailboxquota override

CoS 範本名稱必須是 cosTemplateDnnsRole 值 (角色的 DN) 的組合。例如︰


dn:cn="cn=ManagerRole,ou=People,dc=example,dc=com",\
 cn=managerCOS,ou=People,dc=example,dc=com
objectclass: top
objectclass: LDAPsubentry
objectclass: extensibleobject
objectclass: cosTemplate
mailboxquota: 1000000

CoS 範本項目提供 mailboxquota 屬性值。override 的其他限定元會通知 CoS 覆寫目標項目中任何現有的 mailboxquota 屬性值。屬於角色成員的目標項目,將具有該角色與 CoS 所產生的運算屬性,例如:


$ ldapsearch -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -\
 -b "ou=People,dc=example,dc=com" -s sub "(cn=*Fuentes)"
dn: cn=Carla Fuentes,ou=People,dc=example,dc=comcn: Carla Fuentes
isManager: TRUE...nsRole: cn=ManagerRole,ou=People,dc=example,dc=com
mailboxquota: 1000000

備註 –

角色項目與 CoS 定義項目應位於目錄樹狀結構中的相同位置,才會在其範圍中具有相同的目標項目。CoS 目標項目也應該位於相同位置,以方便尋找與維護。


監視 CoS 外掛程式

目錄伺服器可讓您監視 CoS 外掛程式的部分功能。CoS 監視屬性儲存在 cn=monitor,cn=Class of Service,cn=plugins,cn=config 項目中。如需此項目下每個屬性的詳細資訊及其提供的資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Man Page Reference」

設定 CoS 記錄

當目錄伺服器強制在多個適用的定義項目間做出任意的區分時,伺服器會記錄警告訊息。這類警告訊息採取此格式:


Definition /defDN1/ and definition /defDN2/ compete to provide attribute
 '/type/' at priority /level/

當目錄伺服器強制在多個可能適用的定義項目間做出任意的區分時,您也可以配置伺服器記錄參考訊息。若要執行此項作業,請將錯誤記錄設為包含來自外掛程式的訊息。


備註 –

由於設定其他記錄層級可能造成記錄負載過大,建議不要在生產伺服器上設定記錄。


這類參考訊息的內容採取下列格式:


Definition /defDN1/ and definition /defDN2/ potentially compete 
to provide attribute '/type/' at priority /level/

您可以接著選擇是否要設定在定義項目上適用的 CoS 優先權,以解決這類 CoS 模擬兩可的情形。

維護參照完整性

參照完整性是確保維持項目之間關係的外掛程式機制。群組成員身份類型等多種屬性類型包含其他項目的 DN。參照完整性可用以確定移除項目時,也會移除所有包含其 DN 的屬性。

例如,如果從目錄移除使用者項目並啟用參照完整性,伺服器也會從使用者為其成員的任何群組中移除該使用者。如果未啟用參照完整性,管理員必須手動從群組移除使用者。此為整合目錄伺服器與其他依賴使用者與群組管理目錄的 Sun Java System 產品之重要功能。

參照完整性的運作方式

啟用參照完整性外掛程式時,會在刪除、重新命名或移動作業之後,立即在特定屬性上執行完整性更新。預設會停用參照完整性外掛程式。

只要刪除、重新命名或移動目錄中的使用者或群組項目,該作業便會記錄至參照完整性記錄檔:

instance-path/logs/referint

在稱為更新間隔的指定時間過後,伺服器會在啟用參照完整性的所有屬性上執行搜尋,並將該搜尋所產生的項目與記錄檔中已刪除或修改的項目 DN 進行比較。如果記錄檔顯示項目已經刪除,也會刪除對應的屬性。如果記錄檔顯示項目已經變更,也會據以修改對應的屬性值。

參照完整性外掛程式的預設配置已啟用時,會在刪除、重新命名或移動作業之後,立即在 memberuniquememberownerseeAlsonsroledn 屬性上執行完整性更新。不過,您可以配置參照完整性外掛程式的運作方式,以符合您的需求。可以配置下列運作方式:

Procedure配置參照完整性外掛程式


備註 –

參照完整性外掛程式使用的所有資料庫內的所有屬性皆必須編製索引。這些索引必須建立於所有資料庫的配置中。啟用回溯變更記錄時,必須編製 cn=changelog 尾碼的索引。如需相關資訊,請參閱第 12 章, 目錄伺服器編製索引


部分限制與在複寫的環境中使用參照完整性外掛程式相關。如需這些限制的清單,請參閱複寫與參照完整性

您可以使用 DSCC 執行此作業。如需有關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。

  1. 請確定已配置所有複本,同時已定義所有複寫協議。

  2. 決定您要維護其參照完整性的屬性集與要在主伺服器上使用的更新間隔。

  3. 在所有主伺服器上,使用相同的屬性集與更新間隔來啟用參照完整性外掛程式。

    • 若要定義參照完整性的屬性,請使用此指令:


      $ dsconf set-server-prop -h host -p port ref-integrity-attr:attribute-name
      
    • 若要定義參照完整性的更新間隔,請使用此指令:


      $ dsconf set-server-prop -h host -p port ref-integrity-check-delay:duration
      
    • 若要啟用參照完整性,請使用此指令:


      $ dsconf set-server-prop -h host -p port ref-integrity-enabled:on
  4. 確認已在所有用戶伺服器上停用參照完整性外掛程式。