schema,是一個標準,定義了ldap的對象和屬性,也就是ldap能夠儲存什麼資料,資料有什麼屬性等。類似於xml的DTD。xml的DTD定義了xml有什麼標籤以及這些標籤的內含項目關聯性、必填與可選等。ldap的schema也是這個作用。
openldap的預設的schema檔案一般在安裝目錄下的schema檔案夾下,分為多個檔案,每個檔案定義了不同的對象和屬性。
一、schema:
在LDAP中,schema用來指定一個目錄中所包含的對象(objects)的類型(objectClass),以及每一個類型(objectClass)中必須提供的屬性(Atrribute)和可選的屬性。可將schema理解為物件導向程式設計中的類,通過類定義一個具體的對象。LDIF中的資料條目可理解為是一個具體的對象,是通過schema來規劃建立的。因此,schema是一個資料模型,用來決定資料按什麼方式儲存,並定義儲存在不同的條目(Entry)下的資料之間的關係。schema需要在主設定檔slapd.conf中指定,以用來決定在目錄中可以使用哪些objectClass。
在/etc/openldap/schema/目錄中提供了許多schema檔案,只需要在設定檔slapd.conf中使用include命令將需要使用的schema包含即可。例如,設定檔預設包含了以下schema檔案:
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
提示:通常使用系統提供的schema就可解決大部分應用。管理員也可以自己設計制定schema,一般包括屬性定義(AttributeDefinition)、類定義(ClassDefinition)以及文法定義(SyntaxDefinition)等部分。這裡就不介紹具體的設計方法了。
二、瞭解objectClass
LDAP中,一個條目必須包含一個objectClass屬性,且需要賦予至少一個值。每一個值將用作一條LDAP條目進行資料存放區的模板;模板中包含了一個條目必須被賦值的屬性和可選的屬性。
objectClass有著嚴格的等級之分,最頂層是top和alias。例如,organizationalPerson這個objectClass就隸屬於person,而person又隸屬於top。
objectClass可分為以下3類:
結構型(Structural) :如person和organizationUnit;
輔助型(Auxiliary) :如extensibeObject;
抽象型(Abstract) :如top,抽象型的objectClass不能直接使用。
三、瞭解Attribute
屬性(Attribute)類似於程式設計中的變數,可以被賦值。在OpenLDAP中聲明了許多常用的Attribute(使用者也可自己定義Attribute)。常見的Attribute含義如下:
● c:國家。
● cn:common name,指一個對象的名字。如果指人,需要使用其全名。
● dc:domain Component,常用來指一個網域名稱的一部分。
● givenName:指一個人的名字,不能用來指姓。
● l:指一個地名,如一個城市或者其他地理地區的名字。
● mail:電子信箱地址。
● o:organizationName,指一個組織的名字。
● ou:organizationalUnitName,指一個組織單元的名字。
● sn:surname,指一個人的姓。
● telephoneNumber:電話號碼,應該帶有所在的國家的代碼。
● uid:userid,通常指某個使用者的登入名稱,與Linux系統中使用者的uid不同。
提示:objectClass是一種特殊的Attribute,它包含其他用到的Attribute以及其自身。
對於不同的objectClass,通常具有一些必設屬性值和一些可選屬性值。例如,可使用person這個objectClass來表示系統中一個使用者的條目,對於系統中使用者通常需要有這樣一些資訊:姓名、電話、密碼、描述等。如所示,對於person,通過cn和sn設定使用者的名和姓,這是必須設定的,而其他屬性則是可選的。