LDAP

LDAP解决了什么问题?

在日常办公中,我们会存在多个系统,每个系统都有独立的密码,这样用户在登录时很容易忘记自己的密码对应的系统。而LDAP就是为了解决这个问题,他是一个目录服务,通过这个目录服务提供LDAP统一认证服务。

比如最常见的场景,员工入职的时候会开通各个平台的账号,比如Windows域、Linux域、邮箱、OA系统、各种其他工作平台。这时可以将员工账号密码统一使用LDAP目录服务存储,然后各个系统使用LDAP进行统一认证,这就保证了各个系统之间的密码的统一性。从而就通过LDAP目录服务,完成了账号密码的统一管理、以及跨系统的单点登录。

什么是目录服务?

​​目录服务(Directory Service)本质是一个用于组织、存储和检索“对象属性信息”的专用数据库系统​​,其核心设计为解决 ​​“散落信息的结构化导航”​​ 问题。

目录服务通常用于存储:

  • 人员户籍信息

  • 资源信息,比如图书

  • 权限信息

​​目录服务将这些场景数字化,并统一为可编程管理的系统​​。

相比较传统数据库:

特性
目录服务
传统数据库

数据结构

行列

查询模式

属性搜索

SQL

读写场景

读>>写

均可

典型协议

LDAP、Active Directory

SQL

数据模型:

  • DN,唯一路径,比如uid=zhangsan,ou=dev,dc=mycompany,dc=com,类似文件的绝对路径

  • ObjectClass,预定义对象模版,比如对象person必须包含cn,sn属性

  • Attribute,属性,是键值对信息,比如mobile=138xxxxx, title=高级工程师

什么是LDAP

LDAP(Light Directory Access Portocol),它是基于X.500标准的轻量级目录访问协议。目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。

目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。

LDAP目录服务是由目录数据库和一套访问协议组成的系统。

LDAP基本模型

  1. 目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。

  2. 条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)。

  3. 对象类:与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必须属性也会被继承下来。

  4. 属性:描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。

alt text

常见的ObjectClass

class
父类
必包含属性
可选包含属性
描述

country

top

c

searchGuide\description

国家

dcObject

top

dc

域名对象

device

top

cn

serialNumber\seeAlso\owner\ou\o\l\description

设备

organization

top

o

userPassword\searchGuide…

组织

person

top

sn\cn

userPassword\telephoneNumber\seeAlso\description

个人

常见的Attribute

关键字
英文全称
含义

dn

Distinguished Name

“uid=songtao.xu,ou=oa组,dc=example,dc=com”,一条记录的位置(唯一)

rdn

relative distinguished name

相对专有名字,一般指dn逗号最左边的部分,如上面一行中 uid=songtao.xu,ou=oa组 就是rnd,dn是由多个rdn组织而成的

c

Country Name

国家名称

dc

Domain Component

域名的部分,其格式是将完整的域名分成几部分,如域名为example.com变成dc=example,dc=com(一条记录的所属位置)

uid

User Id

用户ID songtao.xu(一条记录的ID)

o

Organization Name

组织名称

ou

Organization Unit

组织单位,组织单位可以包含其他各种对象(包括其他组织单元),如“oa组”(一条记录的所属组织)

cn

Common Name

公共名称,如“Thomas Johansson”(一条记录的名称)

sn

Surname

姓,如“许”

LDAP 查询语法

& 逻辑与  
| 逻辑或  
! 逻辑非  
= 等于  
~= 约等于  
>= 等于或大于  
<= 小于或等于

* 代表任意字符,可用于完成已..开头,包含..的作用
# 搜索objectClass为person的记录,并且他的姓为杨或者张的记录
(&(objectClass=person)(|(sn=杨)(sn=张)))

# 搜索objectClass为person的记录,并且他的名字包含“翔”字
(&(objectClass=person)(cn=*翔*))

# 搜索objectClass为person的记录,并且他的名字不包含“翔”字
(&(objectClass=person)(!(cn=*翔*)))

最后更新于

这有帮助吗?