6.3. 关于知识库参考

在将数据分发到多个数据库后,使用 知识引用 定义分布式数据之间的关系,指向不同数据库中保存的目录信息的指针。目录服务器提供以下知识引用,以帮助将分布式数据链接到单个目录树:
  • 引用 - 服务器将一类信息返回到客户端应用,指示客户端应用程序需要联系另一个服务器来满足该请求。
  • 链 - 服务器代表客户端应用程序联系其他服务器,并在操作完成后将结果返回给客户端应用程序。
以下小节更详细地描述了并比较这两种类型的知识参考。

6.3.1. 使用引用

参照 (referral) 一个服务器返回的信息片段会告知客户端应用程序要联系以继续操作请求。当客户端应用程序请求本地服务器上不存在的目录条目时,会发生此重定向机制。
目录服务器支持两种类型的引用:
  • 默认引用 - 当客户端应用程序显示服务器没有匹配后缀的 DN 时,目录会返回默认引用。默认引用存储在服务器的配置文件中。可以为 Directory Server 设置一个默认引用,每个数据库都有一个默认的引用。
    每个数据库的默认引用是通过后缀配置信息进行的。当禁用数据库的后缀时,将目录服务配置为将默认引用返回到向该后缀发出的客户端请求。
    有关后缀的详情,请参考 第 6.2.2 节 “关于 Suffixes”。有关配置后缀的详情,请参考 Red Hat Directory Server Administration Guide
  • 智能引用 - 智能引用存储在目录服务本身内的条目上。智能引用指向目录服务器,其了解其 DN 与包含智能引用的条目的 DN 匹配。
所有引用均以 LDAP 统一资源 locator 或 LDAP URL 的格式返回。以下小节描述了 LDAP 引用的结构,然后描述目录服务器支持的两种引用类型。

6.3.1.1. LDAP 推荐结构

LDAP 引用包含 LDAP URL 格式的信息。LDAP URL 包含以下信息:
  • 要联系的服务器的主机名。
  • 配置为侦听 LDAP 请求的服务器上的端口号。
  • 基本 DN(用于搜索操作)或目标 DN(用于添加、删除和修改操作)。
例如,客户端应用搜索 dc=example,dc=com 以查找具有 surname 值 Jensen 的条目。引用将以下 LDAP URL 返回给客户端应用程序:
ldap://europe.example.com:389/ou=people, l=europe,dc=example,dc=com
此引用指示客户端应用程序联系端口 389 上的主机 europe.example.com,并使用根后缀 ou=people, l=europe,dc=example,dc=com 提交搜索。
LDAP 客户端应用程序决定如何处理引用。有些客户端应用程序会自动重试服务器中的操作。其他客户端应用程序会将参考信息返回给用户。Red Hat Directory Server (如命令行实用程序)提供的大多数 LDAP 客户端应用程序会自动遵循引用。初始目录请求中提供的相同绑定凭证用于访问服务器。
大多数客户端应用程序都遵循有限数量的引用或 跃点。后面的引用数量的限制减少了客户端应用程序试图完成目录查找请求的时间,并有助于消除由环形引用模式导致的挂起进程。

6.3.1.2. 关于默认引用

当联系的服务器或数据库不包含请求的数据时,默认引用将返回到客户端。
目录服务器通过比较所请求目录对象的 DN 与本地服务器支持的目录后缀进行比较,以确定是否返回默认引用。如果 DN 与支持的后缀不匹配,目录服务器会返回一个默认的引用。
例如,目录客户端请求以下目录条目: uid=bjensen,ou=people,dc=example,dc=com
但是,服务器仅管理 dc=europe,dc=example,dc=com 后缀下存储的条目。目录会返回客户端,指示 dc=example,dc=com 后缀下存储的条目要联系哪个服务器。然后,客户端联系适当的服务器并重新提交原始请求。
将默认引用配置为指向包含目录服务分发的更多信息的目录服务器。服务器的默认引用由 nsslapd-referral 属性设置。目录中每个数据库的默认引用由配置中的数据库条目中的 nsslapd-referral 属性设置。这些属性值存储在 dse.ldif 文件中。
有关配置默认引用的详情,请参考 Red Hat Directory Server Administration Guide

6.3.1.3. 智能引用

目录服务器也可以使用 智能引用。智能引用将目录条目或目录树关联到特定的 LDAP URL。这意味着请求可以转发到以下任意一种:
  • 不同服务器上包含的同一命名空间。
  • 本地服务器上的不同命名空间。
  • 同一服务器上的不同命名空间。
与默认引用不同,智能引用存储在目录服务本身中。有关配置和管理智能引用的详情,请参考 红帽目录服务器管理指南
例如,Example Corp. 的美国办公室的目录服务包含 ou=people,dc=example,dc=com 目录分支点。
通过指定 ou=people 条目本身的智能引用,将此分支上的所有请求重定向到示例公司欧洲办事处的 ou=people 分支。智能引用是 ldap://europe.example.com:389/ou=people,dc=example,dc=com
对 America 目录服务的人员分支提出的任何请求都将重定向到欧洲目录。下面是以下说明:

图 6.7. 使用智能引用重定向请求

使用智能引用重定向请求
相同的机制可用于将查询重定向到使用不同的命名空间的不同服务器。例如,一个员工在意大利语办事处的 Example Corp. 工作。请针对美国示例 Corp. 员工的电话号码向欧洲目录服务提出请求。目录服务返回引用 ldap://europe.example.com:389/ou=US 员工,dc=example,dc=com

图 6.8. 将查询重定向到不同的服务器和客户端

将查询重定向到不同的服务器和客户端
最后,如果在同一服务器上提供了多个后缀,可以将查询重定向到在同一计算机上提供的另一个命名空间。例如,要将本地计算机上的所有查询重定向到 o=example,c=usdc=example,dc=com,然后将 smart referral ldap:///dc=example,dc=com 放置到 o=example,c=us 条目。

图 6.9. 将一个命名空间中的 Query 重定向到 Same 服务器上的Another Namespace

将一个命名空间中的 Query 重定向到 Same 服务器上的Another Namespace
注意
此 LDAP URL 中的第三斜杠表示 URL 指向同一目录服务器。
从一个命名空间创建引用仅针对其搜索以区分名称的客户端使用。其他类型的操作(如 ou=people,o=example,c=US )没有被正确执行。
有关 LDAP URLS 以及如何在目录服务器条目中包含智能 URL 的更多信息,请参阅 红帽目录服务器管理指南

6.3.1.4. 设计智能清单的提示

尽管智能引用易于实现,但在使用前请考虑以下点:
  • 简化设计。
    使用复杂的 Web 部署目录服务会导致管理困难。过度使用智能引用也可以导致循环引用模式。例如,一个引用指向 LDAP URL,该 URL 又指向另一个 LDAP URL,以此类推,直到链中的参考位置返回原始服务器。下面是以下说明:

    图 6.10. Circular 推荐模式

    Circular 推荐模式
  • 重定向位于主要分支点.
    限制引用使用,以便在目录树的后缀级别处理重定向。智能引用将 leaf(non-branch)条目的查找请求重定向到不同的服务器和 DN。因此,它会临时使用 smart 引用作为别名机制,从而导致出现一种复杂而困难的方法来保护目录结构。将引用限制为目录树的后缀或主要分支点,限制了必须管理的引用数量,从而减少了目录的管理开销。
  • 考虑安全性影响。
    访问控制不可跨越引用。即使源自该请求的服务器允许访问条目,智能引用时也向其他服务器发送客户端请求,但客户端应用可能无法被允许访问。
    此外,客户端的凭据需要在服务器上可用,上面提到了客户端进行客户端身份验证。

6.3.2. 使用链

链(Chaining)是一种将请求中继到其他服务器的方法。此方法通过数据库链接实现。数据库链接,如 第 6.2 节 “分发目录数据” 所述,不包含任何数据。相反,它会将客户端应用程序请求重定向到包含数据的远程服务器。
在串联过程中,服务器从客户端应用程序收到服务器不包含的数据的请求。使用数据库链接时,服务器会代表客户端应用程序联系其他服务器,并将结果返回到客户端应用。
每个数据库链接都与保留数据的远程服务器关联。配置包含数据库链接复制的备用远程服务器,以便在出现故障时使用。有关配置数据库链接的更多信息,请参阅 红帽目录服务器管理指南
数据库链接提供以下功能:
  • 不允许访问远程数据。
    由于数据库链接可以解决客户端请求,因此数据分布在客户端中完全隐藏。
  • 动态管理。
    可在整个系统一直供客户端应用程序使用时,在系统中添加或删除目录服务的一部分。数据库链接可以临时返回引用到应用程序,直到在目录服务中重新分发条目。
    这也可以通过后缀本身实现,它可以返回引用而不是将客户端应用程序转发到数据库。
  • 访问控制.
    数据库链接模拟客户端应用,为远程服务器提供适当的授权身份。当不需要访问控制评估时,可以在远程服务器上禁用用户模仿。有关配置数据库链接的更多信息,请参阅 红帽目录服务器管理指南

6.3.3. 在引用和链之间决定

连接目录分区的方法都各有优缺点。要使用的方法或方法组合取决于目录服务的特定需求。
两个知识引用之间的主要区别在于了解如何找到分布式信息的情报位置。在连锁系统中,在服务器中实施智能功能。在使用引用的系统中,智能在客户端应用程序中实施。
串联会降低客户端的复杂性,但会降低服务器复杂性。链的服务器必须与远程服务器一起使用,并将结果发送到目录客户端。
使用引用时,客户端必须处理查找引用和整合搜索结果。但是,参考者为客户端应用程序提供了更大的灵活性,并允许开发人员在分布式目录操作中为用户提供更好的反馈。
以下小节描述了在更详细引用和链接之间的一些更具体的不同之处。

6.3.3.1. 使用差异

有些客户端应用程序不支持引用。链允许客户端应用程序与单一服务器通信,并仍然访问存储在多个服务器上的数据。有时,当公司的网络使用代理时,引用无法正常工作。例如,客户端应用可能具有仅与防火墙中的一个服务器通信的权限。如果该应用程序被称为其他服务器,则无法成功联系它。
在使用引用时,客户端还必须能够正确进行身份验证,这意味着要引用客户端的服务器需要包含客户端的凭据。使用链时,客户端身份验证仅会出现一次。客户端不需要在将请求链的服务器上再次进行身份验证。

6.3.3.2. 评估访问控制

链评估访问控制与引用不同。使用引用时,客户端的条目必须在所有目标服务器上存在。对于链,客户端条目不需要在所有目标服务器上。

使用引用执行搜索请求

下图显示了使用参考到服务器的客户端请求:

图 6.11. 使用引用将客户端请求发送到服务器

使用引用将客户端请求发送到服务器
在以上说明中,客户端应用程序执行以下步骤:
  1. 客户端应用首先与服务器 A 绑定。
  2. server A 包含一个用于提供用户名和密码的客户端的条目,因此它会返回一个 bind 接受消息。为使推荐工作,客户端条目必须在 server A 上显示。
  3. 客户端应用将操作请求发送到服务器 A。
  4. 但是,Server A 不包含请求的信息。相反,服务器 A 会向客户端应用程序返回一个引用,指示它联系服务器 B。
  5. 然后,客户端应用程序会向 Server B 发送绑定请求。要成功绑定,服务器 B 还必须包含客户端应用程序的条目。
  6. 绑定成功,客户端应用程序现在可以将其搜索操作重新提交到 Server B。
这个方法要求 Server B 从 Server A 中包含客户端条目的复制副本。

使用链执行搜索请求

使用链解决跨服务器复制客户端条目的问题。在链的系统上,搜索请求会多次转发,直到有响应为止。

图 6.12. 使用链将客户端请求发送到服务器

使用链将客户端请求发送到服务器
在以上说明中,执行以下步骤:
  1. 客户端应用与服务器 A 绑定,服务器 A 会尝试确认用户名和密码是否正确。
  2. 服务器 A 不包含与客户端应用程序对应的条目。相反,它包含一个到 Server B 的数据库链接,其中包含客户端的实际条目。服务器 A 将绑定请求发送到服务器 B。
  3. 服务器 B 将接受响应发送到服务器 A。
  4. 然后,服务器 A 使用数据库链接处理客户端应用的请求。数据库链接联系位于 Server B 上的远程数据存储,以处理搜索操作。
在链系统中,与客户端应用程序对应的条目不需要位于与客户端请求的数据相同的服务器上。

图 6.13. 使用不同服务器验证客户端和检索数据

使用不同服务器验证客户端和检索数据
在这个图示中会执行以下步骤:
  1. 客户端应用与服务器 A 绑定,服务器 A 会尝试确认用户名和密码是否正确。
  2. 服务器 A 不包含与客户端应用程序对应的条目。相反,它包含一个到 Server B 的数据库链接,其中包含客户端的实际条目。服务器 A 将绑定请求发送到服务器 B。
  3. 服务器 B 将接受响应发送到服务器 A。
  4. 然后,服务器 A 使用另一个数据库链接处理客户端应用的请求。数据库链接联系位于 Server C 上的远程数据存储,以处理搜索操作。

不支持的访问控制

数据库链接不支持以下访问控制:

  • 当用户条目位于其他服务器上时,不支持访问用户条目的内容。这包括基于组、过滤器和角色的访问控制。
  • 可能会拒绝基于客户端 IP 地址或 DNS 域的控制。这是因为数据库链接在联系远程服务器时模拟客户端。如果远程数据库包含基于 IP 的访问控制,它会使用数据库链接的域而不是原始客户端域来评估它们。