此配置以 Example.com 组织为例,说明虚拟目录的某些功能如何满足该组织的特定目录服务要求。
Example.com 将组织数据存储在多个不同的数据源中。由于过去的原因,用户数据分布在 LDAP 目录、平面 LDIF 文件和 SQL 数据库中。人力资源部门将用户数据存储在基 DN 为 o=example.com 的 LDAP 目录中。薪酬部门将数据存储在 SQL 数据库中。管理部门将管理数据(如部门和大楼编号)存储在基 DN 为 dc=example,dc=com 的 LDIF 文件中。
此外,Example.com 还收购了一个名为 Company22 的公司。Company 22 也将其用户数据存储在基 DN 为 dc=company22,dc=com 的 LDAP 目录中。
下图提供了说明 Example.com 用户数据存储方式的高级视图。
Example.com 有几个 LDAP 客户端应用程序需要访问存储在不同数据源中的数据。这些客户端应用程序的要求不尽相同。因此需要不同的数据视图。在某些情况下,客户端需要聚合数据。另外,某些客户端应用程序还需要访问 Company22 的用户数据,以便能够同时管理 Example.com 的新老员工。
下图提供了 Example.com 客户端应用程序要求的高级视图。
以下部分提供了充分的目录代理服务器数据视图的配置示例,以满足此样例方案中所述的客户端应用程序要求。有关数据视图的工作方式的信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的第 17 章 “Directory Proxy Server Distribution”和《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的第 18 章 “Directory Proxy Server Virtualization”。
样例方案的配置可分为以下几部分:
人力资源部门存储员工姓名、入职数据和职务级别等信息。管理部门存储大楼代码和办公室编号等其他信息。处理人力资源数据的客户端应用程序需要访问来自这两个数据源的组合数据。这两个数据源有一个公用属性 employeeNumber,即每个条目中都具有该属性 。
下图说明了此客户端应用程序的要求。
要满足此应用程序要求,需要为薪酬目录和管理 LDIF 文件各创建一个数据视图。然后将这两个数据视图联接在一起,以提供对聚合数据的访问。目录代理服务器可以使用此公用属性聚合每个用户的数据。
为了简单起见,本部分中使用的命令假定运行环境如下:
目录代理服务器实例通过默认 LDAP 端口 (389) 在本地主机上运行。
目录代理服务器实例位于 /local/myDPS 中。
包含代理管理员密码的文件所在的路径已被设置为变量 LDAP_ADMIN_PWF。有关设置目录代理服务器环境变量的详细信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Installation Guide》中的“Environment Variables”。
薪酬部门的 LDAP 目录通过端口 2389 在名为 payrollHost 的主机上运行。
用于存储管理数据的 LDIF 文件名为 example.ldif。
要获取每个命令的完整语法,请运行不含任何选项的命令。例如:
$ dpconf create-ldap-data-view Operands are missing Usage: dpconf create-ldap-data-view VIEW_NAME POOL_NAME SUFFIX_DN
为薪酬目录创建 LDAP 数据源。
$ dpconf create-ldap-data-source payroll-directory payrollHost:2389
为薪酬目录创建 LDAP 数据源池。
$ dpconf create-ldap-data-source-pool payroll-pool
将薪酬数据源连接到此数据源池。
$ dpconf attach-ldap-data-source payroll-pool payroll-directory
配置连接数据源的权重。
$ dpconf set-attached-ldap-data-source-prop -h payrollHost -p 2389 \ payroll-pool payroll-directory add-weight:2 \ bind-weight:2 compare-weight:2 delete-weight:2 \ modify-dn-weight:2 modify-weight:2 search-weight:2
为薪酬目录创建 LDAP 数据视图。
$ dpconf create-ldap-data-view payroll-view payroll-pool o=example.com
启用 LDAP 数据视图,以便客户端请求可以路由到此数据视图。
$ dpconf set-ldap-data-view-prop payroll-view is-enabled:true
重新启动目录代理服务器以使更改生效。
$ dpadm restart /local/myDPS
为管理数据创建 LDIF 数据视图。
$ dpconf create-ldif-data-view admin-view example.ldif dc=example,dc=com
启用管理数据的 LDIF 数据视图。
$ dpconf set-ldif-data-view-prop admin-view is-enabled:true
指定管理视图包含可由薪酬视图中的多个条目使用的条目。
$ dpconf set-ldif-data-view-prop admin-view contains-shared-entries:true
此属性设置为 TRUE 时,删除薪酬数据视图中的条目不会导致管理数据视图中的共享条目被删除。向薪酬数据视图添加条目只会将该条目添加到从数据视图(如果该条目尚不存在)。
重新启动目录代理服务器以使更改生效。
$ dpadm restart /local/myDPS
在管理数据视图上创建过滤器联接规则,该规则指定数据的聚合方式。
以下联接规则指定应该根据用户条目的 employeeNumber 属性联接数据。
$ dpconf set-ldif-data-view-prop admin-view \ filter-join-rule:employeeNumber=\${payroll-view.employeeNumber}
创建聚合这两个数据视图的联接数据视图。
对于该联接数据视图,组织将使用后缀 DN dc=example,dc=com。
$ dpconf create-join-data-view example-join-view payroll-view admin-view \ dc=example,dc=com
Company 22 的用户数据存储在 DN dc=company22,dc=com 下。虽然在大多数情况下 Example.com 希望单独保留此用户数据,但一个客户端应用程序需要同时管理 Company 22 员工和其他 Example.com 员工。此客户端应用程序要求 Company 22 的用户数据类似于 Example.com 数据。
下图说明了此客户端应用程序的要求。
要满足此应用程序要求,需要为 Company 22 的目录创建一个虚拟 DN 为 dc=example,dc=com 的数据视图。
为了简单起见,本部分中使用的命令假定运行环境如下:
目录代理服务器实例通过默认 LDAP 端口 (389) 在本地主机上运行。
目录代理服务器实例位于 /local/myDPS 中。
包含代理管理员密码的文件所在的路径已被设置为变量 LDAP_ADMIN_PWF。有关设置目录代理服务器环境变量的详细信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Installation Guide》中的“Environment Variables”。
Company 22 LDAP 目录通过端口 2389 在名为 company22Host 的主机上运行。
为 Company 22 的目录创建 LDAP 数据源。
$ dpconf create-ldap-data-source company22-directory company22Host:2389
为 Company 22 的目录创建 LDAP 数据源池。
$ dpconf create-ldap-data-source-pool company22-pool
将 Company 22 的数据源连接到此数据源池。
$ dpconf attach-ldap-data-source company22-pool company22-directory
配置连接数据源的权重。
$ dpconf set-attached-ldap-data-source-prop -h company22Host -p 2389 \ company22-pool company22-directory add-weight:2 \ bind-weight:2 compare-weight:2 delete-weight:2 \ modify-dn-weight:2 modify-weight:2 search-weight:2
使用虚拟 DN dc=example,dc=com 为 Company 22 的目录创建 LDAP 数据视图。
$ dpconf create-ldap-data-view company22-view company22-pool dc=example,dc=com
指示目录代理服务器将此虚拟 DN 映射到 Company 22 目录中的实际 DN。
$ dpconf set-ldap-data-view-prop company22-view \ dn-mapping-source-base-dn:dc=company22,dc=com
启用 Company 22 目录的 LDAP 数据视图,以便客户端请求可以路由到此数据视图。
$ dpconf set-ldap-data-view-prop company22-view is-enabled:true
重新启动目录代理服务器以使更改生效。
$ dpadm restart /local/myDPS
人力资源部门需要人力资源数据(来自 Example.com 和最近收购的 Company 22)的聚合视图。下图说明了人力资源部门全局应用程序的要求。
在 Company 22 数据视图上创建过滤器联接规则,该规则指定数据的聚合方式。
以下联接规则指定应该根据用户条目的 employeeNumber 属性联接数据。
$ dpconf set-ldif-data-view-prop company22-view \ filter-join-rule:employeeNumber=\${example-join-view.employeeNumber}
创建联接数据视图,该视图将 Company 22 的数据视图和 Example.com 的联接数据视图聚合在一起。
$ dpconf create-join-data-view global-join-view example-join-view \ company22-view dc=example,dc=com
Example.com 的薪酬部门将薪水数据存储在 SQL 数据库中。该数据库有两个表,即 employee 表和 salary 表。Example.com 具有需要访问这些数据的 LDAP 客户端应用程序。该客户端应用程序要求 SQL 数据类似于 LDAP 数据。
下图说明了此客户端应用程序的要求。
要满足此应用程序要求,需要创建一个将 SQL 表中的列映射到 LDAP 属性的 JDBC 数据视图。
为了简单起见,本部分中使用的命令假定运行环境如下:
目录代理服务器实例通过默认 LDAP 端口 (389) 在本地主机上运行。
目录代理服务器实例位于 /local/myDPS 中。
包含代理管理员密码的文件所在的路径已被设置为变量 LDAP_ADMIN_PWF。有关设置目录代理服务器环境变量的详细信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Installation Guide》中的“Environment Variables”。
SQL 数据库已打开并正在运行。
JAVA_HOME 变量已设置为正确的 Java 路径。
SQL 数据库密码是存储在 myPasswordFile 文件中的 myPassword。
为薪酬数据库创建 JDBC 数据源。
$ dpconf create-jdbc-data-source -b payrollsqldb \ -B jdbc:payrollsqldb:payrollsql://localhost/ \ -J file://payrollsqldb.jar \ -S org.payrollsqldb.jdbcDriver payroll-src
使用 SQL 数据库的属性配置 JDBC 数据源。
$ dpconf set-jdbc-data-source-prop payroll-src \ db-user:proxy db-pwd-file:password-file-location/myPasswordFile
启用 JDBC 数据源。
$ dpconf set-jdbc-data-source-prop payroll-src is-enabled:true
为薪酬数据库创建 JDBC 数据源池。
$ dpconf create-jdbc-data-source-pool payroll-pool
将薪酬数据源连接到此数据源池。
$ dpconf attach-jdbc-data-source payroll-pool payroll-src
使用虚拟 DN o=payroll 为薪酬数据库创建 JDBC 数据视图。
$ dpconf create-jdbc-data-view payroll-view payroll-pool o=payroll
为 SQL 数据库中的每个表创建 JDBC 表。
$ dpconf create-jdbc-table jdbc-employee employee $ dpconf create-jdbc-table jdbc-salary salary
为 SQL 表中的每一列添加 JDBC 属性。
$ dpconf add-jdbc-attr jdbc-employee eid employee_id $ dpconf add-jdbc-attr jdbc-employee first firstname $ dpconf add-jdbc-attr jdbc-employee last lastname $ dpconf add-jdbc-attr jdbc-employee description description $ dpconf add-jdbc-attr jdbc-employee spouse spousename $ dpconf add-jdbc-attr jdbc-salary salary salary $ dpconf add-jdbc-attr jdbc-salary social ssn
指定可以通过 JDBC 数据视图查看和写入的属性。
$ dpconf set-jdbc-data-view-prop payroll-view \ viewable-attr:eid \ viewable-attr:first \ viewable-attr:last \ viewable-attr:desc \ viewable-attr:spouse \ viewable-attr:salary \ viewable-attr:social $ dpconf set-jdbc-data-view-prop payroll-view \ writable-attr:eid \ writable-attr:first \ writable-attr:last \ writable-attr:description \ writable-attr:spouse \ writable-attr:salary \ writable-attr:social
创建一个映射到 LDAP 对象类的 JDBC 对象类。
以下命令将创建一个映射到 LDAP person 对象类的对象类。该对象类指定应该将员工表用作主表,而将薪水表用作从表。eid 属性应用于构建 DN。
$ dpconf create-jdbc-object-class payroll-view \ person jdbc-employee jdbc-salary eid
在从表上创建过滤器联接规则,该规则指定从表中的数据应如何链接到主表数据。
以下联接规则指定应根据 employee_id 属性联接数据。
$ dpconf set-jdbc-table-prop jdbc-salary \ filter-join-rule:employee_id=\${employee.employee_id}
在 JDBC 对象类上创建超类。
$ dpconf set-jdbc-object-class-prop payroll-view person super-class:extensibleObject
LDAP 目录上的访问控制是通过定义这些目录中的 ACI 来处理的。通过虚拟数据视图访问数据源时必须定义 ACI,这些 ACI 只适用于通过这些数据视图查看的数据。
所有通过目录代理服务器的访问都由连接处理程序进行控制。有关连接处理程序的信息,请参见第 26 章,客户端和目录代理服务器之间的连接 。
添加 ACI。
$ ldapadd -v -D "cn=proxy manager" -w password -p 389 dn: cn=ldifonly-acis,cn=virtual access controls objectclass: top objectclass: aciSource cn: ldifonly-acis dpsaci: (targetattr="*")(version 3.0; acl "anonymous_access"; allow(all) \ (userdn="ldap:///anyone");)
将连接处理程序指向虚拟 ACI。
$ dpconf set-connection-handler-prop anonymous aci-source:ldifonly-acis
启用连接处理程序。
$ dpconf set-connection-handler-prop anonymous is-enabled:true