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设置用户的名和姓,这是必须设置的,而其他属性则是可选的。