在认识LDAP之前,我们需要认识目录服务。
目录服务
目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好象Linux/Unix系统中的文件目录一样。目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。
目录服务是由目录数据库和一套访问协议组成的系统。类似以下的信息适合储存在目录中:
- 企业员工信息,如姓名、电话、邮箱等;
- 公用证书和安全密钥;
- 公司的物理设备信息,如服务器,它的IP地址、存放位置、厂商、购买时间等;
什么是LDAP?
LDAP(Light Directory Access Portocol),它是基于X.500标准的轻量级目录访问协议,是一种用来查询与更新Active Directory的目录服务通信协议。AD域服务利用LDAP命名路径(LDAP naming path)来表示对象在AD内的位置,以便用它来访问AD内的对象。
LDAP是一个数据库,但是又不是一个数据库。说他是数据库,因为他是一个数据存储的东西。但是说他不是数据库,是因为他的作用没有数据库这么强大,而是一个目录。
LDAP和AD的区别
AD是Active Directory的缩写,AD应该是LDAP的一个应用实例,而不应该是LDAP本身。例如,windows域控的用户、权限管理应该是微软公司使用LDAP存储了一些数据来解决域控这个具体问题,只是AD顺便还提供了用户接口,也可以利用Active Directory当做LDAP服务器存放一些自己的东西而已。
再例如,LDAP是关系型数据库,微软自己在库中建立了几个表,每个表都定义好了字段。显然这些表和字段都是根据微软自己的需求定制的,而不是LDAP协议的规定。然后微软将LDAP做了一些封装接口,用户可以利用这些接口写程序操作LDAP,使得Active Directory也成了一个LDAP服务器。
总之,Active Directory = LDAP服务器+LDAP应用(Windows域控)。Active Directory先实现一个LDAP服务器,然后自己先用这个LDAP服务器实现了自己的一个具体应用(域控)。
LDAP和AD的关系
LDAP 是一种用来访问AD数据库的目录服务协议,AD DS 会通过 LDAP 名称路径来表示对象在 AD 数据库中的位置,以便用它来访问 AD 数据库内的对象。LDAP 的名称路径包括有 DN、RDN。
域环境下,LDAP协议的架构图:
标识名称(distinguished Name,DN):它是对象在Active Directory内的完整路径,DN 有三个属性,分别是 CN,OU,DC。
DC (Domain Component):域名组件;
CN (Common Name):通用名称,一般为用户名或计算机名;
OU (Organizational Unit):组织单位;
上述用户的DN为:
CN=张三,OU=Web前端组,OU=软件开发部,DC=moonxy,DC=com
UPN: 用户主体名称(User Principal Name)每个用户还可以有一个比DN更短、更容易记忆的 UPN,例如上面的张三隶属于moonxy.com,则其UPN可以为zhangsan@moonxy.com。用户登录时所输入的账户名最好是UPN,因为无论此用户的账户被移动到哪一个域,其UPN都不会改变,因此用户可以一直使用同一个名称来登录。
RDN:相对标识名称(Relative Distinguished Name,RDN)用来代表DN完整路径中的部分路径,例如上面路径中的CN=张三与OU=Web前端组等都是RDN。
Base DN:LDAP 目录树的最顶部就是根,也就是所谓的 “Base DN”,如 “DC=moonxy,DC=com”。
LDAP的核心
核心在于查找,并非存储。
LDAP作为一个统一认证的解决方案,主要的优点就在能够快速响应用户的查找需求。比如用户的认证,这可能会有大量的并发。如果用数据库来实现,由于数据库结构分成了各个表,要满足认证这个非常简单的需求,每次都需要去搜索数据库,合成过滤,效率慢也没有好处。虽然可以有Cache,但是还是有点浪费。LDAP就是一张表,只需要用户名和口令,加上一些其他的东西,非常简单。从效率和结构上都可以满足认证的需求。这就是为什么LDAP成为现在很人们的统一认证的解决方案的优势所在。
参考文章:
https://cainiaoqidian.com/post/298.html
https://www.cnblogs.com/cnjavahome/p/9029665.html
https://segmentfault.com/a/1190000002607140
https://www.anquanke.com/post/id/195100