“名稱空間”意味著名稱不僅僅是名稱,而且還具有結(jié)構(gòu)方面的含義特碳。該術(shù)語(yǔ)包含目錄的兩個(gè)不同方面诚亚,并試圖將它們聯(lián)系在一起:如何命名事物以及如何組織它們晕换。服務(wù)命名空間的定義很關(guān)鍵。這可能很明顯站宗,但命名空間可以讓您找到東西闸准。命名空間是用于標(biāo)識(shí)給定環(huán)境中所有對(duì)象的一組約定;換句話說(shuō)梢灭,它是命名系統(tǒng)夷家。如果沒(méi)有我們同意的名稱空間,您和我可能指的是同一件事敏释,但使用不同的語(yǔ)言库快。一個(gè)好的命名空間還可以確保一個(gè)對(duì)象的名稱不會(huì)與另一個(gè)對(duì)象的名稱沖突。命名空間可能是本書中介紹的最難的概念钥顽,所以如果它看起來(lái)令人困惑义屏,請(qǐng)放心。為了幫助介紹命名空間的概念蜂大,下一節(jié)將檢查一些示例和命名空間的屬性闽铐。本章的其余部分重點(diǎn)介紹 LDAP 使用的名稱空間。
The namespace includes more information than just the immediate identifier
一個(gè)很好的類比可以說(shuō)明現(xiàn)實(shí)世界中命名空間的使用县爬,即全球使用的郵政地址系統(tǒng)阳啥。在 postal 命名空間中添谊,一封信的地址(或命名财喳,如果你愿意的話)如下:
Person's name
Street number Street
City, State/Province/Region Zip code
Country
這個(gè)名稱(地址)通過(guò)它的構(gòu)造方式和每個(gè)組件的值告訴我們很多事情,同時(shí)也唯一地指定了接收者斩狱。我們知道此人居住在所列國(guó)家耳高、所列州、所列城市所踊、所列街道等泌枪。我們還知道這封信是寫給住在這個(gè)地址的人,而不是住在其他地方的同名人秕岛。
By using a hierarchical namespace, you can delegate information management
但是請(qǐng)考慮這個(gè)郵政示例很好地說(shuō)明的另一點(diǎn)碌燕。因?yàn)檫@個(gè)命名空間是以層次化的方式組織的,并且明確指定了范圍遞減的語(yǔ)言環(huán)境继薛,所以可以委托涉及對(duì)象(換句話說(shuō)修壕,接收者)的管理。換句話說(shuō)遏考,當(dāng)讀者在郵箱中投下一封信給這個(gè)人時(shí)慈鸠,它可以先被發(fā)送到負(fù)責(zé)所列國(guó)家的郵政服務(wù)。之后可以寄到州郵局灌具,依此類推青团,直到到達(dá)當(dāng)?shù)剜]局譬巫,可以投遞。此命名空間中固有的層次結(jié)構(gòu)方便地提供了一種有效的合作委托管理方式督笆。
You can use the namespace for other management purposes
郵政示例說(shuō)明了一個(gè)名稱空間芦昔,該名稱空間用于唯一標(biāo)識(shí)對(duì)象并在這些對(duì)象之間建立結(jié)構(gòu)化關(guān)系。除了標(biāo)識(shí)和結(jié)構(gòu)之外娃肿,名稱空間還可以參與完成其他幾個(gè)目錄管理操作烟零。作為此類功能的示例,大多數(shù)供應(yīng)商都實(shí)現(xiàn)了數(shù)據(jù)分區(qū)和復(fù)制咸作。第 5 章涵蓋這些和其他特殊的結(jié)構(gòu)概念锨阿。
Namespace can also refer to a specific directory implementation
當(dāng)在特定目錄命名空間的上下文中使用術(shù)語(yǔ)“命名空間”時(shí),其含義略有不同记罚。在這種情況下墅诡,它不是被引用的命名系統(tǒng)。在此上下文中桐智,該術(shù)語(yǔ)指的是該目錄中的所有對(duì)象以及所選的特定結(jié)構(gòu)末早。在 LDAP 中,每個(gè)目錄術(shù)語(yǔ)似乎都有兩個(gè)名稱说庭,因此請(qǐng)為大量具有重復(fù)含義的新詞匯做好準(zhǔn)備然磷。您可能聽(tīng)說(shuō)過(guò)術(shù)語(yǔ)目錄信息樹(shù) (DIT) 用于指代特定的目錄名稱空間。
DNS
The server's DNS name is the basis for the name of the root of the LDAP directory.
域命名系統(tǒng)構(gòu)成了 LDAP 名稱空間基礎(chǔ)的一部分刊驴,它也是名稱空間的一個(gè)很好的例子姿搜。探索 DNS 的工作原理將有助于強(qiáng)調(diào)有關(guān) LDAP 的要點(diǎn)。如第 1 章所述捆憎,LDAP 目錄服務(wù)器的 DNS 名稱在確定目錄根名稱(即目錄的基本 DN)時(shí)尤為重要舅柜。是否使用DNS命名會(huì)影響LDAP命名空間的實(shí)現(xiàn)。目錄的基本 DN 不必與目錄服務(wù)器的 DNS 名稱匹配躲惰,并且當(dāng)需要跨多個(gè)服務(wù)器分布的目錄時(shí)致份,通常兩者不匹配。除了與命名空間的這種連接之外础拨,DNS 還在 LDAP 客戶端定位 LDAP 目錄服務(wù)器的過(guò)程中發(fā)揮關(guān)鍵作用氮块。 DNS 不必在服務(wù)器位置使用,但經(jīng)常使用诡宗。
DNS maps a human-readable name to a computer-readable name
DNS是一個(gè)分布式目錄服務(wù)滔蝉,由全球成千上萬(wàn)的服務(wù)器維護(hù)。這個(gè)目錄中有數(shù)十億條記錄僚焦,將一個(gè)IP地址映射到一個(gè)計(jì)算機(jī)名稱锰提,反之亦然。IP地址是數(shù)字,是一臺(tái)計(jì)算機(jī)用來(lái)指向另一臺(tái)計(jì)算機(jī)的 "名字"立肘。人們通過(guò)字母數(shù)字名稱了解計(jì)算機(jī)边坤。一個(gè)樣本記錄可能是host.mycompany.com。在127.42.12.6谅年。這條記錄表示host.mycompany.com是IP地址為127.42.12.6的計(jì)算機(jī)的人可讀名稱茧痒。
DNS Hierarchy
A hierarchy is employed to provide a clear basis for authoritative name resolution
這些記錄分布在數(shù)百萬(wàn)個(gè)稱為區(qū)域的文件中。每個(gè)區(qū)域都保存其具有權(quán)威性的 DNS 名稱空間的記錄副本融蹂。換句話說(shuō)旺订,每個(gè)區(qū)域只允許更改整個(gè) DNS 名稱空間的一小部分。 host.mycompany.com 計(jì)算機(jī)記錄屬于 mycompany 區(qū)域超燃。 mycompany 區(qū)域?qū)儆?com 區(qū)域区拳。 com 區(qū)域?qū)儆诟鶇^(qū)域。根區(qū)域是所有 DNS 中最頂層的區(qū)域意乓。圖 2-1 顯示了 DNS 區(qū)域?qū)哟谓Y(jié)構(gòu)圖樱调。區(qū)域文件保存在該區(qū)域的權(quán)威 DNS 服務(wù)器上。每個(gè)parent zone是一個(gè)權(quán)限届良,用來(lái)區(qū)分哪個(gè)DNS服務(wù)器對(duì)哪個(gè)child zone有權(quán)限笆凌。單個(gè)根區(qū)域保存每個(gè)一級(jí) DNS 區(qū)域的權(quán)威記錄。這形成了一個(gè)層次結(jié)構(gòu)士葫,客戶端計(jì)算機(jī)可以在合理保證獲得權(quán)威名稱解析的情況下進(jìn)行查詢乞而。
Figure 2-1. Hierarchy of DNS zones (the DNS namespace)
DNS Resolution
The hierarchy provides an efficient way for a client computer to perform name resolution
DNS 名稱空間提供了一個(gè)系統(tǒng),用于組織計(jì)算機(jī)名稱記錄和解析計(jì)算機(jī)名稱的位置慢显∽δ#客戶端計(jì)算機(jī)通常被定向查詢本地區(qū)域的權(quán)威 DNS 服務(wù)器以進(jìn)行名稱解析。例如鳍怨,計(jì)算機(jī) host.mycompany.com 將配置為查詢 DNS 服務(wù)器以查找 mycompany.com呻右。如果 host.mycompany.com 想知道 unknown.whitehouse.gov 的 IP 地址跪妥,它會(huì)首先詢問(wèn)位于 mycompany.com 的 DNS 服務(wù)器鞋喇。 mycompany.com 會(huì)將其引用到 com DNS 服務(wù)器。 com DNS 服務(wù)器會(huì)將其引用到根 DNS 服務(wù)器眉撵。根 DNS 服務(wù)器會(huì)將其引用到政府 DNS 服務(wù)器侦香。 gov DNS 服務(wù)器會(huì)將其引用到 whitehouse.gov DNS 服務(wù)器。 whitehouse.gov DNS 服務(wù)器隨后會(huì)使用 unknown.whitehouse.gov 的 IP 地址回復(fù)客戶端纽疟。通常 DNS 服務(wù)器會(huì)緩存有關(guān)重要區(qū)域的信息罐韩,例如根和一級(jí) DNS 服務(wù)器,因此實(shí)際上所描述的過(guò)程會(huì)遵循更短的路徑污朽。
Basic DNS Record Types
There are several basic types of DNS records. Table 2-1 lists these records along with a short explanation
LDAP 如何使用 DNS
第 1 章描述了 LDAP 和 DNS 之間的非正式連接散吵。此連接主要為 LDAP 客戶端提供一種機(jī)制來(lái)定位特定目錄的目錄服務(wù)器。定義 LDAP 的 RFC 沒(méi)有提到 DNS,但它們暗示了它矾睦。例如晦款,RFC 2255 定義了 LDAP URL 語(yǔ)法,我將在本章稍后部分返回枚冗。仔細(xì)檢查后缓溅,您會(huì)發(fā)現(xiàn)此語(yǔ)法的主機(jī)名部分顯然依賴于 DNS,盡管未提及 DNS赁温。所以對(duì) DNS 的依賴是非正式的坛怪,但實(shí)際上每個(gè) LDAP 產(chǎn)品都希望 LDAP 客戶端使用 DNS 來(lái)定位他們的 LDAP 目錄服務(wù)器。這種依賴有充分的理由股囊。一個(gè)原因是 DNS 是主導(dǎo)的名稱解析標(biāo)準(zhǔn)袜匿,另一個(gè)原因是 LDAP 使用的傳輸協(xié)議是 TCP,它依賴于 DNS稚疹。
Table 2-1. Basic types of DNS records
DNS is used to register a directory service
LDAP 使用 DNS 名稱空間的一個(gè)重要含義是沉帮,通過(guò)注冊(cè) DNS 域名以將主機(jī)或主機(jī)區(qū)域連接到 Internet,您可能會(huì)無(wú)意中注冊(cè)目錄服務(wù)名稱空間贫堰。電子郵件傳送命名空間與 MX 記錄和許多其他基于網(wǎng)絡(luò)的服務(wù)類似穆壕。當(dāng)我向權(quán)威 DNS 服務(wù)器注冊(cè) mycompany.com 的 A 記錄時(shí),mycompany.com 可能成為有效的目錄服務(wù)名稱空間其屏。目前大多數(shù)供應(yīng)商都希望您的 LDAP 目錄對(duì)每個(gè)目錄服務(wù)器都有一個(gè) A 記錄喇勋。一些供應(yīng)商進(jìn)一步期望,如果您部署分布在多個(gè)目錄服務(wù)器上的目錄偎行,您將使每個(gè)目錄服務(wù)器都從屬于 DNS 名稱空間川背。例如,如果我分發(fā)了 mycompany.com 目錄蛤袒,目錄服務(wù)器可能有 dir1.mycompany.com熄云、dir2.mycompany.com 等的 A 記錄。
LDAP is making increasing use of DNS for its namespace functionality
除了已經(jīng)成為實(shí)踐的非正式期望之外妙真,還有一些關(guān)于 DNS 和 LDAP 之間關(guān)系的正式工作缴允。 RFC 2247 為 DNS 提供了一個(gè)明確的標(biāo)準(zhǔn),可以輕松地將其合并到 LDAP 在目錄中使用的命名空間中珍德。定義了域組件 (dc) 屬性练般,它可以用作容器對(duì)象目錄中的命名屬性。在 IETF 中锈候,還有其他廣泛的工作涉及使用 DNS 來(lái)擴(kuò)展 LDAP 命名空間功能薄料。文檔草案包括一項(xiàng)建議,即使用 DNS SRV 記錄為客戶端定位給定命名空間的 LDAP 目錄泵琳。正如 Microsoft 的目錄實(shí)施所證明的那樣摄职,該提案已獲得重要支持誊役。它可能會(huì)在幾年內(nèi)取代現(xiàn)有的非正式做法。另一項(xiàng)提議建議使用帶有引用的 DNS SRV 記錄谷市。第 5 章討論了推薦势木。、
LDAP Object Structure
The internal structure of an LDAP directory primarily provides organization of entries via a hierarchy. The structure is
critical to the usability and manageability of the directory. The structure can also allow the benefits listed in Benefits 2-1 to
be easily provided
Benefits 2-1 LDAP namespace benefits
[1] 該結(jié)構(gòu)可以更輕松地跨多個(gè)服務(wù)器分發(fā)信息歌懒。分布在多個(gè)服務(wù)器上的目錄反過(guò)來(lái)又提供了更高的可靠性和將目錄信息定位在靠近遠(yuǎn)程位置的可能性
[2] 該結(jié)構(gòu)可以使訪問(wèn)控制的管理更簡(jiǎn)單
[3] 該結(jié)構(gòu)可以使具有特定目錄要求的應(yīng)用程序集成到您的目錄中
[4] 該結(jié)構(gòu)可以通過(guò)將相似的條目分組在一起來(lái)簡(jiǎn)化目錄維護(hù)
該結(jié)構(gòu)本身不提供這些好處啦桌。 Mycompany 實(shí)現(xiàn)這些好處取決于它的目錄實(shí)現(xiàn)和名稱空間的設(shè)計(jì)。如何提供這些好處本身就是一個(gè)主題(參見(jiàn)第 5 章)
A namespace with a hierarchy of structure has other benefits
如郵政示例中所述及皂,按層次結(jié)構(gòu)組織目錄對(duì)象提供了一種有效的委托管理?xiàng)l目的方法甫男。要添加條目,您需要在目錄中的適當(dāng)位置獲得某種類型的授權(quán)验烧。由結(jié)構(gòu)的存在創(chuàng)建的管理層有助于在條目中強(qiáng)制執(zhí)行一致的數(shù)據(jù)板驳。
Containers enable structure
由于容器條目,LDAP 目錄中可能存在層次結(jié)構(gòu)碍拆。容器條目是特殊條目若治,允許其他條目分層放置在它們下面。容器下方的條目有時(shí)稱為容器的子項(xiàng)感混,或容器的從屬條目端幼。容器有時(shí)稱為其下條目的父級(jí)。您還可以通過(guò)說(shuō)條目被父項(xiàng)包含來(lái)引用容器與其下方條目之間的關(guān)系弧满。
Allowed Structures
Only a specific kind of structure is allowed in LDAP
LDAP 目錄中的名稱空間不允許結(jié)構(gòu)內(nèi)的任意連接婆跑。不允許出現(xiàn)類似于網(wǎng)頁(yè)之間鏈接關(guān)系的結(jié)構(gòu)(即Web結(jié)構(gòu))。更具體地說(shuō)庭呜,一個(gè)容器在其正上方只能有一個(gè)父級(jí)滑进。一個(gè)容器可以有多個(gè)子容器,但只有一個(gè)父容器募谎。這種類型的結(jié)構(gòu)通常稱為樹(shù)結(jié)構(gòu)扶关。該術(shù)語(yǔ)可能會(huì)讓您想起命名空間的另一個(gè)術(shù)語(yǔ):目錄信息樹(shù) (DIT)。圖 2-2 和 2-3 顯示了有效和無(wú)效名稱空間結(jié)構(gòu)的示例数冬。當(dāng)添加新條目時(shí)节槐,規(guī)范的結(jié)構(gòu)方法幾乎不會(huì)導(dǎo)致服務(wù)中斷,因?yàn)橹粚懭胄聴l目吉执,而不必修改現(xiàn)有條目疯淫。
Figure 2-2. Example of valid hierarchical namespaces in an LDAP directory
Figure 2-3. Examples of invalid hierarchical namespaces in an LDAP directory
LDAP Containers
With LDAP, any entry can become a container
您可以假設(shè) LDAP 目錄中的容器具有將條目標(biāo)識(shí)為容器的屬性。但事實(shí)并非如此戳玫。當(dāng)條目被放置在條目之下時(shí),條目成為容器未斑,但發(fā)生這種情況時(shí)咕宿,LDAP 目錄不會(huì)修改容器條目。使用 LDAP,每個(gè)條目都有成為容器的可能性府阀,并且這種設(shè)計(jì)支持許多分層機(jī)會(huì)缆镣。
You create a container by creating an entry below another entry
您還可以假設(shè)容器條目具有一個(gè)屬性,該屬性列出了該容器中包含的所有條目试浙。這也不是這樣董瞻。除了每個(gè)條目的名稱之外,沒(méi)有任何特殊機(jī)制存儲(chǔ)層次結(jié)構(gòu)田巴。您可以通過(guò)在另一個(gè)條目下方創(chuàng)建一個(gè)條目來(lái)創(chuàng)建一個(gè)容器钠糊!這個(gè)概念需要一些時(shí)間來(lái)適應(yīng),因?yàn)檫壿嫳砻魅萜鳁l目需要修改壹哺。但是抄伍,特定的 LDAP 實(shí)現(xiàn)可能會(huì)超出 LDAP 規(guī)范,并具有子信息的特殊屬性管宵,以提供額外的管理功能截珍。
Although every entry can be a container, some object classes may make more sense
在某些 LDAP 服務(wù)器實(shí)現(xiàn)中,對(duì)于條目必須成為容器的對(duì)象類可能存在限制箩朴。這些限制稱為結(jié)構(gòu)規(guī)則(更多詳細(xì)信息岗喉,請(qǐng)參見(jiàn)第 4 章)。通常炸庞,由于歷史原因沈堡,有幾個(gè)對(duì)象類經(jīng)常用作容器。這些對(duì)象類是最受歡迎的燕雁,因?yàn)樗鼈兪?X.500 中唯一允許的容器诞丽。表 2-2 列出了這些對(duì)象類,并附有每個(gè)對(duì)象類的簡(jiǎn)短描述以及它們作為容器可能有用的原因拐格。在這些對(duì)象類中僧免,組織單位的使用最為廣泛。它經(jīng)常被用于更廣泛的目的捏浊,而不僅僅是政治結(jié)構(gòu)懂衩。您不必使用這些對(duì)象類作為目錄中的容器,但您可能會(huì)發(fā)現(xiàn)這些類受到青睞是有充分理由的金踪。
Structure Rules
Structure rules restrict where an entry of an object class can be created
LDAP 還支持特定于對(duì)象類的結(jié)構(gòu)規(guī)則(有關(guān)此處內(nèi)容以外的詳細(xì)信息浊洞,請(qǐng)參閱第 4 章)。此功能不一定是 LDAP 標(biāo)準(zhǔn)的一部分胡岔,但它已由多個(gè)供應(yīng)商實(shí)現(xiàn)法希。對(duì)象類結(jié)構(gòu)規(guī)則對(duì)可以創(chuàng)建特定對(duì)象類的條目的位置施加限制。例如靶瘸,我可能會(huì)將結(jié)構(gòu)規(guī)則與組織單位對(duì)象類相關(guān)聯(lián)苫亦。此結(jié)構(gòu)規(guī)則可能要求 objectclass=organizationalUnit 的所有條目都是 objectclass=organization 條目的直接子項(xiàng)毛肋。此規(guī)則在名稱空間中施加了額外的限制,并且還限制了功能屋剑。結(jié)構(gòu)規(guī)則由模式檢查過(guò)程強(qiáng)制執(zhí)行润匙。 Mycompany 將希望審查特定于其所選供應(yīng)商的任何結(jié)構(gòu)規(guī)則。
Table 2-2. Common object classes used for containers
Naming Contexts
Naming contexts are used to refer to portions of a directory
每個(gè)頂層容器的名稱都有一個(gè)區(qū)別唉匾,也稱為命名上下文孕讳。不過(guò),命名上下文不僅僅是容器巍膘。命名上下文是從頂級(jí)容器開(kāi)始的連續(xù)子樹(shù)厂财。例如,如果您在 Mycompany 中引用 Accounts 命名上下文典徘,則指的是 Accounts 容器蟀苛、它的所有子條目以及 Accounts 容器下的所有容器和條目,如圖 2-4 所示逮诲。這樣帜平,您可以方便地引用目錄的各個(gè)部分。命名上下文是與目錄后綴(或 X.500 中的上下文前綴)相同的術(shù)語(yǔ)梅鹦。 Accounts 命名上下文是 Accounts 后綴裆甩。
Figure 2-4. Example of naming contexts in an LDAP directory
The directory has no single root entry; instead, all the naming contexts are peers connected by the
root DSE
LDAP 目錄的根實(shí)際上沒(méi)有目錄對(duì)象。相反齐唆,有一個(gè)類似于根對(duì)象的特殊條目嗤栓,稱為根 DSE 條目,它列出了目錄服務(wù)器上的所有命名上下文箍邮。該目錄使用命名上下文來(lái)快速區(qū)分對(duì)條目的請(qǐng)求是否在已知的命名上下文中茉帅。
A flat namespace allows quick growth
在扁平結(jié)構(gòu)的目錄中,通常會(huì)忽略組織和管理锭弊,而添加新條目變得越來(lái)越容易堪澎。正如您在圖 2-5 中所看到的,結(jié)構(gòu)的缺乏鼓勵(lì)了輕松的增長(zhǎng)味滞,因?yàn)橹挥幸粋€(gè)組織容器在使用中樱蛤,對(duì)添加幾乎沒(méi)有限制。但在這個(gè)模型中剑鞍,一致性和可擴(kuò)展性可能成為一場(chǎng)噩夢(mèng)昨凡。當(dāng)通用查詢定期返回大量條目時(shí),可伸縮性成為一個(gè)問(wèn)題蚁署。當(dāng)有用的唯一名稱的數(shù)量達(dá)到極限時(shí)便脊,可擴(kuò)展性也會(huì)成為一個(gè)問(wèn)題⌒斡茫可能會(huì)達(dá)到此限制就轧,因?yàn)槿魏翁囟ㄈ萜髦兄挥幸粋€(gè)條目可以用任何特定名稱命名证杭。分層模型通過(guò)在層次結(jié)構(gòu)中的多個(gè)級(jí)別組織條目來(lái)回避這些問(wèn)題田度。
Figure 2-5. A flat namespace in an LDAP directory
Don't Be Fooled by the Figures
Note that the figures throughout the book include a root entry, when in actuality there is no such entry. This
is purely to allow you to know the context of the namespace being pictured. It is a common practice in
diagramming directory namespaces, but it fooled me for a long time into thinking there really was a root
entry.
目錄命名空間有四個(gè)基本的有用部分:
- Political/functional— Dividing information based on an organization, or difference in functional needs. For
example, you might separate the HR directory information from the Marketing directory information - Geographic— Dividing information based on the location of the clients who will be accessing the information or
based on the location of the real objects that the information in the directory represents. For example, you might
separate the personal information for individuals in Europe from the same information for U.S. citizens - Resource-based— Dividing information based on the type of resource. For example, you might separate the
printer information from the server information, or separate public resources from private resources - User classification— Dividing information based on users' needs. For example, you might separate
information for managers from information for staff
How Do I Decide How to Structure My Directory?
決定如何構(gòu)建目錄可能是一件困難的事情妒御。同樣困難的是決定何時(shí)分割平面結(jié)構(gòu)或單個(gè)容器。名稱空間的四個(gè)基本部分的混合組合通痴蚪龋可以很好地適應(yīng)某種情況乎莉。通常地理劃分伴隨著在多個(gè)服務(wù)器上分布目錄命名空間。第 5 章更詳細(xì)地介紹了分布式目錄服務(wù)器奸笤。做出該決定的另一個(gè)因素是需要通過(guò)在多個(gè)服務(wù)器上復(fù)制某些類型的目錄數(shù)據(jù)惋啃,以更容錯(cuò)的方式提供這些數(shù)據(jù)。 LDAP 供應(yīng)商對(duì)最小復(fù)制單元有不同的要求监右,這將影響設(shè)計(jì)決策边灭。請(qǐng)記住,實(shí)施結(jié)構(gòu)化的最大原因是為了簡(jiǎn)化信息管理健盒。如果你實(shí)施一個(gè)沒(méi)有明確管理目標(biāo)的結(jié)構(gòu)绒瘦,你會(huì)后悔你的選擇。在查看用于實(shí)現(xiàn)層次結(jié)構(gòu)的每個(gè)模型時(shí)扣癣,您應(yīng)該考慮以下問(wèn)題
- Will users of the directory need different levels of access to the information? If so, what structure
can be implemented to simplify the access management? - Does the directory help to provide management of computers or other devices? If so, are there
compelling reasons to manage specific computers differently from others - Are the political or organizational divisions under consideration? If so, make sure that you make it
easier to manage resources, users, or directory information. The most frequent mistake is to
blindly implement the structure based on internal organizational boundaries that require no
different level of management. - For every new container, ask, "What administrative management purpose does this container
serve?"
嘗試使您的目錄盡可能平坦惰帽,同時(shí)具有足夠的結(jié)構(gòu)來(lái)委派管理并實(shí)現(xiàn)其他目標(biāo),如好處 2-1 中的目標(biāo)父虑。在未來(lái)的情況下该酗,過(guò)多的結(jié)構(gòu)可能會(huì)受到限制。例如士嚎,如果使用廣泛的政治結(jié)構(gòu)作為命名空間劃分的基礎(chǔ)呜魄,那么以后的重組或公司合并可能會(huì)帶來(lái)嚴(yán)重的問(wèn)題。有趣的是莱衩,LDAP 標(biāo)準(zhǔn)有一個(gè)要求也可能影響您實(shí)現(xiàn)的設(shè)計(jì)爵嗅。 LDAP 客戶端只需要支持在根和任何條目之間有十個(gè)級(jí)別的層次結(jié)構(gòu)。如果你實(shí)現(xiàn)更復(fù)雜的東西膳殷,它可能無(wú)法工作操骡!這些指南可能不會(huì)為您創(chuàng)建結(jié)構(gòu),但它們應(yīng)該有所幫助赚窃。
LDAP Object Naming
牢牢掌握 DNS 和 LDAP 目錄中允許的可接受結(jié)構(gòu)后册招,您就可以考慮 LDAP 名稱空間的內(nèi)部細(xì)節(jié)了爽茴。 LDAP 使用的名稱空間非常靈活变泄,允許每個(gè)條目有多個(gè)名稱碧绞,并且可以使用不同的屬性來(lái)構(gòu)成名稱伟端。 LDAP 提供的命名靈活性不會(huì)以確保每個(gè)條目都具有在整個(gè)目錄中唯一的名稱為代價(jià)返干。
Relative Distinguished Name (RDN)
The RDN is an entry's naming attribute; it has a unique value in the container of the entry
相對(duì)可分辨名稱屬性為容器中的每個(gè)條目提供唯一的名稱標(biāo)識(shí)符。例如育八,圖 2-6 顯示了一個(gè) RDN 為 cn=Brian Arkills 的人員條目羊精。同一容器內(nèi)不能有兩個(gè)具有相同 RDN 值的條目。因此絮短,在 cn=Brian Arkills 的 People 容器中不能有其他人條目江兢,并且在任何特定容器中,對(duì)于該容器的從屬人員條目丁频,cnattribute 值必須是唯一的杉允。 RDN 屬性是條目的屬性之一,稱為該類型條目的命名屬性席里。但一般來(lái)說(shuō)叔磷,任何特定對(duì)象類的命名屬性并不強(qiáng)制為特定屬性。在對(duì)象類定義中奖磁,一些 LDAP 供應(yīng)商確實(shí)強(qiáng)制將特定屬性作為命名屬性改基,但這不是 LDAP 標(biāo)準(zhǔn)的一部分。在圖2-6的例子中咖为,cn(common name)屬性是person對(duì)象類的命名屬性
Figure 2-6. An example of an RDN
You can substitute a unique string of numbers called an object identifier for the attribute type in an
RDN
您可以使用稱為對(duì)象標(biāo)識(shí)符 (OID) 的特殊數(shù)字字符串來(lái)代替屬性類型秕狰。每個(gè)屬性類型都有一個(gè)分配給它的唯一 OID。例如案疲,cnattribute 的 OID 是 2.5.4.3封恰。 OID 用于唯一標(biāo)識(shí)一個(gè)屬性類型。例如褐啡,您可以定義一個(gè)名為 myattribute 的屬性類型诺舔。我還可以定義一個(gè)名為 myattribute 的屬性類型。我們?cè)趺粗浪鼈兪欠袷窍嗤膶傩员钙瑁客ㄟ^(guò)比較兩個(gè)屬性的OID低飒。有關(guān) OID 的更多詳細(xì)信息,請(qǐng)參閱第 4 章懂盐;現(xiàn)在褥赊,您需要知道 OID 可以替代屬性類型的名稱。當(dāng)使用 OID 作為命名屬性時(shí)莉恼,OID 與名稱空間相關(guān)拌喉。例如,圖 2-6 中條目的有效 RDN 是 2.5.4.3=Brian Arkills俐银。
cn is frequently used in RDNs, but other types are possible
cnattribute 是最常用的命名屬性尿背;但是,還有其他幾種常用的屬性類型(請(qǐng)參見(jiàn)表 2-3)
Naming Attributes
You can use any attribute with a unique value in the RDN
您可以在該容器的條目中使用具有唯一值的條目的任何屬性類型來(lái)形成 RDN捶惜。雖然這個(gè)規(guī)則看起來(lái)很混亂田藐,但它允許客戶端更靈活地識(shí)別一個(gè)意想不到的形式的條目。一般來(lái)說(shuō),模式檢查器必須確保每個(gè)新條目或?qū)ΜF(xiàn)有條目的修改都至少為該條目留下一個(gè)唯一的 RDN汽久,因此該條目具有唯一的名稱鹤竭。一些 LDAP 實(shí)現(xiàn)確實(shí)標(biāo)準(zhǔn)化了任何給定對(duì)象類的命名屬性;在這種情況下景醇,被指定為命名屬性的屬性必須滿足模式檢查器強(qiáng)制執(zhí)行的唯一性規(guī)則臀稚。無(wú)論哪種方式,都可以保證每個(gè)條目都有一個(gè)在整個(gè)目錄中唯一的名稱啡直。
Table 2-3. Common attributes used as naming attributes
您還可以在 RDN 中使用多個(gè)屬性烁涌。這稱為多值 RDN苍碟。當(dāng)一個(gè)或兩個(gè)屬性值不滿足唯一性要求時(shí)酒觅,此功能允許您指定一個(gè)具有兩個(gè)屬性值交集的唯一條目。例如微峰,考慮圖 2-7 中所示的情況舷丹。有兩個(gè)電話號(hào)碼相同的人,還有兩個(gè)同姓的人蜓肆。您不能使用電話號(hào)碼或姓氏屬性來(lái)唯一指示 Luke Skywalker 的條目颜凯,但兩種屬性類型的組合將創(chuàng)建唯一組合。 RDN 將是 sn=Skywalker+telephoneNumber=+1 222 222 2222仗扬。當(dāng)然症概,在這種情況下,您可以更輕松地使用 cn=Luke Skywalker 作為 RDN早芭;但是在某些情況下您可能不知道 cn 值彼城,因此使用多值 RDN 會(huì)更有效。并非所有供應(yīng)商實(shí)施都完全支持此功能退个。僅在仔細(xì)規(guī)劃后使用募壕。
Distinguished Name (DN)
A DN provides a name for users to uniquely refer to each directory entry
DN 為每個(gè)條目提供了一個(gè)完全限定的名稱,因此很清楚引用了哪個(gè)條目语盈,以及該條目在層次結(jié)構(gòu)中的位置舱馅。在 LDAP 規(guī)范下,每個(gè)條目不存儲(chǔ)其 DN刀荒,目錄也不索引目錄條目的 DN代嗤。相反,DN 主要是為了讓目錄的用戶能夠向目錄指示需要哪個(gè)條目缠借。 DN 由客戶端操作請(qǐng)求提供干毅,目錄動(dòng)態(tài)查看條目是否與此聲稱的 DN 匹配。特定供應(yīng)商可能會(huì)將 DN 存儲(chǔ)為條目的屬性或索引所有 DN烈炭,但這既不是必需的也不是預(yù)期的溶锭。
The DN is a concatenation of the entry's RDN and the RDN of every container between the entry and
the directory root
形成 DN 可能有點(diǎn)棘手,因?yàn)橛脩舯仨氈罈l目上方所有容器的 RDN符隙。 DN 是一個(gè)字符串趴捅,由條目的 RDN 與條目的容器的 RDN 連接垫毙,該條目的容器的 RDN 與該容器上方的每個(gè)容器的每個(gè) RDN 連接。逗號(hào)分隔每個(gè)組件拱绑。下面是 DN 的一個(gè)更簡(jiǎn)單的遞歸定義: DN 是由條目的 RDN 與其容器的 DN 串聯(lián)而成的字符串综芥。如圖2-7所示,右邊的entry有兩個(gè)可能的DN猎拨。
cn=Luke Skywalker,ou=People,dc=mycompany,dc=com
or:
sn=Skywalker+telephoneNumber=+1 222 222
2222,ou=People,dc=mycompany,dc=com
這個(gè)電話號(hào)碼是多少膀藐?
表示電話號(hào)碼的屬性具有普遍接受的語(yǔ)法,因此世界各地的用戶都能理解該號(hào)碼红省。接受的語(yǔ)法以加號(hào)和國(guó)家代碼開(kāi)頭额各,后跟國(guó)內(nèi)電話號(hào)碼。在前面的多值 RDN 示例中有兩個(gè)加號(hào)吧恃。一個(gè)是多值 RDN 語(yǔ)法的一部分虾啦,用于將兩個(gè) RDN 鏈接到一個(gè) DN,另一個(gè)加號(hào)應(yīng)出現(xiàn)在電話屬性中
適當(dāng)?shù)厥褂妹麑傩?命名屬性對(duì)您的目錄至關(guān)重要痕寓。
您目錄的用戶將不斷引用這些屬性的值來(lái)查找和修改條目傲醉。這種設(shè)計(jì)有幾個(gè)含義。這些屬性的值不應(yīng)包含被視為私有的信息呻率。否則硬毕,您將需要對(duì)該屬性設(shè)置訪問(wèn)控制,這將阻止將該屬性用作 RDN礼仗。使用訪問(wèn)控制還可能導(dǎo)致某些條目被排除在關(guān)鍵業(yè)務(wù)流程之外吐咳。供應(yīng)商和部署團(tuán)隊(duì)都可能會(huì)犯錯(cuò)誤,將帶有可能被視為私有的信息的屬性用作極其重要的對(duì)象類的命名屬性藐守。命名屬性的值應(yīng)該是靜態(tài)的挪丢。更改名稱可能會(huì)導(dǎo)致已“硬編碼”為使用特定名稱的程序出現(xiàn)不良行為。正如程序是硬編碼的一樣卢厂,人也是乾蓬。他們不會(huì)總是知道何時(shí)進(jìn)行了名稱更改,并且他們可能很難找到這個(gè)重命名的條目或知道重命名的條目與原始條目相同慎恒∪文冢回避這兩個(gè)問(wèn)題的一種方法是在命名屬性中使用任意的、公共的但唯一的值融柬。這種做法從設(shè)計(jì)的角度來(lái)看可能感覺(jué)不對(duì)死嗦,因?yàn)槊植惶珎€(gè)性化,但它是有效的粒氧。保證任何人都可以查詢所有條目越除,并且條目名稱不會(huì)改變
Naming Special Characters
You should treat some special characters differently when they are used in a DN
當(dāng)在 DN 中使用幾個(gè)字符時(shí),您必須對(duì)其進(jìn)行特殊處理。您可以將這些特殊字符存儲(chǔ)為不帶轉(zhuǎn)義字符的命名屬性值摘盆;但是在 DN 中引用這些字符時(shí)翼雀,必須對(duì)它們進(jìn)行轉(zhuǎn)義。您可以通過(guò)在它們前面加上反斜杠字符 () 來(lái)特別標(biāo)記這些字符孩擂,以避免含義錯(cuò)誤狼渊。這有時(shí)稱為注釋或轉(zhuǎn)義。例如类垦,使用值中包含逗號(hào)的 RDN 指定 DN 會(huì)導(dǎo)致混淆狈邑,因?yàn)槟夸浽?DN 中使用逗號(hào)來(lái)分隔 DN 組件。通過(guò)在 DN 中轉(zhuǎn)義表 2-4 中列出的字符來(lái)特殊處理它們蚤认。 RFC 2253 明確表示供應(yīng)商可以將其他字符設(shè)為特殊字符米苹,因此請(qǐng)注意檢查供應(yīng)商對(duì)特殊情況的實(shí)現(xiàn)。
Table 2-4. Special characters in distinguished names
LDAP 黑客:可能的代碼注入烙懦?
代碼注入和格式字符串攻擊是當(dāng)今其他技術(shù)中常見(jiàn)的安全漏洞驱入。近年來(lái),SQL氯析、printf、Web 服務(wù)器和本地 Web 應(yīng)用程序都出現(xiàn)了此漏洞莺褒。這些類型的漏洞基于錯(cuò)誤的異常編碼或用戶輸入解析掩缓,它們?cè)试S惡意攻擊者在服務(wù)器上插入命令或代碼。這些類型的漏洞通常圍繞著特殊字符遵岩,以及當(dāng)用戶將這些特殊字符作為輸入時(shí)如何處理這些特殊字符的模棱兩可的行為你辣。雖然在這方面沒(méi)有已知的 LDAP 漏洞,但我相信在不久的將來(lái)會(huì)發(fā)現(xiàn)漏洞尘执。隨著越來(lái)越多的組織將數(shù)據(jù)集中到 LDAP 目錄中舍哄,更多的審查將產(chǎn)生發(fā)現(xiàn)這些漏洞背后的編碼錯(cuò)誤所需的反復(fù)試驗(yàn)
URL Naming
When using a Web browser as an LDAP client, you should use a special naming format
現(xiàn)在大多數(shù) Web 瀏覽器都支持 LDAP 客戶端功能。因此誊锭,您可以通過(guò)瀏覽器方便地進(jìn)行搜索表悬。 LDAP URL 的命名格式完全在 RFC 2255 中指定。此格式與標(biāo)準(zhǔn) LDAP 客戶端使用的格式略有不同丧靡。 URL 有大量特殊字符蟆沫,必須按照 RFC 1738 中指定的特殊方式處理,不同的格式適應(yīng)這一點(diǎn)温治。 LDAP URL 命名格式并非僅供 Web 瀏覽器使用饭庞;標(biāo)準(zhǔn)的 LDAP 客戶端也必須能夠使用它來(lái)支持推薦。
How to use LDAP URL syntax
LDAP URL 以協(xié)議名稱 ldap:// 開(kāi)頭熬荆,后跟目錄服務(wù)器的主機(jī)名和端口舟山,然后是基本 DN 和其他名稱,例如范圍、過(guò)濾器和所需的屬性累盗。語(yǔ)法是
ldap://[hostname][/dn[?[attributes][?[scope]
[?[filter][?[extensions]]]]]
語(yǔ)法的組成部分是
hostname— The hostname specifies the LDAP server and the TCP/IP port used by the LDAP server. As
indicated by the brackets, both the hostname and port are optional. A default of port 389 is used if the port isn't
specified. If the hostname isn't specified, the client must have prior knowledge of which server to contact.
Separate the hostname and port with a colon, mycompany.com:389, as specified in RFC 1738.
DN— The DN component specifies the base distinguished name for the search.
attributes— The attribute component specifies the attribute types to return from the entries that match the
search parameters. If left unspecified, all attributes are returned.
scope— The scope component specifies the scope of directory entries to return. As with typical LDAP
searches, base,one, andsub are possible values. If the value is left unspecified,sub is assumed.
filter— The filter component specifies a limiting filter on which entries should be returned. It follows the same
syntax as typical LDAP searches. If left unspecified, (objectclass=*) is assumed, so that all entries are
returned.
extensions— The extensions component specifies optional LDAP URL extensions. These extensions can be
defined as needed, and they don't necessarily correspond to LDAP extended operations. Only one such
extension has been standardized, called the bindname extension. The bindname extension allows the client to
specify the DN of a directory entry to use in authenticating to the directory. A subsequent authentication
challenge would then be initiated. You can find more details in Section 4 of RFC 2255.
Here is an example of an LDAP URL:
ldap://mycompany.com:389/cn=Brian
Arkills,ou=People,dc=Mycompany,dc=com?sn
給定圖 2-6 中所示的示例目錄六孵,此搜索將返回條目的 n 屬性 cn=Brian Arkills,ou=People,dc=mycompany,dc=com。搜索具有子樹(shù)范圍幅骄,但指定基 DN 的條目沒(méi)有子項(xiàng)劫窒,因此僅返回一個(gè)條目。
Special URL characters must be treated in a unique way
有幾個(gè)非法和特殊的 URL 字符拆座。這些字符包括本章前面提到的特殊字符以及幾乎所有非字母數(shù)字字符(值得注意的例外包括 $-_.!*'())主巍。當(dāng)您在 LDAP URL 組件中使用這些字符時(shí),您必須轉(zhuǎn)義它們挪凑。轉(zhuǎn)義方法在 RFC 1738 中有完整描述孕索,但它相當(dāng)于用 % 字符和兩位十六進(jìn)制 ASCII 代碼代替相關(guān)字符。大多數(shù)瀏覽器會(huì)自動(dòng)將非法 URL 字符轉(zhuǎn)換為轉(zhuǎn)義版本躏碳。