LDAP(目录访问协议)系列之1-如何获知不同类型LDAP服务上的Entry的变化?

来源:互联网 发布:山航待遇怎么样知乎 编辑:程序博客网 时间:2024/06/03 00:49

 我们知道LDAP是一种协议标准,目前有很多厂商实现了这个标准,并有了自己的产品。

比如,下面的产品都是实现LDAP协议的具体厂商的产品。

       - IBM Tivoli Directory Server 6.1, 6.2
       - Microsoft Active Directory 2003, 2008
       - Microsoft Active Directory Application Mode Retail version     
       - Novell eDirectory Server 8.8, 8.8.5
       - Sun Java System Directory Server Enterprise Edition 6.0, 6.3.3, 7.0

      - Red Hat Directory Server 8.0
   
       - Oracle Internet Directory 10.1.2.0.2, 10.1.4.0.1, 11.1.1.2.0

       -OpenLDAP

那么,当一个用户在LDAP服务器上添加,删除或者修改了一条记录(Entry)之后,

我们如何知道,其修改了哪些应用记录呢?换句话说。LDAP服务器是如何记录器修改的

历史的呢?

笔者总结起来,总共有两种方式,

方式一 把记录信息写到日志文件里面,比如,

(1)ADS\ADM

其利用了ADS\ADM的USN,Update sequence number,其记录了Entry的修改的记录,比如当前的新建了7个Entry,那么USN=7,如果你又新建了一个Entry,则这个USN变成了8。此后,你又删除了其中一个entry,则此时的USN=9,但是实际的entry数量为7,如果你又修改了其中一个entry,则USN又变成了10.这样通过比较两次查询到USN的值就可以知道,

在两次查询中间,服务器上记录发生了什么变化。

(2)OID(Oracle Internet Directory Server)

通过查询OID LDAP服务器上的changeLog来实现追踪LDAP服务器上数据的变化的,每一次对LDAP的服务器上的变化,都对在changeLog里面生成一个logNumber,然后这个LogNumber记录的是修改的次数,这样通过对LogNumber的追踪可以发现LDAP服务上的变化,此Log里面包含了变化的Entry的DN,opcode以及objectclass等信息,但是唯一遗憾的是删除操作的时候,其changeLog里面不会包含objectClass的信息.

(3) OpenLDAP

除了是通过AccessLog来实现追踪服务器上数据的变化之外,其他的和OID的方式以及缺陷是一样的。

最大的优点是,即使网络出现了问题,客户端在下次登录到服务之后,还是能知道这段时间内,LDAP服务上的变化,

因为这些变化都白纸黑字的在LDAP服务器上存着呢。

 

方式二 Peristant Search原理来实现

Peristant Search的基本原理如下,当客户端与LDAP服务器端建立连接后,服务器端会和客户端建立一个消息通道,然后在客户端建立一个Message Queue,把服务器上变动的信息发送到客户端本地。从而不管服务器与客户端的连接是否仍然有效,这个的话,一旦比如因为网络问题,连接断掉了,而此时服务器却不知道,还是往客户端的Message Queue队列里面发送消息,此时会报错,从而在网络出现问题的这段时间内,LDAP服务上发生的变化,客户端就没有办法知道了。Sun Java System Directory Server Enterprise Edition,Novell eDirectory Server,IBM Tivoli Directory Server以及Redhat的Directory Server都是通过Peristant Search原理来实现。