第 4 章 跟踪对目录条目的修改

在某些情况下,跟踪何时对条目进行更改非常有用。目录服务器跟踪条目修改有两个方面:
  • 使用更改序列号来跟踪对数据库的更改。这与修改复制和同步中使用的序列号操作类似。每个普通目录操作都会触发序列号。
  • 分配创建或修改信息。这些属性记录了创建和最近修改条目的用户的名称,以及创建和修改的时间戳。
注意
条目更新序列号(USN)、修改时间和名称,以及创建时间和名称都是操作属性,且不会在常规 ldapsearch 中返回。有关运行搜索操作属性的详情,请参考 第 14.4.7 节 “搜索过期属性”

4.1. 通过更新序列号跟踪数据库修改

USN 插件使 LDAP 客户端和服务器能够识别是否更改了条目。

4.1.1. 条目序列号概述

启用 USN 插件后,更新序列号(USN)是对条目执行写入操作时分配给条目的序列号。(写操作包括 add、modify、modrdn 和 delete 操作。内部数据库操作(如导出操作)没有在更新序列中计算。 USN 计数器跟踪最近分配的 USN。

4.1.1.1. 本地和全球美国

USN 全局评估整个数据库,而不是单个条目。USN 与复制和同步的更改序列号类似,因此只需选择来跟踪数据库或目录中的任何更改。但是,条目 USN 独立于 CSNs 维护,而 USN 不会被复制。
条目显示在 entryUSN 操作属性中对该条目最后一次修改的更改号。有关操作属性的详情,请参考 第 14.4.7 节 “搜索过期属性”

例 4.1. Entry USN 示例

要显示 uid=example,ou=People,dc=example,dc=com 用户条目的 entryusn 属性:
# ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com:389 -x -b "uid=example,ou=People,dc=example,dc=com" -s base -x entryusn

dn: uid=example,ou=People,dc=example,dc=com
entryusn: 17653
USN 插件有两种模式,本地模式和全局模式:
  • 在本地模式中,每个后端数据库都有一个 USN 插件实例,它带有特定于该后端数据库的 USN 计数器。这是默认的设置。
  • 在全局模式中,有 USN 插件的全局实例,其具有适用于整个目录进行的全局 USN 计数器。
当 USN 插件设置为 local 模式时,结果将限制为本地后端数据库。当 USN 插件设置为全局模式时,返回的结果将整个目录。
root DSE 显示分配给 lastusn 属性中数据库中任何条目的最新 USN。当 USN 插件被设置为 local 模式时,因此每个数据库都有自己的本地 USN 计数器,最后一个USN 会显示分配 USN 和 USN 的数据库:
lastusn;database_name:USN
例如:
lastusn;example1: 2130
lastusn;example2: 2070
在全局模式中,当数据库使用共享 USN 计数器时,最后一个USN 属性仅显示最新的 USN :
lastusn: 4200

4.1.1.2. 导入 USN 条目

导入条目后,USN 插件使用 nsslapd-entryusn-import-initval 属性来检查条目是否分配了 USN。如果 nsslapd-entryusn-import-initval 的值为 number,导入的条目将使用这个数字值作为条目的 USN。如果 nsslapd-entryusn-import-initval 的值不是数字,则 USN 插件将使用 lastUSN 属性的值,并将它递增为导入条目的 USN。

4.1.2. 启用 USN 插件

这部分论述了如何启用 USN 插件来记录条目上的 USNs。

4.1.2.1. 使用命令行启用 USN 插件

使用命令行启用 USN 插件:
  1. 使用 dsconf 工具启用插件:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin usn enable
  2. 重启实例:
    # dsctl instance_name restart

4.1.2.2. 使用 Web 控制台启用 USN 插件

使用 Web 控制台启用 USN 插件:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”
  2. 选择实例。
  3. 选择 Plugins 菜单。
  4. 选择 USN 插件。
  5. 将状态更改为 ON 以启用插件。

4.1.3. Global USNs

使用默认设置时,Directory 服务器为每个后端数据库使用唯一的更新序列号(USN)。或者,您可以在所有后端数据库中启用唯一的 USN。
注意
必须启用 USN 插件才能使用此功能。请参阅 第 4.1.2 节 “启用 USN 插件”

4.1.3.1. 确定是否启用全球美国

这部分论述了如何识别是否在所有后端数据库中启用 USN。
4.1.3.1.1. 使用命令行识别是否启用全局美国
使用命令行显示全局 USN 功能的当前状态:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin usn global
USN global mode is disabled
4.1.3.1.2. 确定是否通过 Web 控制台启用全局美国
使用 Web 控制台显示全局 USN 功能的当前状态:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”
  2. 选择实例。
  3. 选择 Plugins 菜单。
  4. 选择 USN 插件。
  5. 验证 USN Global 开关是否已设置为 On

4.1.3.2. 启用全球美国

4.1.3.2.1. 使用命令行启用全局 USN
使用命令行启用全局 USN :
  1. 启用全局 USN:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin usn global on
  2. 重启实例:
    # dsctl instance_name restart
4.1.3.2.2. 使用 Web 控制台启用全局 USN
使用 Web 控制台启用全局 USN:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”
  2. 选择实例。
  3. 打开 Plugins 菜单。
  4. 选择 USN 插件。
  5. 将插件的状态更改为 On
  6. USN Global 状态更改为 On

4.1.4. 清理 USN Tombstone 条目

当删除该条目时,USN 插件会将条目移到 tombstone 条目。如果启用了复制,则 USNReplication 插件都会保留单独的 tombstone 条目。两个 tombstone 条目都由复制过程删除,但对于服务器性能,删除 USN tombstones 有助于:
  • 在将服务器转换为副本前
  • 为服务器可用内存

4.1.4.1. 使用命令行清理 USN Tombstone 条目

使用命令行从 dc=example,dc=com 后缀中删除所有 USN tombstone 条目:
# dsconf -D "cn=Directory Manager" ldap://server.example.com plugin usn cleanup -s "dc=example,dc=com"
(可选)将 -o max_USN 选项传给命令,以删除到指定的值的 USN tombstone 条目。

4.1.4.2. 使用 Web 控制台清理 USN Tombstone 条目

使用 Web 控制台从 dc=example,dc=com 后缀中删除所有 USN tombstone 条目:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”
  2. 选择实例。
  3. 打开 Plugins 菜单。
  4. 选择 USN 插件。
  5. Run Fixup Task 按钮。
  6. 填写字段,然后按 Run