一句话定义:LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)是一套专门用来读取(偶尔写入)"目录"的协议——目录里装的不是订单和日志,而是人、部门、组、设备这类身份信息。
它长什么样
LDAP 的数据是一棵树,节点叫条目(entry),每个条目用一串 DN(Distinguished Name,专有名字)唯一标识,比如:
uid=zhangsan,ou=研发部,dc=example,dc=com
从右往左读就是"公司 → 部门 → 人"。每个条目上挂一堆属性(attribute),如姓名、邮箱、工号、电话;属性是哪些、什么类型,由 schema 规定,不能随便加字段。
打个比方:它像公司前台那本活页通讯录。你要找张三,不用把整本翻一遍,只要说"研发部下面那个 uid 叫 zhangsan 的",直接抽出来。这套"说清楚路径和条件"的查询方式叫 filter,例如 (uid=zhangsan)、(&(objectClass=person)(department=研发部))。
常见的两个用途
1. 认证:应用让你输账号密码,背后就拿这组凭据去 LDAP 做一次 bind(绑定)。绑成功说明密码对,绑失败就是密码错。这就是"我们公司用 LDAP 登录"的意思。
2. 通讯录与分组:同步组织架构、查某人属于哪些组。AI 应用接企业时,通常靠它搞清楚"你是谁、在哪个部门、能看哪些知识库"。
和数据库查询的区别
很多人第一次见 LDAP 会问:这不就是张用户表吗,为什么不直接查 MySQL?差别在优化目标不同:
| 维度 | LDAP 目录 | 关系数据库 |
|---|---|---|
| 数据模型 | 树状、schema 固定 | 表/行,可灵活建模 |
| 查询能力 | 按 DN 点查 + 简单布尔过滤 | 复杂 join、聚合、子查询 |
| 读写比例 | 读极多、写极少 | 通用 |
| 事务 | 无通用多语句事务 | 完整事务 |
| 天然能力 | 多副本复制、分级授权 | 需自行搭建 |
所以:查"张三的邮箱是什么"用 LDAP 又快又省事;查"上季度各部门报销总额"就该找数据库。
容易混淆的邻居:LDAP 是协议,不是产品。OpenLDAP、Active Directory、389 Directory Server 等都是它的实现;AD 除了 LDAP 还带 Kerberos 等一整套机制。更新的账号同步协议 SCIM 用 HTTP+JSON,擅长"增删改同步",但很多企业存量目录仍只开 LDAP。
对从业者的实际意义
做 AI 应用接企业时,LDAP 常常是权限链路的第一环:拿组信息映射成角色,再在检索前做过滤(RAG 里尤其重要——别让实习生检索到董事会纪要)。注意几个坑:filter 里的用户输入要转义,否则会被注入;大批量同步要分页;对外一律走加密连接。LDAP 只管"人和组",文档级细粒度权限仍需自己实现。具体 schema 与配置以各产品官方页面为准。
