LDAP中filter的使用

LDAP Studying Note

LDAP(Light Directory Access Portocol),它是基于X.500标准的轻量级目录访问协议。

What is LDAP

LDAP是指轻量级目录访问协议,LDAP目录服务由目录数据库和一套访问协议组成

目录

目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样

目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。

LDAP的基本模型

概念

目录树

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

条目

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

对象类

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

属性

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

Acronym

DC domain component

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

UID user id

用户ID yuyang.zhang(一条记录的ID)

OU organization unit

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

CN common name

公共名称,如“Joey Young”(一条记录的名称)

SN surname

姓,如“章”

DN distinguished name

“uid=yuyang.zhang,ou=QA组,dc=example,dc=com”,一条记录的位置(唯一)

RDN relative distinguished name

相对辨别名,类似于文件系统中的相对路径,它是与目录树结构无关的部分,如“uid=yuyang.zhang”或“cn=Joey Young”

基本模型

信息模型

在LDAP中信息以树状方式组织,在树状信息中基本数据单元是条目,每个条目由属性组成,属性中存储有属性值

命名模型

LDAP的命名模型是条目定位方式,在LDAP中每个条目都有自己的DN,DN是该条目在整个树中的唯一名称标识,如同文件系统中,带路径的文件名就是DN

功能模型

在LDAP中共有四类10种操作:

  • 查询类操作

    搜索、比较

  • 更新类操作

    添加条目、删除条目、修改条目、修改条目名

  • 认证类操作

    绑定、解绑

  • 其他操作

    放弃、扩展操作

安全模型

LDAP的安全模型主要通过身份认证、安全通道和访问控制来实现

LDAP的使用

统一身份认证主要是改变原有的认证策略,使需要认证的软件都通过LDAP进行认证,在统一身份认证之后,用户的所有信息都存储在AD Server中。终端用户在需要使用公司内部服务的时候,都需要通过AD服务器的认证。

以PHP脚本作为例子:

1
2
3
4
5
$ldapconn = ldap_connect(“10.1.8.78")
$ldapbind = ldap_bind($ldapconn, 'username', $ldappass);
$searchRows= ldap_search($ldapconn, $basedn, "(cn=*)");
$searchResult = ldap_get_entries($ldapconn, $searchRows);
ldap_close($ldapconn);
  1. 连接LDAP服务器
  2. 绑定到LDAP服务器
  3. 在LDAP服务器上执行所需的任何操作
  4. 释放LDAP服务器的连接

LDAP Filter Note

运算符

  • 等于(EQUAL TO): =
  • 大于等于(Greater than): >=
  • 小于等于(Less than): <=
  • 通配符(wildcard): *

逻辑运算符

  • 逻辑与(logical AND): &
  • 逻辑或(logical OR): |
  • 逻辑非(logical NOT): !

举例操作

以用户信息存储来举例,假设,用户目录树ou=user,dc=domain,结构如下:

1
2
3
4
5
6
dc=domain
|-ou=user
|-cn=zhangsan
|-cn=lisi
|-cn=wangwu
|-cn=zhaoliu

用户信息属性如下:

1
2
3
4
5
6
7
8
9
cn=zhangsan
objectClass=top
objectClass=person
name=张三
sex=男
age=28
pwd=123456
[email protected]
desc=描述
  • 查询所有name为张三,sex为男的用户

    (&(name=张三)(sex=男))

  • 查询所有age不为28的用户

    (!(age=28))

  • 查询所有age为28,并且name不为张三的用户

    (&(age=28)(!(name=张三)))

  • 查询所有age为28,或者name为张三的用户

    (|(age=28)(name=张三))

  • 查询所有name的姓为张,或者desc包含描述的用户

    (|(name=张*)(desc=*描述*))

  • 查询所有有email为空的用户

    (email=)

  • 查询所有没有desc属性的用户

    (!(desc=*))

  • 查询所有有desc属性的用户

    (desc=*)

  • 在compass中:
  • 格式为:(&(objectClass=top)([email protected])(cn={login}))
  • 必须加{login}来读取登录时带的信息,赋予给cn

猜你喜欢

转载自www.cnblogs.com/chenne69163/p/12084086.html
今日推荐