LDAP学习

article/2025/11/5 23:59:33

什么是LDAP?

LDAP(Lightweight Directory Access Protocol),轻量级目录访问协议。LDAP是一种通讯协议,LDAP支持TCP/IP。协议就是标准,并且是抽象的。提供LDAP服务的软件有很多商业上获得成功的,其中以MS的AD(Active Directory)和Redhat的NDS(Netscape directory server)使用最为广泛,而开源领域则是OpenLdap。
什么是OpenLDAP?

什么是OpenLDAP?OpenLDAP就是LDAP的一个具体实现,属于开源集中账号管理架构的实现,且支持众多系统版本,被广大互联网公司所采用。我们暂且把它理解成是个数据库。像数据库一样,LDAP也是有client端和server端。server端是用来存放资源,client端用来操作增删改查等操作。而我们通常说的LDAP是指运行这个数据库的服务器。而我们通常说的LDAP是指运行这个数据库的服务器。可以简单理解AD =LDAP服务器+LDAP应用。

那LDAP这种数据库有什么特殊的呢?
我们知道,像MySQL数据库,数据都是按记录一条条记录存在表中。而LDAP数据库,是树结构的,数据存储在叶子节点上,具体信息存储在条目(entry)中,条目可以看成关系数据库中的表记录,条目是具有区别名(Distinguished Name,DN)的属性(attribute),DN 是用来引用条目,DN 相当于关系数据库(Oracle/MySQL)中的主键(primary key),是唯一的。属性由类型(type)和一个或者多个值(value)组成,相当于关系数据库中字段的概念。看看下面的比喻:

假设你要树上的一个苹果(一条记录),你怎么告诉园丁它的位置呢?当然首先要说明是哪一棵树(dc,相当于MYSQL的DB),然后是从树根到那个苹果所经过的所有“分叉”(ou),最后就是这个苹果的名字(uid,相当于MySQL表主键id)。好了!这时我们可以清晰的指明这个苹果的位置了

总结一下LDAP树形数据库如下:
DC (Domain Component) :一条记录的详细位置
CN (Common Name) :一条记录所属区域 (哪一颗树)
OU (Organizational Unit) :一条记录所属组织 (哪一个分支)
CN/uid:一条记录的名字/ID (哪一个苹果名字)
LDAP目录树的最顶部就是根,也就是所谓的“基准DN"。
为什么要用LDAP目录树来存储数据,用MySQL不行吗,为什么非要搞出一个树形的数据库呢?
是因为用树形结构存储数据,查询效率更高(具体为什么,可以看一下关系型数据库索引的实现原理——B树/B+树)。在某些特定的场景下,使用树形数据库更理想。比如:需要储存大量的数据,而且数据不是经常更改,需要很快速的查找。

Docker搭建OpenLDAP服务器

拉取openldap镜像

docker pull osixia/openldap:latest

在这里插入图片描述

运行

sudo docker run -itd -p 389:389 --name ldap-server --restart=always --env LDAP_ORGANISATION="example" --env LDAP_DOMAIN="example.com" --env LDAP_ADMIN_PASSWORD="123456" --detach  osixia/openldap:latest

在这里插入图片描述
查看OpenLDAP相关信息

docker ps | grep openldap

在这里插入图片描述进入容器

docker exec -it my-openldap-container bash

在这里插入图片描述
测试配置文件
使用slaptest可以确认配置文件信息是否正确

slaptest

在这里插入图片描述
修改国内镜像源
https://www.cnblogs.com/xlizi/p/13452554.html

使用ldapsearch命令进行数据查询

查询Option介绍

Option说明
-Hldapuri,格式为ldap://机器名或者IP:端口号,不能与-h和-p同时使用
-hLDAP服务器IP或者可解析的hostname,与-p可结合使用,不能与-H同时使用
-pLDAP服务器端口号,与-h可结合使用,不能与-H同时使用
-D所绑定的服务器的DN
-x使用简单认证方式
-w绑定DN的密码,与-W二者选一
-W不输入密码,会交互式的提示用户输入密码,与-w二者选一
-f指定输入条件,在RFC 4515中有更详细的说明
-c出错后忽略当前错误继续执行,缺省情况下遇到错误即终止
-n模拟操作但并不实际执行,用于验证,常与-v一同使用进行问题定位
-v显示详细信息
-d显示debug信息,可设定级别
-s指定搜索范围, 可选值:base/one/sub/children
指定ldapuri查询
ldapsearch -x -H ldap://localhost:389 -b dc=example,dc=org -D "cn=admin,dc=example,dc=com" -w 123456

指定主机名和端口号

ldapsearch -x -h ldap://192.168.23.198 -p 389 -b    cn=example,dc=org -D "cn=admin,dc=example,dc=com"   -w 123456

指定过滤条件:按照dn进行过滤

ldapsearch -x -H ldap://localhost  -b cn=admin,dc=example,dc=org -D "cn=admin,dc=example,dc=com" -w 123456

使用模糊匹配
查看当期根下的ou信息

ldapsearch -x -H ldap://localhost  -b dc=example,dc=org -D "cn=admin,dc=example,dc=com" -w 123456 "ou=*"

使用cn=xxx,dc=xxx,ou=xxx进行过滤

ldapsearch -x -H ldap://localhost  -b dc=example,dc=org -D "cn=admin,dc=example,dc=com" -w 123456 "cn=admin"
ldapsearch -x -H ldap://localhost  -b dc=example,dc=org -D "cn=admin,dc=example,dc=com" -w 123456 "ou=People"
ldapsearch -x -H ldap://localhost  -b dc=example,dc=org -D "cn=admin,dc=example,dc=com" -w 123456 "dc=example"

返回指定条件
后面可以加sn cn title mail uid

ldapsearch -x -H ldap://localhost  -b cn=admin,dc=example,dc=org -D "cn=admin,dc=example,dc=com" -w 123456 sn cn  title mail uid

容器外查询

docker exec -it my-openldap-container ldapsearch -x -H ldap://localhost -b dc=example,dc=org -D "cn=admin,dc=example,dc=com" -w 123456

参考:
https://www.jianshu.com/p/7e4d99f6baaf


http://chatgpt.dhexx.cn/article/mOmuV4bO.shtml

相关文章

Ldapsearch

这里我们学习Ldapsearch的用法,主要是获取域中用户、主机、用户组、指定用户组中的用户信息 测试环境 域控:Windows 2016,域名:test.lab测试主机:未加入域,和域控在一个网段,Kali Ldapsearch…

SQL标准中的四种隔离级别

事务并发引起的问题排序: 脏读 > 不可重复读 > 幻读 我们上边所说的舍弃一部分隔离性来换取一部分性能在这里就体现在:设立一些隔离级别,隔离级别越低,越严重的问题就越可能发生。有一帮人(并不是设计MySQL的大叔…

标准化查询语言—SQL

标准化查询语言—SQL 1. SQL语言简介 SQL即结构化查询语言,是Structured Query Language的缩写, 是介于关系代数和关系演算之间的语言。其主要功能是同各种数据库建立联系,进行沟通。 SQL是关系数据库的标准语言。 2. SQL基本特点 SQL语言…

SQL Server 2019企业版和标准版的区别?

来源公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__bizMzI1NTQyNzg3MQ&mid2247485400&idx1&sn432b580ed77224bf883db109cb7767b4&chksmea3753a8dd40dabed0763a002e1477a9688481337757869a32b3ccd90d5bc470be305bb48417&…

关系数据库标准语言SQL

概述 SQL是一个综合的、功能极强、又简单易学,既是独立语言又是嵌式性语言。语言风格统一,其集数据查询、数据操纵、数据定义和数据控制等功能于一体,可以独立完成数据库生命周期的全部活动。 1、其主要特点如下: 综合统一 高度非过程化 …

关系数据库标准语言SQL详解

关系数据库标准语言SQL SQL之所以能够为用户和业界所接受并成为国际标准,是因为它是一个综合的、功能极强又简洁易学的语言。SQL集数据查询、数据操作、数据定义和数据控制 功能于一体,其主要特点包括以下几个部分: 综合统一 SQL集数据定义语…

sql语句规范

修改表名称:rename table 原始表名称 to 新的表名称; SQL注释 一般在编写sql脚本文件时需要添加合理的注释信息。 单行注释:select 1; #说明信息 或者 select 1; – 说明信息。 多行注释: /*开头 */收尾 数据类型 数值型 5种整型 tinyin…

SQL语言的规则与规范

SQL语言的规则与规范 前言一、SQL概述1、SQL背景知识2、SQL语言排行榜3、SQL 分类 二、SQL语言的规则与规范1、基本规则2、SQL大小写规范 (建议遵守)3、注 释4、命名规则(暂时了解)5、数据导入指令 前言 本博主将用CSDN记录软件开…

标准SQL

SQL是Structured Query Language的缩写,它的前身是著名的关系数据库原型系统System R所采用的SEQUEL语言。作为一种访问关系型数据库的标准语言,SQL自问世以来得到了广泛的应用,不仅是著名的大型商用数据库产品Oracle、DB2、Sybase、SQL Serv…

SQL标准的历史

SQL标准已经存在30多年了,它改变了吗?绝对的!了解从SQL-86到现代SQL(当今的标准数据语言)的过程。 SQL是IBM在20世纪70年代由IBM公司创建的。1974年,Donald Chamberlin和Raymond Boyce发表了SEQUEL:《A Structured English Query Language》&#xff0…

SQL语法基础篇 —— 常用的SQL标准

常用的SQL标准 SQL有两个主要的标准,分别是SQL92和SQL99。92和99代表了标准提出的时间,SQL92就是92年提出的标准规范。除了SQL92和SQL99以外,还有其他的标准。 最重要的SQL标准就是SQL92和SQL99。一般来说SQL92的形式更简单,但是…

mysql多表查询(一口气解决掉:自连接 左右连接 满连接等)

多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,…

【第一章】SQL基础知识

目录 ​编辑 1. 认识SQL 1.1 SQL的标准 1.2 SQL的种类 1.3 SQL的功能 2. 常量 2.1 数字常量 2.2 字符串常量 2.3 日期和时间常量 2.4 符号常量 3. 变量 3.1 局部变量 3.2 全局变量 4. 运算符 4.1 算术运算符 4.2 比较运算符 4.3 逻辑运算符 4.4 按位运算符 …

C# WinForm中NotifyICon控件的用法【1】

任务栏中的图标是一些进程的快捷方式,这些进程在计算机后台运行,如防病毒程序或音量控制。 平时我们在使用QQ的时候,QQ主界面隐藏到系统托盘里,需要调用的时候在点击出来,很好很强大。 那么我们在C#中如何实现呢。本…

notify() notifyAll() 区别

notify 参考:https://blog.csdn.net/weixin_44121696/article/details/109306019 public class ObjectTest {public static void main(String[] args) {Object objectLock new Object();new Thread(() -> {synchronized (objectLock) {System.out.println(Thre…

NotifyIcon的属性、事件、方法

参考文章: NotifyIcon控件的使用. 属性 属性名操作博主翻译ContextMenuStrip可绑定ContextMenuStrip控件当用户右击该图标,显示的快捷菜单Icon必须选择一个ico格式的图片,否则右下角任务栏不会出现对象的可见性级别。所有属性都适用 事件 1.鼠标双击…

notify和notifyAll

notify: notify只会唤醒众多等待线程中的其中一个线程 用包子铺案例来演示一下 package com.thread;/*** author 邓亚非*/ public class TestNotify {private static Object objectnew Object();public static void main(String[] args) {// 顾客1线程new Thread(new …

notify和notifyall的区别

文章目录 场景分析例子经典java线程状态流转图 场景 调用wait的线程的唤醒,一般通过notify和notifyAll,但是两者之间有什么区别呢? 分析 线程调用synchronized方法或者synchronized代码块需要获取对象锁,如果没有获取则进入锁池线程调用wa…

Winform从入门到精通(14)——NotifyIcon(史上最全)

文章目录 前言:一、属性1、BalloonTipIcon1.1 ToolTipIcon.Error1.2 ToolTipIcon.Info1.3 ToolTipIcon.Warning1.4 ToolTipIcon.None2、BalloonTipText3、BalloonTipTitle4、Icon4.1 界面设置icon属性4.2 代码设置Icon属性5、Tag6、Text7、Visible

WPF利用NotifyIcon创建任务栏图标(菜鸟教程)

学习目标: 记录从WPF应用创建开始,一步步到任务栏图标创建的全过程。 流程: 1、环境:Win10 VS2017 打开VS2017,选择文件 -> 新建 -> 项目 -> Visual C# -> Windows桌面 ->WPF应用 -> 更改项目名为…