2.3. 创建和维护数据库链接
链 意味着服务器代表客户端应用程序联系其他服务器,然后返回组合结果。链是通过 数据库链接 来实施的,指向远程存储的数据。当客户端应用程序从数据库链接请求数据时,数据库链接会从远程数据库检索数据并将其返回到客户端。
有关链的常规信息,请参阅 红帽目录服务器部署指南中的"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"
这会为
ou=Customers,dc=example,dc=com
创建名为 example_chain_name
的数据库链接。该链接引用服务器 ldap://remote_server.example.com:389
,并使用指定的绑定 DN 和密码进行验证。由于 --bind-mech 被设置为空,所以链接将使用简单的身份验证。
注意
要为 proxy_user 授予访问数据的权限,您必须在远程服务器上的
dc=example,dc=com
后缀中创建 proxy ACI 条目。如何进行此操作,请参阅该部分 第 2.3.1.4 节 “创建数据库链接时所需设置的附加信息”
要显示创建数据库链接时您可以设置的额外设置,请参阅:
# 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 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
2.3.1.4. 创建数据库链接时所需设置的附加信息
后缀信息
后缀定义由数据库链接管理的后缀。
绑定凭证
对于从客户端应用程序链到远程服务器的请求,可以为客户端应用程序提供特殊的绑定凭据。这为远程服务器提供链操作所需的代理授权权限。如果没有绑定凭证,数据库链接将绑定到远程服务器作为 匿名。
例如,客户端应用程序向服务器 A 发送请求。服务器 A 包含一个数据库链接,它将请求链接到 Server B 上的数据库。
服务器 A 上的数据库链接使用特殊用户和密码绑定到服务器 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";)
注意
当用户绑定到数据库链接时,用户的身份将发送到远程服务器。始终在远程服务器上评估访问控制。要让用户成功修改或写入远程服务器,请在远程服务器上设置正确的访问控制。有关如何在串联操作上下文中评估访问控制的更多信息,请参阅 第 2.3.3 节 “数据库链接和访问控制评估”。
LDAP URL
在包含数据库链接的服务器上,识别数据库链接使用 LDAP URL 与之连接的远程服务器。与标准 LDAP URL 格式不同,远程服务器的 URL 没有指定后缀。它的格式是 ldap://host_name:port。
对于使用 TLS 连接到远程服务器的数据库链接,远程服务器的 LDAP URL 使用协议 LDAPS,而不是 URL 中的 LDAP,并指向服务器的安全端口。例如:
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 证书向远程服务器验证场服务器。场服务器 URL 必须设置为安全 URL (ldaps),或者
nsUseStartTLS
属性必须设置为 on。此外,必须将远程服务器配置为将场服务器的证书映射到其绑定身份,如 Red Hat Directory Server Configuration、命令和文件参考 中的 certmap.conf 部分所述。 - DIGEST-MD5 :这会使用带有 DIGEST-MD5 加密的 SASL 身份验证。与简单的身份验证一样,这需要
nsMultiplexorBindDN
和nsMultiplexorCredentials
属性来提供绑定信息。 - GSSAPI :这通过 SASL 使用基于 Kerberos 的身份验证。场服务器必须配置有 Kerberos keytab,而远程服务器必须具有为场服务器的绑定身份定义的 SASL 映射。第 9.10 节 “设置 SASL 身份映射” 中描述了设置 Kerberos keytab 和 SASL 映射。
注意
SASL 连接可以通过标准连接或 TLS 连接建立。
注意
如果使用 SASL,则必须将本地服务器配置为串联 SASL 和密码策略组件。为数据库链路配置添加组件,如 第 2.3.2 节 “配置链策略” 所述。
2.3.2. 配置链策略
这些步骤描述了配置客户端应用程序向包含数据库链接的目录服务器发出的 Directory 服务器链请求。这个链策略适用于 Directory 服务器上创建的所有数据库链接。
2.3.2.1. 链组件操作
组件是使用内部操作的服务器中任何功能单元。例如,插件被视为组件,如前端中的功能一样。但是,插件可能实际上由多个组件组成(如 ACI 插件)。
有些组件向服务器发送内部 LDAP 请求,预期仅访问本地数据。对于这样的组件,控制链策略,以便组件可以成功完成其操作。一个例子是证书验证功能。串联由函数发出的 LDAP 请求,以检查证书意味着远程服务器可以被信任。如果远程服务器不被信任,则存在安全问题。
默认情况下,所有内部操作都不会被串联,但不允许组件链,尽管这可以被覆盖。
另外,必须在远程服务器上创建一个 ACI,以允许指定的插件在远程服务器上执行其操作。ACI 必须存在于分配给 数据库链接的后缀 中。
以下列表列出了组件名称、允许它们串联内部操作的潜在副作用,以及它们在远程服务器上的 ACI 中所需的权限:
- ACI 插件
- 此插件实现访问控制。用于检索和更新 ACI 属性的操作不会被串联,因为它无法安全地混合本地和远程 ACI 属性。但是,通过设置 chaining components 属性可以串联用于检索用户条目的请求:
nsActiveChainingComponents: cn=ACI Plugin,cn=plugins,cn=config
权限:读、搜索和比较 - 资源限制组件
- 此组件根据用户绑定 DN 设置服务器限制。如果允许限制组件链,则可以在远程用户上应用资源限值。要串联资源限制组件操作,请添加 chaining component 属性:
nsActiveChainingComponents: cn=resource limits,cn=components,cn=config
权限:读、搜索和比较 - 基于证书的验证检查组件
- 使用外部绑定方法时使用此组件。它从远程服务器上的数据库检索用户证书。允许此组件链意味着基于证书的身份验证可以使用数据库链接。要串联此组件的操作,请添加 chaining component 属性:
nsActiveChainingComponents: cn=certificate-based authentication,cn=components,cn=config
权限:读、搜索和比较 - 密码策略组件
- 此组件用于允许 SASL 绑定到远程服务器。某些形式的 SASL 身份验证需要使用用户名和密码进行身份验证。启用密码策略允许服务器验证并实施请求的特定身份验证方法,并应用适当的密码策略。要串联此组件的操作,请添加 chaining component 属性:
nsActiveChainingComponents: cn=password policy,cn=components,cn=config
权限:读、搜索和比较 - SASL 组件
- 此组件用于允许 SASL 绑定到远程服务器。要串联此组件的操作,请添加 chaining component 属性:
nsActiveChainingComponents: cn=password policy,cn=components,cn=config
权限:读、搜索和比较 - 参考完整性插件
- 此插件可确保对包含 DN 的属性的更新传播到包含属性指针的所有条目。例如,当删除属于组成员的条目时,该条目会自动从组中删除。将这个插件与链搭配使用有助于简化在组成员远程到静态组定义时管理静态组。要串联此组件的操作,请添加 chaining component 属性:
nsActiveChainingComponents: cn=referential integrity postoperation,cn=plugins,cn=config
权限:读、搜索和比较 - 属性唯一插件
- 此插件检查指定属性的所有值是否都是唯一的(无重复)。如果串联了此插件,它将确认属性值是唯一的,即使通过数据库链接更改的属性也是如此。要串联此组件的操作,请添加 chaining component 属性:
nsActiveChainingComponents: cn=attribute uniqueness,cn=plugins,cn=config
权限:读、搜索和比较 - 角色组件
- 此组件串联了数据库中条目的角色和角色分配。串联此组件即使在串联的数据库中维护角色。要串联此组件的操作,请添加 chaining component 属性:
nsActiveChainingComponents: cn=roles,cn=components,cn=config
权限:读、搜索和比较
注意
无法串联以下组件:
- 角色插件
- 密码策略组件
- 复制插件
- 参考完整性插件
在发出链请求的服务器上启用引用完整性插件时,请确保分析性能、资源和时间需求,以及完整性需求。完整性检查可能需要耗时,并在内存和 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"
如需了解可串联的组件列表,请参阅 第 2.3.2.1 节 “链组件操作”。 - 重启实例:
# dsctl instance_name restart
- 在远程服务器的后缀中创建一个 ACI,它将会被串联。例如,要为参考完整性插件创建 ACI:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h remoteserver.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (targetattr = "*")(target="ldap:///ou=customers,l=us,dc=example,dc=com") (version 3.0; acl "RefInt Access for chaining"; allow (read,write,search,compare) userdn = "ldap:///cn=referential integrity postoperation,cn=plugins,cn=config";)
2.3.2.1.2. 使用 Web 控制台串联组件操作
添加允许链的组件:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 打开选项卡。
- 在左侧的导航中,选择条目。
- 单击 Components to Chain 字段下的 按钮。
- 选择组件,然后点。
- 在远程服务器的后缀中创建一个 ACI,它将会被串联。例如,要为参考完整性插件创建 ACI:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h remoteserver.example.com -x dn: ou=People,dc=example,dc=com changetype: modify add: aci aci: (targetattr = "*")(target="ldap:///ou=customers,l=us,dc=example,dc=com") (version 3.0; acl "RefInt Access for chaining"; allow (read,write,search,compare) userdn = "ldap:///cn=referential integrity postoperation,cn=plugins,cn=config";)
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 |
管理的 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 链 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"
如果目录服务器的客户端创建自己的控制,并且其操作应串联到远程服务器,请添加自定义控制的对象标识符(OID)。
有关可以串联及其 OID 的 LDAP 控制列表,请参阅 表 2.1 “LDAP 控制和过期 OID”。
2.3.2.2.2. 使用 Web 控制台串联 LDAP 控制
使用 Web 控制台串联 LDAP 控制:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录到目录服务器”。
- 选择实例。
- 打开菜单。
- 选择条目。
- 单击 Forwarded LDAP Controls 字段下的 按钮。
- 选择 LDAP 控制并点击。如果目录服务器的客户端创建自己的控制,并且其操作应串联到远程服务器,请添加自定义控制的对象标识符(OID)。有关可以串联及其 OID 的 LDAP 控制列表,请参阅 表 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
属性。但是,不建议评估包含数据库链接的服务器上的访问控制,但级联链除外。