服務類別 (CoS) 機制產生運算屬性的方式,如同為用戶端應用程式擷取項目一般,因而簡化了項目管理並可降低儲存需求。CoS 機制允許在項目之間共用屬性,且如同群組與角色,CoS 依賴輔助程式項目。
如需如何在部署中使用 CoS 的說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.2 Deployment Planning Guide」中的「Managing Attributes With Class of Service」。
如需如何在目錄伺服器中執行 CoS 的說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.2 Reference」中的第 9 章「Directory Server Class of Service」。
任何搜尋作業皆可測試是否存在 CoS 產生的屬性或比較屬性的值。運算屬性的名稱可能會用在來自用戶端搜尋作業的任何篩選字串中,篩選角色中所用的內部篩選除外。
下列幾節說明每個 CoS 項目資料的讀取與寫入保護之一般原則。定義個別存取控制指令 (ACI) 的詳細程序如第 6 章, 目錄伺服器存取控制中所述。
雖然 CoS 定義項目不包含所產生屬性的值,但會提供尋找該值的資訊。讀取 CoS 定義項目可指出如何尋找包含該值的範本項目。寫入此項目會修改運算屬性的產生方式。
因此您應為 CoS 定義項目定義讀取與寫入 ACI。
CoS 範本項目包含產生的 CoS 屬性值。因此,範本中的 CoS 屬性至少必須受到 ACI 的讀取與更新保護。
在指標 CoS 的案例中,應禁止重新命名單一範本項目。在大多數情況下,最簡單的做法是保護整個範本項目。
在類別 CoS 案例中,所有範本項目在定義項目中皆指定有共用父系。如果父系項目中僅儲存了範本,則父系項目的存取控制能保護範本。但是,如果父系下的其他項目需要存取,則必須個別保護範本項目。
在間接 CoS 的案例中,範本可以是目錄中的任何項目,包含仍需要進行存取的使用者項目。視需要的不同,您可以控制對整個目錄中 CoS 屬性的存取,或確保 CoS 屬性在每個用為範本的項目中皆安全。
在 CoS 定義的範圍中,所有會為其產生 CoS 運算屬性的項目,皆會參與計算屬性值。
若是在目標項目中已存在 CoS 屬性,CoS 機制預設不會覆寫此值。若不想要此運作方式,請定義 CoS 會覆寫目標項目,或保護所有潛在目標項目中的 CoS 屬性。
間接與類別 CoS 也依賴於目標項目中的限定符號屬性。此屬性會指定要使用的範本項目 DN 或 RDN。您應使用 ACI 在 CoS 的整個範圍內保護此屬性,或在需要保護的個別目標項目上保護此屬性。
運算的 CoS 屬性可以根據其他產生的 CoS 屬性與角色進行定義。您必須瞭解並保護這些相依性,以確保運算的 CoS 屬性受到保護。
例如,目標項目中的 CoS 限定符號屬性可能是 nsRole。因此,角色定義必須也受到 ACI 保護。
計算運算屬性值的過程中所包含的任何屬性或項目,一般應會有 ACI 控制讀取與寫入存取。因此,應完善規劃或簡化複合相依性,以降低後續存取控制實作的複雜度。將其他運算屬性上的相依性降至最小,能改善目錄效能並減少維護作業。
由於所有配置資訊與範本資料皆會儲存為目錄中的項目,因此您可以使用 LDAP 指令行工具配置並管理 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.2 Man Page Reference」中個別屬性的說明。
表 9–2 CoS 定義項目屬性
屬性 |
CoS 定義項目內的用途 |
---|---|
cosAttribute attributeName override merge |
定義要產生值的運算屬性名稱。此屬性為多值,每個值代表其值會從範本產生的屬性名稱。override 與 merge 限定元指定在此表之後所述的特殊案例中,CoS 屬性值的運算方式。 attributeName 無法包含任何子類型。含子類型的屬性名稱會遭忽略,不過仍會處理 cosAttribute 的其他值。 |
cosIndirectSpecifier attributeName |
定義目標項目中的屬性名稱,間接 CoS 會使用其值識別範本項目。已命名的屬性稱為限定符號,必須包含每個目標項目中完整的 DN 字串。此屬性為單值,但是 attributeName 可以是多值,以定義多個範本。 |
cosSpecifier attributeName |
定義目標項目中的屬性名稱,類別 CoS 會使用其值識別範本項目。已命名的屬性稱為限定符號,且必須包含範本項目的 RDN 中可以找到的字串。此屬性為單值,但是 attributeName 可以是多值,以定義多個範本。 |
cosTemplateDN DN |
提供範本項目的完整 DN 給指標 CoS 定義,或提供範本項目的基底 DN 給類別 CoS。此屬性為單值。 |
您無法使用 isMemberOf 屬性做為 CosSpecifier,讓靜態群組的所有成員自動繼承共用運算屬性值。
cosAttribute 屬性允許 CoS 屬性名稱之後跟隨兩個限定元:override 限定元與 merge 限定元。
override 限定元說明 CoS 動態產生的屬性已實際存在於項目中時的運作方式。override 限定元可以是下列其中之一:
default (預設) (或無限定元) - 表示當屬性類型與運算屬性類型相同時,伺服器不會覆寫儲存在項目中的實際屬性值。
operational - 表示只有在搜尋中明確請求時,才會傳回該屬性。操作屬性不需要通過模式檢查便會傳回。operational 限定元的運作方式與 override 限定元相同。
如果屬性在模式中也定義為操作,您僅能有一個操作屬性。例如,如果 CoS 產生 description 屬性的值,由於 description 屬性在模式中未標示為操作屬性,因此您無法使用 operational 限定元。
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 屬性,則此值會取代屬性值。
如果使用 operational 或 override 限定元定義 CoS 屬性,則無法在 CoS 範圍內任何項目中的屬性「實際」值上執行寫入作業。
當您指定 merge-schemes 限定元時,產生的 CoS 屬性可以兩種方式成為多值屬性:
若是間接或類別 CoS,目標項目中的限定符號屬性可以是多值。在此例中,每個值各會決定一個範本,且來自各個範本的該值是產生的值之一部分。
任何類型的多重 CoS 定義項目,可以在其 cosAttribute 中包含相同的屬性名稱。在此例中,如果所有定義包含 merge-schemes 限定元,產生的屬性會包含各個定義所運算的所有值。
這兩種情況可同時發生,並定義更多值。但是在所有情況下,重複的值僅會在產生的屬性中一次傳回。
如果沒有 merge-schemes 限定元,會使用範本項目的 cosPriority 屬性,為產生的屬性決定所有範本之間的單一值。此範例會在下一節中說明。
merge-schemes 限定元永遠不會合併在目標中以範本產生的值所定義之「實際」值。merge 限定元與 override 限定元無關。所有配對皆有可能,且可進行各配對的運作方式。此外,限定元可以在屬性名稱之後以任何順序指定。
同一屬性有多個 CoS 定義時,所有定義皆必須有相同的 override 與 merge 限定元。當 CoS 定義中有不同的成對之限定元時,會任意從所有定義選取其中一個組合。
若有多個 CoS 定義或多值限定符號,但沒有 merge-schemes 限定元,則目錄伺服器會使用優先權屬性選取單一範本,以定義運算屬性的單一值。
cosPriority 屬性表示特定範本在所考慮的所有範本之間的全域優先權。優先權零是最高優先權。沒有 cosPriority 屬性的範本會視為最低的優先權。當兩個以上的範本提供一個屬性值,但有相同的優先權或沒有優先權時,會隨意選擇值。
使用 merge-schemes 限定元時不會考量範本優先權。合併時,所有考量的範本會定義一個值,而不管範本定義的優先權。如下節中所述,會在 CoS 範本項目上定義 cosPriority 屬性。
cosPriority 屬性不得有負值。此外,間接 CoS 產生的屬性不支援優先權。請勿在間接 CoS 定義的範本項目中使用 cosPriority。
使用指標 CoS 或類別 CoS 時,範本項目會包含 LDAPsubentry 與 cosTemplate 物件類別。必須特別針對 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 定義項目類型的範例。
下列指令會建立具有 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 可命名 cosIndirectSpecifier 屬性中的屬性,可找出每個目標特有的範本。間接 CoS 的範本項目可以是目錄中的任何項目,包含其他使用者項目。此間接 CoS 範例使用目標項目的 manager 屬性識別 CoS 範本項目。範本項目是經理的使用者項目。經理的使用者項目包含要產生的屬性值。在此案例中為 departmentNumber 的值。
下列指令建立包含 cosIndirectDefinition 物件類別的間接 CoS 定義項目:
$ 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 定義中的 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 範本名稱必須是 cosTemplateDn 與 nsRole 值 (角色的 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 監視屬性儲存在 cn=monitor,cn=Class of Service,cn=plugins,cn=config 項目中。如需此項目下每個屬性及這些屬性所提供之資訊的詳細說明,請參閱「Sun Java System Directory Server Enterprise Edition 6.2 Man Page Reference」。
當目錄伺服器強制在多個適用的定義項目間做出任意的區分時,伺服器會記錄警告訊息。這類警告訊息採取此格式:
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 模擬兩可的情形。