zoukankan      html  css  js  c++  java
  • 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=zhangsan@163.com
    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=*)

    • 在CPS中:
    • 格式为:(&(objectClass=top)(cn=*******)(cn={login}))
    • 必须加{login}来读取登录时带的信息,赋予给cn
  • 相关阅读:
    JavaScript 常见面试题
    textarea 元素的 placeholder 属性不显示
    CSS 画一个八卦
    CSS 画一个心
    JS判断客户端是否是iOS或者Android端
    前端面试题(一)
    选中文字改变默认颜色
    红包雨的实现
    template 的使用
    函数和入参
  • 原文地址:https://www.cnblogs.com/chenne69163/p/12084086.html
Copyright © 2011-2022 走看看