2.3. 创建和维护数据库链接
链 意味着服务器代表客户端应用程序联系其他服务器,然后返回合并的结果。链是通过数据库链接 实施的,该链接指向远程存储的数据。当客户端应用程序从数据库链接请求数据时,数据库链接会从远程数据库检索数据并将其返回到客户端。
有关链的常规信息,请参阅 Red Hat Directory Server 部署指南中的"Designing Directory Topology"章节。第 21.8 节 “监控数据库链接活动” 介绍如何监控数据库链接活动。
2.3.1. 创建新数据库链接 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
基本数据库链接配置需要以下信息:
- 后缀信息。在由数据库链接管理的目录树中创建后缀,而不是常规数据库。此后缀与包含数据的远程服务器上的后缀对应。
- 绑定凭据。当数据库链接绑定到远程服务器时,它会模拟用户,这指定了用于与远程服务器绑定的每个数据库链接的 DN 和凭据。
- LDAP URL。这提供了数据库链接连接的远程服务器的 LDAP URL。URL 由服务器的协议(ldap 或 ldaps)、主机名或 IP 地址(IPv4 或 IPv6)组成,以及端口。
- 故障转移服务器列表。这提供了数据库链接的替代服务器列表,以便在出现故障时进行联系。此配置项是可选的。
注意
如果简单密码验证(第 20.12.1 节 “需要安全绑定”)需要安全绑定,则任何链操作都将失败,除非在安全连接中进行。建议使用安全连接(TLS 和 STARTTLS 连接或 SASL 身份验证)。
2.3.1.1. 使用命令行创建新数据库链接 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
要创建新数据库链接,请使用 dsconf chaining link-create 命令。例如:
dsconf -D "cn=Directory Manager" ldap://server.example.com chaining link-create --suffix="ou=Customers,dc=example,dc=com" --server-url="ldap://remote_server.example.com:389" --bind-mech="" --bind-dn="cn=proxy_user,cn=config" --bind-pw="password" "example_chain_name"
# dsconf -D "cn=Directory Manager" ldap://server.example.com chaining link-create --suffix="ou=Customers,dc=example,dc=com" --server-url="ldap://remote_server.example.com:389" --bind-mech="" --bind-dn="cn=proxy_user,cn=config" --bind-pw="password" "example_chain_name"
这会为
ou=Customers,dc=example,dc=com 创建名为 example_chain_name 的数据库链接。该链接指的是服务器 ldap://remote_server.example.com:389,并使用指定的绑定 DN 和密码进行验证。由于 --bind-mech 为空,因此链接使用简单身份验证。
注意
要为 proxy_user 授予访问数据的权限,您必须在远程服务器上的
dc=example,dc=com 后缀中创建代理 ACI 条目。如何进行此操作,请参阅 部分 第 2.3.1.4 节 “创建数据库链接时所需的设置的附加信息”
要显示您在创建数据库链接时可以设置的其他设置,请参阅:
dsconf -D "cn=Directory Manager" ldap://server.example.com chaining link-create --help
# dsconf -D "cn=Directory Manager" ldap://server.example.com chaining link-create --help
2.3.1.2. 使用 Web 控制台创建新数据库链接 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
要创建新数据库链接:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”。
- 选择实例。
- 打开 菜单。
- 按照 第 2.1.1 节 “创建后缀” 所述创建新后缀。
- 选择后缀,点 ,然后选择 Create Database Link。
- 使用与远程服务器连接的详情填写字段。例如:
- 单击 。
2.3.1.3. 管理新数据库链接的默认配置 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
使用 dsconf chaining 命令,您可以管理数据库链接的默认配置。
要显示当前的默认值,请参阅:
dsconf -D "cn=Directory Manager" ldap://server.example.com chaining config-get-def
# dsconf -D "cn=Directory Manager" ldap://server.example.com chaining config-get-def
要更改新的数据库链接配置,请使用 dsconf chaining config-set-def 命令。例如,要将
response-delay 参数设置为 30,请运行:
dsconf -D "cn=Directory Manager" ldap://server.example.com chaining config-set-def --response-delay 30
# dsconf -D "cn=Directory Manager" ldap://server.example.com chaining config-set-def --response-delay 30
示例命令为所有链连接设置默认响应超时。如果使用 dsconf instance chaining link-set 命令,您可以覆盖特定链链接的响应超时。
要查看您可以设置的所有参数的列表,请运行:
dsconf -D "cn=Directory Manager" ldap://server.example.com chaining config-set-def --help
# dsconf -D "cn=Directory Manager" ldap://server.example.com chaining config-set-def --help
2.3.1.4. 创建数据库链接时所需的设置的附加信息 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
后缀信息
后缀定义由数据库链接管理的后缀。
绑定凭证
对于从客户端应用程序将要链接到远程服务器的请求,可以为客户端应用程序提供特殊的绑定凭证。这为远程服务器提供了链操作所需的代理授权权限。如果没有绑定凭据,数据库链接作为 匿名绑定 到远程服务器。
例如,客户端应用程序向服务器 A 发送请求。服务器 A 包含一个数据库链接,将请求链到 Server B 上的数据库。
Server A 上的数据库链接使用特殊用户和密码绑定到 Server B:
服务器 B 必须包含用户条目并为此用户设置代理身份验证权限。要正确设置代理授权,请将代理 ACI 设置为任何其他 ACI。
警告
在启用链时,请仔细检查访问控制,以避免授予目录受限区域的访问权限。例如,如果在分支上创建了默认代理 ACI,则使用数据库链接连接的用户将能够查看分支下的所有条目。在某些情况下,用户不应该查看所有子树。要避免安全漏洞,请创建额外的 ACI 来限制对子树的访问。
有关 ACI 的更多信息,请参阅 第 18 章 管理访问控制。
注意
当客户端应用程序使用数据库链接来创建或修改条目时,属性
creatorsName 和 modifiersName 不会反映条目的实际创建者或修饰符。这些属性包含授予代理对远程数据服务器的授权权限的管理用户名称。
提供绑定凭证涉及在远程服务器中执行以下步骤:
- 为数据库链接创建一个管理用户,如
cn=proxy_user,cn=config。有关添加条目的详情,请参考 第 3 章 管理目录条目。 - 为在由数据库链接链的子树中创建的管理用户提供代理访问权限。有关配置 ACI 的更多信息,请参阅 第 18 章 管理访问控制例如,以下 ACI 授予对
cn=proxy_admin,cn=config用户的只读访问权限,以便仅访问设置 ACI 的子树中所含的数据。aci: (targetattr = "*")(version 3.0; acl "Proxied authorization for database links"; allow (proxy) userdn = "ldap:///cn=proxy_admin ,cn=config";)aci: (targetattr = "*")(version 3.0; acl "Proxied authorization for database links"; allow (proxy) userdn = "ldap:///cn=proxy_admin ,cn=config";)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
注意
当用户绑定到数据库链接时,用户的身份将发送到远程服务器。始终在远程服务器上评估访问控制。要使用户能够成功修改或向远程服务器写入数据,请在远程服务器上设置正确的访问控制。有关如何在链操作上下文中评估访问控制的更多信息,请参阅 第 2.3.3 节 “数据库链接和访问控制评估”。
LDAP URL
在包含数据库链接的服务器上,识别数据库链接使用 LDAP URL 连接到的远程服务器。与标准的 LDAP URL 格式不同,远程服务器的 URL 没有指定后缀。它采用 ldap://host_name 的形式:端口。
对于通过 TLS 使用 LDAP 连接到远程服务器的数据库链接,远程服务器的 LDAP URL 使用协议 LDAPS,而不是 URL 中的 LDAP,并指向服务器的安全端口。例如:
ldaps://africa.example.com:636/
ldaps://africa.example.com:636/
注意
必须在本地目录服务器和要通过 TLS 链的远程目录服务器上启用 TLS。有关启用 TLS 的详情,请参考 第 9.4 节 “启用 TLS”。
当数据库链接和远程服务器配置为使用 TLS 进行通信时,这并不意味着进行操作请求的客户端应用程序也必须使用 TLS 进行通信。客户端可以使用普通端口绑定。
绑定机制
本地服务器可以使用多种不同的连接类型和身份验证机制来连接远程服务器。
本地服务器可以连接到远程服务器的方法有三种:
- 通过标准 LDAP 端口
- 专用 LDAPS 端口
- 使用 STARTTLS,这是标准端口的安全连接
注意
如果简单密码验证(第 20.12.1 节 “需要安全绑定”)需要安全绑定,则任何链操作都将失败,除非在安全连接中进行。建议使用安全连接(TLS 和 STARTTLS 连接或 SASL 身份验证)。
本地服务器可以使用四种不同的方法来对场服务器进行身份验证。
- 空 :如果没有设置绑定机制,则服务器执行简单的身份验证,并且需要绑定 DN 和密码。
- EXTERNAL :这使用 TLS 证书向远程服务器验证场服务器。farm 服务器 URL 必须设置为安全 URL (ldaps),或者必须将
nsUseStartTLS属性设置为。另外,远程服务器必须配置为将 farm 服务器的证书映射到其绑定身份,如 红帽目录服务器配置、命令和文件参考中的 certmap.conf 部分所述。 - DIGEST-MD5 :这使用带有 DIGEST-MD5 加密的 SASL 身份验证。与简单身份验证一样,这需要
nsMultiplexorBindDN和nsMultiplexorCredentials属性来提供绑定信息。 - GSSAPI :这通过 SASL 使用基于 Kerberos 的身份验证。场服务器必须配置有 Kerberos keytab,并且远程服务器必须具有场服务器的绑定身份定义的 SASL 映射。第 9.10 节 “设置 SASL 身份映射” 中描述了设置 Kerberos keytabs 和 SASL 映射。
注意
SASL 连接可以在标准连接或 TLS 连接之间建立。
注意
如果使用 SASL,则必须将本地服务器配置为串联 SASL 和密码策略组件。为数据库链接配置添加组件,如 第 2.3.2 节 “配置链策略” 所述。
2.3.2. 配置链策略 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
这些步骤描述了目录服务器如何将客户端应用程序发出的请求链到包含数据库链接的目录服务器。这个链策略适用于 Directory 服务器上创建的所有数据库链接。
2.3.2.1. 链组件操作 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
组件是服务器中使用内部操作的任何功能单元。例如,插件被视为组件,就像在前端中一样。但是,插件实际上可能由多个组件组成(例如,ACI 插件)。
有些组件将内部 LDAP 请求发送到服务器,希望仅访问本地数据。对于此类组件,请控制链策略,以便组件能够成功完成其操作。例如,证书验证功能。串联函数检查证书所做的 LDAP 请求意味着远程服务器是可信的。如果远程服务器不被信任,则会出现安全问题。
默认情况下,所有内部操作都不会被串联,也不允许组件串联,尽管可以覆盖它们。
另外,必须在远程服务器上创建一个 ACI,以允许指定的插件在远程服务器上执行其操作。ACI 必须存在于分配给 数据库链接的后缀 中。
以下列出了组件名称、允许它们串联内部操作的潜在副作用,以及它们在远程服务器上的 ACI 中所需的权限:
- ACI 插件
- 此插件实施访问控制。用于检索和更新 ACI 属性的操作不会被串联,因为它无法安全地混合使用本地和远程 ACI 属性。但是,通过设置链组件属性,可以串联用于检索用户条目的请求:
nsActiveChainingComponents: cn=ACI Plugin,cn=plugins,cn=config
nsActiveChainingComponents: cn=ACI Plugin,cn=plugins,cn=configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 权限: Read、search 和 compare - 资源限值组件
- 此组件根据用户绑定 DN 设置服务器限制。如果允许资源限制组件链,则可以对远程用户应用资源限制。要串联资源限制组件操作,请添加链组件属性:
nsActiveChainingComponents: cn=resource limits,cn=components,cn=config
nsActiveChainingComponents: cn=resource limits,cn=components,cn=configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 权限: Read、search 和 compare - 基于证书的身份验证检查组件
- 使用外部 bind 方法时使用此组件。它从远程服务器上的数据库检索用户证书。允许此组件串联意味着基于证书的身份验证可以使用数据库链接。要串联此组件的操作,请添加串联组件属性:
nsActiveChainingComponents: cn=certificate-based authentication,cn=components,cn=config
nsActiveChainingComponents: cn=certificate-based authentication,cn=components,cn=configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 权限: Read、search 和 compare - 密码策略组件
- 此组件用于允许 SASL 绑定到远程服务器。某种形式的 SASL 身份验证需要使用用户名和密码进行身份验证。启用密码策略可让服务器验证和实施请求的特定身份验证方法,并应用适当的密码策略。要串联此组件的操作,请添加串联组件属性:
nsActiveChainingComponents: cn=password policy,cn=components,cn=config
nsActiveChainingComponents: cn=password policy,cn=components,cn=configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 权限: Read、search 和 compare - SASL 组件
- 此组件用于允许 SASL 绑定到远程服务器。要串联此组件的操作,请添加串联组件属性:
nsActiveChainingComponents: cn=password policy,cn=components,cn=config
nsActiveChainingComponents: cn=password policy,cn=components,cn=configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 权限: Read、search 和 compare - 参考完整性插件
- 此插件可确保对包含 DN 的属性进行更新被传播到包含属性指针的所有条目。例如,当删除属于组成员的条目时,该条目会自动从组中删除。通过将此插件与串联一起使用有助于在组成员远程到静态组定义时简化静态组的管理。要串联此组件的操作,请添加串联组件属性:
nsActiveChainingComponents: cn=referential integrity postoperation,cn=plugins,cn=config
nsActiveChainingComponents: cn=referential integrity postoperation,cn=plugins,cn=configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 权限: Read、search 和 compare - 属性唯一插件
- 此插件检查指定属性的所有值是否是唯一的(无重复)。如果此插件被串联,它会确认属性值在通过数据库链接更改的属性中是唯一的。要串联此组件的操作,请添加串联组件属性:
nsActiveChainingComponents: cn=attribute uniqueness,cn=plugins,cn=config
nsActiveChainingComponents: cn=attribute uniqueness,cn=plugins,cn=configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 权限: Read、search 和 compare - 角色组件
- 此组件串联了数据库中条目的角色和角色分配。将这个组件串联即使在串联的数据库中也保持角色。要串联此组件的操作,请添加串联组件属性:
nsActiveChainingComponents: cn=roles,cn=components,cn=config
nsActiveChainingComponents: cn=roles,cn=components,cn=configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 权限: Read、search 和 compare
注意
以下组件无法串联:
- roles 插件
- 密码策略组件
- 复制控制器
- 参考完整性插件
在发出链请求的服务器上启用 referential Integrity 插件时,请务必分析性能、资源和时间需求以及完整性需求。完整性检查可能会耗时,并在内存和 CPU 上排空。有关 ACI 和链的限制的详情,请参考 第 18.5 节 “ACI 的限制”。
2.3.2.1.1. 使用命令行串联组件操作 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
添加允许链的组件:
- 指定要包含在链中的组件。例如,要配置引用完整性组件可以串联操作:
dsconf -D "cn=Directory Manager" ldap://server.example.com chaining config-set \ --add-comp="cn=referential integrity postoperation,cn=components,cn=config"# dsconf -D "cn=Directory Manager" ldap://server.example.com chaining config-set \ --add-comp="cn=referential integrity postoperation,cn=components,cn=config"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关可串联的组件列表,请参阅 第 2.3.2.1 节 “链组件操作”。 - 重启实例:
dsctl instance_name restart
# dsctl instance_name restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 在远程服务器上的后缀中创建一个 ACI,其中将将操作链接到其中。例如,要为 Referential Integrity 插件创建一个 ACI:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.2.1.2. 使用 Web 控制台串联组件操作 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
添加允许链的组件:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”。
- 选择实例。
- 打开 选项卡。
- 在左侧的导航中,选择 条目。
- 单击 Components to Chain 字段下的 按钮。
- 选择组件,然后点 。
- 在远程服务器上的后缀中创建一个 ACI,其中将将操作链接到其中。例如,要为 Referential Integrity 插件创建一个 ACI:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.2.2. 链 LDAP 控制 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
无法串联 LDAP 控制发出的操作请求。默认情况下,由以下控制发出的请求由数据库链接转发到远程服务器:
- 虚拟列表视图(VLV)。此控制提供了条目的部分列表,而不是返回所有条目信息。
- 服务器端排序.此控制根据其属性值对条目进行排序,通常使用特定的匹配规则。
- 解引用。此控制从引用条目拉取指定的属性信息,并使用其余搜索结果返回此信息。
- 受管 DSA.这个控制返回智能引用作为条目,而不是遵循引用,因此智能引用本身可以被更改或删除。
- 循环检测。此控制会跟踪服务器与其他服务器链的次数。当计数到达配置的数量时,会检测到循环,并通知客户端应用程序。有关使用此控制的更多信息,请参阅 第 2.4.3 节 “检测循环”。
注意
仅在向单个数据库发出请求时,才支持服务器端排序和 VLV 控制。当客户端应用程序向多个数据库发出请求时,数据库链接不支持这些控制。
下表中列出了可以串联的 LDAP 控制及其 OID:
| 控制名称 | OID |
|---|---|
| 虚拟列表视图(VLV) | 2.16.840.1.113730.3.4.9 |
| 服务器端排序 | 1.2.840.113556.1.4.473 |
| Managed DSA | 2.16.840.1.113730.3.4.2 |
| 循环检测 | 1.3.6.1.4.1.1466.29539.12 |
| 解引用搜索 | 1.3.6.1.4.1.4203.666.5.16 |
2.3.2.2.1. 使用命令行串联 LDAP 控制 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
要串联 LDAP 控制,请使用 dsconf chaining config-set --add-control 命令。例如,转发虚拟列表视图控制:
dsconf -D "cn=Directory Manager" ldap://server.example.com chaining \
config-set --add-control="2.16.840.1.113730.3.4.9"
# dsconf -D "cn=Directory Manager" ldap://server.example.com chaining \
config-set --add-control="2.16.840.1.113730.3.4.9"
如果目录服务器的客户端创建自己的控制,并且其操作应该链接到远程服务器,请添加自定义控制的对象标识符(OID)。
有关可以串联的 LDAP 控制列表及其 OID,请参阅 表 2.1 “LDAP 控制及其 OID”。
2.3.2.2.2. 使用 Web 控制台串联 LDAP 控制 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
使用 Web 控制台串联 LDAP 控制:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”。
- 选择实例。
- 打开 菜单。
- 选择 。
- 单击 Forwarded LDAP Controls 字段下的 按钮。
- 选择 LDAP 控制并点击 。如果目录服务器的客户端创建自己的控制,并且其操作应该链接到远程服务器,请添加自定义控制的对象标识符(OID)。有关可以串联的 LDAP 控制列表及其 OID,请参阅 表 2.1 “LDAP 控制及其 OID”。
- 点击 。
2.3.3. 数据库链接和访问控制评估 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
当用户绑定到包含数据库链接的服务器时,数据库链接会将用户的身份发送到远程服务器。始终在远程服务器上评估访问控制。在远程服务器上评估的每个 LDAP 操作都使用使用代理授权控制传递的客户端应用程序的原始身份。只有用户对远程服务器中包含的子树上具有正确的访问控制时,操作才能在远程服务器中成功。这需要在远程服务器中添加常规访问控制,但有以下几个限制:
- 并非所有类型的访问控制都可使用。例如,基于角色的或基于过滤器的 ACI 需要访问用户条目。由于数据通过数据库链接访问,因此只能验证代理控制中的数据。考虑以确保用户条目位于与用户数据相同的数据库中的方式设计该目录。
- 所有访问控制都基于客户端的 IP 地址或 DNS 域,因为客户端的原始域在链过程中会丢失。远程服务器将客户端应用程序视为位于同一 IP 地址和与数据库链接相同的 DNS 域中。注意目录服务器支持 IPv4 和 IPv6 IP 地址。
以下限制适用于用于数据库链接的 ACI:
- ACI 必须位于它们使用的任何组。如果组是动态的,则组中的所有用户都必须通过 ACI 和组找到。如果组是静态的,它会链接到远程用户。
- ACI 必须位于它们使用的任何角色定义中,以及任何希望具有这些角色的用户。
- 如果用户是远程的,链接到用户条目的值(如 userattr 主题规则)的 ACI 可以正常工作。
虽然在远程服务器上始终评估访问控制,但也可以在包含数据库链接和远程服务器的服务器上评估它们。这带来了几个限制:
- 在访问控制评估过程中,用户条目的内容不一定可用(例如,如果在包含数据库链接的服务器上评估访问控制,该条目位于远程服务器上)。出于性能考虑,客户端无法进行远程查询并评估访问控制。
- 数据库链接不一定有权访问由客户端应用程序修改的条目。在执行修改操作时,数据库链接无法访问存储在远程服务器上的完整条目。如果执行删除操作,数据库链接仅了解条目的 DN。如果访问控制指定了特定的属性,则通过数据库链接执行时删除操作将失败。
注意
默认情况下,不会评估包含数据库链接的服务器上的访问控制。要覆盖此默认值,请使用 cn=database_link, cn=chaining database,cn=plugins,cn=config 条目中的
nsCheckLocalACI 属性。但是,不建议评估包含数据库链接的服务器上的访问控制,但级联链除外。