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基本模型
目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。
条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)。
对象类:与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必须属性也会被继承下来。
属性:描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。

常见的ObjectClass
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=*翔*)))
最后更新于
这有帮助吗?