本章將討論如何管理您目錄中的資料項目。其中也將說明如何設定參照以及進行屬性值的加密。
規劃目錄部署時,您必須分門別類目錄所將包含的資料類型。建立項目及修改預設模式之前,請先閱讀「Sun Java System Directory Server Enterprise Edition 6.2 Deployment Planning Guide」中的相關章節。
您必須先定義適當的存取控制指令 (ACI),才能修改您的目錄。如需詳細資訊,請參閱第 6 章, 目錄伺服器存取控制。
本章包含下列主題:
管理項目的最佳方式需視環境而定:
若您在管理方面多半使用 DSCC,而只想搜尋或修改少許項目,請使用 DSCC。如需有關 DSCC 的更多資訊,請參閱目錄服務控制中心介面。
若不對目錄伺服器執行任何管理作業,而只想搜尋或修改少許項目,請使用目錄編輯器。如需有關目錄編輯器的資訊,請參閱「Sun Java System Directory Editor 1 2005Q1 Installation and Configuration Guide」。
若要搜尋或修改大量項目,請使用指令行公用程式 ldapmodify 與 ldapdelete。
DSCC 可讓您檢視項目所有可讀取的屬性並編輯其可寫入的屬性。它也可讓您增加及移除屬性、設定多值屬性,以及管理項目的物件類別。如需有關如何使用 DSCC 管理項目的更多資訊,請參閱 DSCC 線上說明。如需有關 DSCC 的更多一般資訊,請參閱目錄服務控制中心介面。
目錄編輯器是一項易於使用的目錄編輯工具,可供管理員與一般使用者搜尋、建立與編輯資料。這項資料採用使用者、群組與容器的形式。
ldapmodify 與 ldapdelete 指令行公用程式提供完整的功能,可增加、編輯與刪除目錄內容。使用這些公用程式,可讓您管理伺服器的配置項目與使用者項目中的資料。這些公用程式亦可用以寫入程序檔,以執行一或多個目錄的大量管理。
本書中的多項程序皆會用到 ldapmodify 與 ldapdelete 指令。以下幾節將說明執行程序時所需進行的基本作業。如需有關 ldapmodify 與 ldapdelete 指令的更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.2 Reference」。
指令行公用程式的輸入一律用於 LDIF 中,可直接從指令行提供,也可以透過輸入檔提供。下節將提供 LDIF 輸入的相關資訊,而後續幾節將說明每個修改類型的 LDIF 輸入。
如需有關正確格式化 LDIF 輸入的資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.2 Reference」中的「Guidelines for Providing LDIF Input」。
以下幾節將說明這些基本作業:
您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
您可以使用 ldapmodify 的 -a 選項,將一或多個項目增加至目錄。下列範例將建立包含使用者的結構項目,再建立使用者項目:
$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: ou=People,dc=example,dc=com objectclass: top objectclass: organizationalUnit ou: People description: Container for user entries dn: uid=bjensen,ou=People,dc=example,dc=com objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetorgPerson uid: bjensen givenName: Barbara sn: Jensen cn: Babs Jensen telephoneNumber: (408) 555-3922 facsimileTelephoneNumber: (408) 555-4000 mail: bjensen@example.com userPassword: secret |
-D 與 -w 選項分別可為有權建立這些項目的使用者指定連結 DN 與密碼。-a 選項可指定將增加 LDIF 內的所有項目。接著,每個項目會依其 DN 與屬性值列出,每個項目皆會以空行隔開。每個項目在輸入後即由 ldapmodify 公用程式予以建立,且公用程式會報告任何發生的錯誤。
依慣例,項目的 LDIF 會列出下列屬性:
項目的 DN。
物件類別清單。
一或多個命名屬性。此為 DN 中所使用的屬性,並不一定是必要屬性之一。
所有物件類別的必要屬性清單。
您所要納入的任何允許的屬性。
鍵入 userPassword 屬性的值時,請提供純文字形式的密碼。伺服器將為此值加密,並只會儲存加密值。請確實限制讀取權限,以保護 LDIF 檔案中所出現的純文字密碼。
您也可以使用不需在指令行上加入 -a 選項的替代形式 LDIF。此形式的好處是,您可以合併項目增加陳述式與項目修改陳述式,如下範例所示。
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: ou=People,dc=example,dc=com changetype: add objectclass: top objectclass: organizationalUnit ou: People description: Container for user entries dn: uid=bjensen,ou=People,dc=example,dc=com changetype: add objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetorgPerson uid: bjensen givenName: Barbara sn: Jensen cn: Barbara Jensen telephoneNumber: (408) 555-3922 facsimileTelephoneNumber: (408) 555-4000 mail: bjensen@example.com userPassword: secret |
changetype: add 關鍵字表示,具有指定 DN 的項目應以所有後續的屬性建立。其他所有的選項與 LDIF 慣例皆與本節稍早的說明相同。
在這兩個範例中,您都可以使用 -f filename 選項從檔案讀取 LDIF,而不需從終端機輸入讀取。LDIF 檔案所含的格式必須與用於終端機輸入的格式相同,視 -a 選項的使用情形而定。
您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
使用 changetype: modify 關鍵字增加、取代或移除屬性及其位於現有項目中的值。當您指定 changetype: modify 時,必須同時提供一或多個變更作業,以指定項目的修改方式。可用的三個 LDIF 變更作業如下範例所示:
dn: entryDN changetype: modify add: attribute attribute: value... - replace: attribute attribute: newValue... - delete: attribute [attribute: value] ... |
請使用連字符 (-) 隔開同一行中相同項目的作業,並使用空行隔開不同項目的作業群組。您也可以為每個作業指定數個 attribute: value 對。
無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。
下列範例將說明如何使用相同的 add LDIF 語法在現有的多值屬性中增加值,以及在尚不存在的屬性中增加值:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=People,dc=example,dc=com changetype: modify add: cn cn: Babs Jensen - add: mobile mobile: (408) 555-7844 |
若有下列任一情況,此作業即可能失敗,而伺服器將傳回錯誤:
屬性中已有指定的值存在。
值未遵循針對屬性所定義的語法。
項目的物件類別非必要或不允許該屬性類型。
該屬性類型不是多值屬性,同時屬性中已有值存在。
您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
attribute;binary 子類型表示不論屬性值的實際語法為何,這些屬性值皆必須透過 LDAP 以二進位資料傳輸。此子類型適用於不具 LDAP 字串表示法的複雜語法,如 userCertificate。除此用途之外,均不應使用二進位子類型。
與 ldapmodify 指令搭配使用時,可在任何 LDIF 陳述式的屬性名稱中增加適當的子類型。
輸入二進位值時,可以直接以 LDIF 文字鍵入,或從其他檔案中加以讀取。下列範例說明從檔案中加以讀取的 LDIF 語法:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: version: 1 dn: uid=bjensen,ou=People,dc=example,dc=com changetype: modify add: userCertificate;binary userCertificate;binary:< file:///local/cert-file |
若要以 :< 語法指定檔案名稱,必須以行 version:1 做為 LDIF 陳述式的開頭。ldapmodify 在處理此陳述式時,會將屬性設為從指定檔案的所有內容讀取出來的值。
您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
屬性的語言與發音子類型會指定本土化的值。當您指定屬性的語言子類型時,該子類型會以下列形式增加到屬性名稱中:
attribute;lang-CC |
其中,attribute 是現有的屬性類型,而 cc 是用以指定語言的雙字母國碼 (地區碼)。您可以選擇性地增加發音子類型到語言子類型中,以指定音譯的本土化值。此案例中的屬性名稱如下:
attribute;lang-CC;phonetic |
若要對具有子類型的屬性執行作業,必須明確符合其子類型。例如,若要修改具有 lang-fr 語言子類型的屬性值,必須在修改作業中納入 lang-fr,如下所示:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=People,dc=example,dc=com changetype: modify add: homePostalAddress;lang-fr homePostalAddress;lang-fr: 34, rue de la Paix |
若屬性值含有非 ASCII 字元,則必須以 UTF-8 編碼這些字元。
您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
下列範例說明如何使用 LDIF 中的 replace 語法變更屬性的值:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=People,dc=example,dc=com changetype: modify replace: sn sn: Morris - replace: cn cn: Barbara Morris cn: Babs Morris |
指定屬性目前所有的值均會遭移除,而加入所有指定的值。
變更屬性值後,可以使用 ldapsearch 指令驗證變更。
修改屬性值時,請勿不慎在值的結尾留下空格。空格結尾可能會致使值以 base-64 編碼 (如 34xy57eg) 顯示。
屬性值的結尾若為空格,則會將此空格編碼為屬性值的一部分。當您使用 DSCC 或 ldapsearch 指令驗證變更時,所看見的值可能會是純文字,但也可能以 base-64 編碼文字呈現。這取決於您所使用的是哪個目錄伺服器用戶端。
您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
下列範例將說明如何徹底刪除屬性,以及如何僅刪除多值屬性的某個值:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=People,dc=example,dc=com changetype: modify delete: facsimileTelephoneNumber - delete: cn cn: Babs Morris |
僅使用 delete 語法而未指定 attribute: value 對時,屬性中所有的值皆會遭移除。若您指定了 attribute: value 對,則只會移除該值。
您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
若要以 ldapmodify 指令修改多值屬性的某個值,必須執行兩項作業,如下範例所示:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=People,dc=example,dc=com changetype: modify delete: mobile mobile: (408) 555-7845 - add: mobile mobile: (408) 555-5487 |
您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
請使用 ldapdelete 指令行公用程式從目錄中刪除項目。此公用程式可連結至目錄伺服器,並根據項目的 DN 刪除一或多個項目。您必須提供有權刪除指定項目的連結 DN。
您無法刪除具有子項的項目。LDAP 協定不允許子項目無父系的情形。例如,在您刪除所有屬於組織單位的項目之前,都無法刪除組織單位項目。
下列範例將說明組織單位中的一個項目。此項目及其父系項目可依序刪除。
$ ldapdelete -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: uid=bjensen,ou=People,dc=example,dc=com ou=People,dc=example,dc=com |
您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
使用 ldapmodify 公用程式時,也可以使用 changetype: delete 關鍵字刪除項目。使用 ldapdelete 時的所有限制於此時同樣適用,如上一節所述。使用 LDIF 語法刪除項目的好處在於,您可以同一個 LDIF 檔案中執行多種不同的作業。
下列範例將執行與前一範例相同的刪除作業:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - dn: uid=bjensen,ou=People,dc=example,dc=com changetype: delete dn: ou=People,dc=example,dc=com changetype: delete |
您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
您可以使用 ldapsearch 指令行公用程式尋找並擷取目錄項目。請注意,ldapsearch 公用程式不是 Solaris 平台提供的公用程式,而是 Directory Server Resource Kit 的一部份。
如需有關使用 ldapsearch、常用 ldapsearch 選項、已接受的格式及範例的更多資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.2 Reference」。
此程序會使用修改 DN 作業。執行此作業前,請確定您已熟悉使用修改 DN 作業的指示與限制一節。
針對此程序的某些部分,您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。此程序的其他部分只能使用指令行完成。
修改屬於群組 uniquemember 的項目 DN 時,必須啟用參照完整性外掛程式。參照完整性可確保群組成員會隨著項目移動而調整。如需有關如何啟用及配置參照完整性外掛程式的資訊,請參閱配置參照完整性外掛程式。
若要將項目從某父系移至另一個父系,請先擴充父系項目的 ACI 權限。
請在要移動之項目的目前父系項目上使用 allow (export ...) 語法,以確定 ACI 允許 export 作業
請在要移動之項目的未來父系項目上使用 allow (import ...) 語法,以確定 ACI 允許 import 作業
如需有關使用 ACI 的資訊,請參閱第 6 章, 目錄伺服器存取控制。
請確定修改 DN 作業已全域啟用,或至少已針對將受移動作業影響的一或多個尾碼啟用。
為確保與舊目錄伺服器發行版本的相容性,修改 DN 作業預設為不啟用。
若您先前已啟用修改 DN 作業,請跳至下個步驟。
若要全域啟用伺服器的修改 DN 作業,請使用此指令:
$ dsconf set-server-prop -h host -p port moddn-enabled:on |
執行 ldapmodify 指令。
此步驟會使用修改 DN 作業。請執行下列其中一項動作:
移動項目。
例如,下列指令會將項目 uid=bjensen 從包商的子樹狀結構 ou=Contractors,dc=example,dc=com,移至員工的子樹狀結構 ou=People,dc=example,dc=com:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=Contractors,dc=example,dc=com changetype: modrdn newrdn: uid=bjensen deleteoldrdn: 0 newsuperior: ou=People,dc=example,dc=com |
為項目重新命名。
例如,下列指令會將項目 uid=bbjensen 重新命名為 uid=bjensen:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bbjensen,ou=People,dc=example,dc=com changetype: modrdn newrdn: uid=bjensen deleteoldrdn: 1 |
撰寫 LDIF 陳述式時,請留意下列屬性:
dn - 指定要重新命名或移動的項目。
changetype: modrdn - 指定要使用修改 DN 作業。
newrdn - 指定新命名的屬性。
deleteoldrdn - 指定先前的命名屬性是否應從項目中移除 (1 表示是,0 表示否)。
請注意,命名屬性若為項目定義中的必要屬性,即無法從項目中移除。
newsuperior - 指定項目的新上層屬性。
如需有關 ldapmodify 指令及其選項的資訊,請參閱 ldapmodify(1) 線上手冊。
若在移動或重新命名含有大量項目的子樹狀結構時發生資源限制錯誤,請增加資料庫所能使用的鎖定數。
$ dsconf set-server-prop -h host -p port db-lock-count:value |
修改此特性後必須重新啟動伺服器,變更方能生效。
如上一節所述,在使用修改 DN 作業時,請遵循以下幾節所說明的指示。
請勿使用修改 DN 作業將項目從某個尾碼移至其他尾碼,或使用此作業移動根尾碼或將其重新命名。
請確定您所執行的是 Directory Server 5.2 2005Q1 或更高版本。修改 DN 作業無法使用於 Directory Server 5.2 2005Q1 之前的目錄伺服器版本。
請勿於應用程式中使用 entryid 作業屬性,因為此屬性保留僅限內部使用。entryid 屬性在項目移動後可能會變更。
為伺服器上的所有尾碼全域性地啟用修改 DN 作業,或針對要執行此作業的每個尾碼個別啟用。修改 DN 作業預設為停用。
針對要執行修改 DN 作業的每個尾碼,擴充其 ACI 權限。Import 存取權限可讓項目匯入指定的 DN。Export 存取權限可讓項目從指定的 DN 匯出。
執行修改 DN 作業前,請確定此作業不會中斷用戶端認證。若您移動了參照用戶端憑證的項目,用戶端認證即會中斷。移動項目後,請驗證您的憑證。
執行修改 DN 作業前,請確定此作業不會中斷您的應用程式。項目經過重新命名或移動後,可能會影響到數個尾碼,或變更項目的下列特性:
項目的已篩選角色範圍。
項目的巢式角色,此處的巢式角色含有篩選的角色。
項目的動態群組成員身份。
使用修改 DN 作業時若未符合下列需求,將可能導致複寫中斷,而使目錄服務失效。
請確定您的複寫拓樸中所執行的所有伺服器皆為 Directory Server 5.2 或更高版本。您無法在 Directory Server 5.2 之前的目錄伺服器版本上使用修改 DN 作業。
啟用複寫拓樸中所有伺服器的修改 DN 作業。若主伺服器支援修改 DN 作業,但用戶伺服器不支援,複寫即會失敗。供應者伺服器的錯誤記錄中將寫入如下訊息:
Unable to start a replication session with MODDN enabled
若要重新啟動複寫,請重新配置複寫拓樸,以啟用所有伺服器的修改 DN 作業。接著須以下列方式之一啟動複寫階段作業:
依照強制執行複寫更新中的指示進行作業。
藉由變更供應者伺服器的項目。變更即會複寫到用戶伺服器上。
啟用並配置拓樸中所有主伺服器複本的參照完整性外掛程式。此動作可確保伺服器能夠保持群組與角色的參照完整性。如需有關如何啟用及配置參照完整性外掛程式的資訊,請參閱配置參照完整性外掛程式。
執行修改 DN 作業後,請保留時間讓參照完整性外掛程式複寫其變更。
若用戶端應用程式在本機無法得知所應連絡的伺服器,您可以使用參照予以告知。參照是目錄伺服器傳回用戶端以替代結果之遠端尾碼或項目的指標。用戶端必須接著在參照中所命名的遠端伺服器上再次執行此作業。
有三種情況下會執行重新導向:
用戶端應用程式所請求的項目不存在於本機伺服器上,同時該伺服器依配置會傳回預設參照。
整個尾碼已因維護或安全性考量而停用時。
伺服器將會傳回該尾碼所定義的參照。尾碼層級參照的說明請見設定參照並使尾碼成為唯讀模式。當用戶端請求寫入作業時,尾碼的唯讀複本也會傳回參照至主伺服器。
當用戶端特別存取智慧型參照時。
智慧型參照是您所建立的項目。伺服器會傳回智慧型參照所定義的參照。
在任何情況下,參照皆是含有主機名稱、連接埠號與其他伺服器之 DN (選用) 的 LDAP URL。例如,ldap://east.example.com:389。
如需有關如何在目錄部署中使用參照的概念性資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.2 Deployment Planning Guide」。
以下幾節將說明設定目錄預設參照以及建立與定義智慧型參照的程序。
若是用戶端應用程式提交作業所在的 DN 不在目錄伺服器所維護的尾碼上,則會傳回預設參照給用戶端應用程式。伺服器會傳回所有定義的參照,但不會定義其傳回順序。
您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
使用 dsconf 指令行公用程式可設定一或多個預設參照。
$ dsconf set-server-prop -h host -p port suffix-DN referral-url:referral-URL |
例如:
$ dsconf set-server-prop -h host1 -p 1389 dc=example,dc=com \ referral-url:ldap://east.example.com:1389 |
智慧型參照可讓您將目錄項目或目錄樹狀結構對映至特定的 LDAP URL。使用智慧型參照,可讓您將用戶端應用程式納入特定的伺服器或特定伺服器上特定項目的參照。
智慧型參照通常會指向另一部伺服器上具有相同 DN 的實際項目。但您仍可定義相同或不同伺服器上任意項目的智慧型參照。例如,您可以將具有下列 DN 的項目定義為智慧型參照:
uid=bjensen,ou=People,dc=example,dc=com |
智慧型參照會指向伺服器 east.example.com 上的另一個項目:
cn=Babs Jensen,ou=Sales,o=east,dc=example,dc=com |
目錄使用智慧型參照的方式會遵循 RFC 4511 之 4.1.10 小節中所指定的標準 (http://www.ietf.org/rfc/rfc4511.txt)。
您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
若要建立智慧型參照,請使用 referral 與 extensibleObject 物件類別建立項目。
referral 物件類別可讓預期的 ref 屬性包含 LDAP URL。extensibleObject 物件類別可讓您將任何模式屬性用為命名屬性,以符合目標項目。
例如,若要定義下列可傳回智慧型參照的項目,而非項目 uid=bjensen,請使用此指令:
$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=People,dc=example,dc=com objectclass: top objectclass: extensibleObject objectclass: referral uid: bjensen ref: ldap://east.example.com/cn=Babs%20Jensen,ou=Sales,o=east,dc=example,dc=com |
LDAP URL 中任何位於空格之後的資訊均會遭伺服器忽略。因此,在您打算做為參照的任何 LDAP URL 中,所有空格都必須以 %20 取代。其他特殊字元則必須加上引號。
在您定義智慧型參照後,uid=bjensen 項目的修改實際上將對其他伺服器的 cn=Babs Jensen 項目執行。ldapmodify 指令會自動追蹤參照,例如:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=People,dc=example,dc=com changetype: replace replace: telephoneNumber telephoneNumber: (408) 555-1234 |
(可選擇) 若要修改智慧型參照項目,請使用 ldapmodify 的 -M 選項:
$ ldapmodify -M -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w - Enter bind password: dn: uid=bjensen,ou=People,dc=example,dc=com changetype: replace replace: ref ref: ldap://east.example.com/cn=Babs%20Jensen,ou=Marketing,o=east,dc=example,dc=com |
目錄伺服器可讓您在執行下列作業時檢查屬性的完整性:
使用 dsadm import 或 dsconf import 匯入資料。
使用 LDAP 或 DSML 增加項目、修改項目或修改項目的 DN。
檢查可確保屬性值符合 IETF 的建議。所有不符的屬性皆會遭到拒絕,並記錄於錯誤記錄中。記錄訊息包含連線與作業 ID (若適用)。
伺服器預設會自動檢查前述作業的語法。若您關閉語法檢查,請執行下列程序。
語法檢查與模式檢查不同。如需有關模式檢查的資訊,請參閱管理模式檢查。
無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。
伺服器預設會保存新建或已修改之項目的特殊屬性,如 LDAP v3 規格中所指定。這些特殊屬性會儲存在尾碼的項目上,並且包含:
creatorsName — 最初建立項目之使用者的 DN。
createTimestamp — 項目建立時的時間戳記,使用 GMT 格式。
modifiersName — 上次修改項目的使用者 DN。
modifyTimestamp — 項目修改時的時間戳記,使用 GMT 格式。
您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
關閉項目修改追蹤會導致不相符的資料。由於有多項應用程式皆依賴這些屬性,且停用此功能後效能只會略為提昇,因此建議您不要關閉項目修改追蹤。
屬性加密可保護目錄中所儲存之機密資料的安全性。屬性加密可讓您指定項目的某些屬性必須以加密格式儲存。如此可防止儲存在資料庫檔案、備份檔案與匯出的 LDIF 檔案中的資料遭讀取。
使用此功能時,屬性值在儲存至目錄伺服器資料庫之前會先進行加密,並在傳回至用戶端之前解密回原始值。您必須使用存取控制以防止用戶端在無權限的情況下存取此類屬性,並在屬性值傳輸於用戶端與目錄伺服器之間時,使用 SSL 為屬性值加密。如需資料安全性的一般架構性簡介與屬性加密的特定架構性簡介,請參閱「Sun Java System Directory Server Enterprise Edition 6.2 Reference」。
必須在伺服器上配置 SSL 並加以啟用,屬性加密方可運作。但依預設所有屬性皆不會加密。屬性加密配置於尾碼層級,這表示屬性會在尾碼中含有該屬性的每個項目中加密。若要為整個目錄中的某一屬性加密,您必須在每個尾碼中啟用該屬性的加密。
屬性加密會影響所有與尾碼相關的資料及索引檔案。若要修改現有尾碼的加密配置,您必須先匯出其內容,並在變更配置後重新匯入內容。DSCC 可協助您執行這些步驟。如需有關使用 DSCC 的更多資訊,請參閱目錄服務控制中心介面。
為進一步確保安全性,只要您開啟屬性加密,即應手動刪除仍可能含有未加密值的資料庫快取檔案與資料庫記錄檔。如需刪除這些檔案的程序,請參閱配置屬性加密。
您應在載入或建立新尾碼中的資料之前啟用加密屬性。
若您選擇加密被某些項目做為命名屬性的屬性,DN 中所出現的值將不會加密。儲存於項目中的值將會加密。
雖然您在配置加密時可以選取 userPassword 屬性,但除非遇到密碼必須以純文字格式儲存的情況,否則安全性並不會因此有任何提昇。DIGEST-MD5 SASL 認證也是如此。若密碼已在其密碼策略中定義了加密機制,則進一步的加密所增添的安全性將極其有限,且反而會影響每個連結作業的效能。
在儲存時,加密屬性的開頭會加上密碼標記,表示其使用了加密演算法。使用 DES 加密演算法的加密屬性將如下所示:
{CKM_DES_CBC}3hakc&jla+=snda% |
當您從線上匯入資料而在檢視時為資料加密後,您即已提供對伺服器進行認證的金鑰資料庫密碼,往後將不會再出現此提示。若您進行離線資料匯入,目錄伺服器則會先提示您提供密碼,始允許您為匯入的資料加密。為資料解密時 (此作業需要更高的安全性),無論此匯出作業是線上或是離線,目錄伺服器都會自動提示您提供金鑰資料庫密碼。如此將可進一步確保安全性。
只要憑證或私密金鑰未變更,伺服器就會繼續產生相同的金鑰。因此,只要兩個伺服器實例使用相同的憑證,資料即可從一個伺服器實例傳輸 (匯出並匯入) 至另一個實例。
屬性加密雖然可提昇資料安全性,但也會影響系統效能。請仔細評估哪些屬性需要加密,而僅就您認為特別機密的屬性進行加密。
由於機密資料可透過索引檔案直接存取,因此對應於加密屬性的索引鍵必須進行加密,使屬性受到完整的保護。在索引已對目錄伺服器效能造成影響 (尚未納入索引鍵加密所造成的影響) 的情況下,請在首次將資料匯入或增加到資料庫之前,先配置屬性加密。此程序可確保加密屬性的索引具有先佔性。
實作屬性加密功能時,請考量下列事項:
一般而言,在修改屬性加密配置時,最理想的做法是先匯出資料,再進行配置變更,然後匯入新配置的資料。
如此可確保所有配置變更均能保有其完整性,而不會有功能上的缺失。否則,某些功能可能會有所缺失,而破壞資料的安全性。
在現有的資料庫上修改屬性加密配置,可能會對系統效能造成嚴重的影響。
例如,假設您有一個含有現行資料的資料庫實例。此資料庫含有先前所儲存之具有 mySensitiveAttribute 屬性的項目。此屬性的值以純文字格式儲存於資料庫與索引檔案中。若您日後決定為 mySensitiveAttribute 屬性加密,則資料庫實例中所有的資料皆必須先匯出再重新匯入資料庫,以確保伺服器能夠使用屬性加密配置,更新資料庫與索引檔案。若能一開始就為屬性加密,即可避免此時所造成的效能影響。
以解密格式匯出資料時若使用了錯誤的密碼,匯出即會遭到拒絕。
若使用者要以解密格式匯出資料,伺服器將依其安全機制提示使用者提供密碼。若使用者所提供的密碼不正確,伺服器即會拒絕解密匯出作業。您可以直接輸入密碼,或提供密碼所在檔案的路徑。請注意,此檔案具有與 SSL 密碼檔案相同的語法。請參閱配置憑證資料庫密碼。
演算法可進行變更,但若變更過程有誤,結果中的索引功能即可能有所缺失。
若要變更用以加密資料的演算法,請匯出資料、修改屬性加密配置,再匯入資料。若未遵循此程序,依據初始加密演算法所建立的索引將會無法運作。
因為加密屬性的開頭會加上密碼標記以表示其已使用加密演算法,所以匯入資料的動作將由內部伺服器作業負責。因此,目錄伺服器可讓您在變更演算法之前以加密格式匯出資料。
變更伺服器的 SSL 憑證會使您無法將加密的資料解密。
屬性加密功能會使用伺服器的 SSL 憑證產生本身的金鑰,用以執行後續的加密與解密作業。因此,對加密的資料進行解密時,SSL 憑證是不可或缺的項目。若未先將資料解密即變更憑證,即無法進行資料解密。為避免陷入此窘境,請先以解密格式匯出資料,然後在變更憑證後重新匯入資料。
若要以加密格式傳輸資料,亦即在兩個伺服器實例間匯出及匯入資料,則兩個伺服器實例皆必須使用相同的憑證。
如需相關資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.2 管理指南」中的「Encrypting Attribute Values」。
您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
如果要配置屬性加密的尾碼中含有任何項目,即須先將該尾碼的內容匯出至 LDIF 檔案。
若尾碼中含有加密屬性,而您想要使用匯出的 LDIF 檔案重新初始化尾碼,可以讓屬性以匯出的 LDIF 保持加密形式。
若要啟用屬性加密,請使用此指令:
$ dsconf create-encrypted-attr -h host -p port suffix-DN attr-name cipher-name |
其中 cipher-name 為下列其中一項:
des - DES 區塊密碼
des3 - Triple-DES 區塊密碼
rc2 - RC2 區塊密碼
rc4 - RC4 串流密碼
例如:
$ dsconf create-encrypted-attr -h host1 -p 1389 dc=example,dc=com uid rc4 |
若要將加密屬性回復為其原始狀態,請使用此指令:
$ dsconf delete-encrypted-attr -h host -p port suffix-DN attr-name |
若您變更了配置而為一或多個屬性加密,且這些屬性在匯入作業之前即有值,請清除資料庫快取並移除記錄。
在資料庫快取與資料庫記錄中,不會顯示任何未加密的值。
若是刪除這些檔案,則會遺失某些追蹤資訊。此外,當您刪除這些檔案後,伺服器將處於回復模式,而需要很長的時間才能重新啟動。
若要清除資料庫快取及移除記錄,請執行以下作業:
停止目錄伺服器,如啟動、停止與重新啟動目錄伺服器實例中所述。
以超級使用者或具有管理員權限的使用者身份,從檔案系統中刪除資料庫快取檔案。
# rm instance-path/db/__db.* |
從檔案系統中刪除資料庫記錄檔。
# rm instance-path/db/log.0000000001 |
重新啟動目錄伺服器。
伺服器會自動建立新的資料庫快取檔案。在重新填入快取前,此尾碼中的作業效能可能會略受影響。
以 LDIF 檔案初始化尾碼,如初始化尾碼中所述。
載入檔案且建立對應的索引時,指定屬性的所有值均將加密。