目录服务与关系数据库
目录数据库系统和关系数据库系统都是用来保存数据的,但是他们有两个主要的不同点:
- 数据结构,目录服务只有树形结构,不像关系数据库有复杂的数据结构。
- 查询速度与写入速度,目录服务适合查询,不适合写入。
基本概念
在浏览 LDAP 相关文档时经常会遇见一些概念,下面是常见概念的简单解释:
- DIT,目录信息树,近似相当于一个表
- Entry,条目,也叫记录项
- DN,是无歧义标识一个条目的名字,如”cn=alair,dc=account,dc=xdays,dc=info”,相当于主键
- 属性,一个条目可以有多个属性,常见的属性有 CN,O,OU,DC 等
- ObjectClass,对象类,决定了一个条目能具备哪些属性,以及属性对应值的类型
- Schema,Schema 是对象类的集合
- baseDN,基本 DN,baseDN 执行绑定查询时的根目录
- RootDN,根目录,也就是绑定了 OpenLDAProotDSE 这个类的条目。
- O,组织,是一个对象类,用于组织记录项
- OU,组织单元,也是一个对象类,用于组织记录项,比 O 小一个等级。
- RDN,RDN 是相对 DN,类比于相对路径
- CN,CN 是通用名称类似于别名,与 RDN 没有关系
- DC,域名成分
LDIF
简介
LDIF 是 LDAP 的数据交换格式,就像 json,xml 等一样。其格式可以大体描述如下:
- 第一行指定 LDIF 的版本号
- 整个文件是以记录(record)来组织的,不同的记录间用空行分隔
- 记录分为数据记录和操作记录,数据记录就是保存实际的数据的,而操作记录用于修改数据
- 文件中非 ASCII 的数据存储这里不研究了
数据记录
数据记录很简单,就是一组属性值对,如果行太长可以以空格开头来续行,一个数据记录的实例如下:
dn: ou=user,dc=xdays,dc=info
objectClass: organizationalUnit
ou: user
dn: ou=group,dc=xdays,dc=info
objectClass: organizationalUnit
ou: group
dn: ou=hosts,dc=xdays,dc=info
objectClass: organizationalUnit
ou: hosts
操作记录
操作记录稍复杂一点。一个操作记录是由一个或者多个操作组成的,每个操作以”-“开头的行隔开;可用的操作包括 add, delete, replace 等操作。如下是一个操作记录的实例:
dn: cn=config
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/certs/ldap.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/certs/ldap.key