Sun Java System Directory Server Enterprise Edition 6.3 管理指南

第 23 章 目录代理服务器虚拟

本章介绍如何创建虚拟数据视图。虚拟数据视图转换源数据,并向客户端应用程序显示该数据的不同视图。虚拟数据视图包括转换的 LDAP 数据视图、LDIF 数据视图、联接数据视图和 JDBCTM 数据视图。有关虚拟数据视图功能的概述以及示例使用实例的描述,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的第 18  章 “Directory Proxy Server Virtualization”

您无法使用目录服务控制中心 (Directory Service Control Center, DSCC) 执行本章中的过程。必须使用命令行。

本章包含以下主题:

创建和配置 LDIF 数据视图

LDIF 数据视图是一种简单的虚拟数据视图,可在其中将 LDIF 文件显示为类似于 LDAP 数据源。与 LDAP 数据视图不同,在设置 LDIF 数据视图时无需创建数据源或数据源池。但在创建数据视图时应指定 LDIF 文件。默认情况下,无法向 LDIF 数据视图中写入内容。有关详细信息,请参见在虚拟数据视图上定义访问控制

有关创建和配置 LDIF 数据视图的信息,请参见以下过程。

Procedure创建 LDIF 数据视图

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 创建 LDIF 数据视图。


    $ dpconf create-ldif-data-view -h host -p port view-name path-to-ldif-file suffix-dn
    
  2. (可选的)查看 LDIF 数据视图的列表。


    $ dpconf list-ldif-data-views -h host -p port
    

    虚拟访问控制数据视图是唯一的默认 LDIF 数据视图。此数据视图由服务器生成,可以将请求路由到虚拟访问控制指令 (access control instruction, ACI)。

Procedure配置 LDIF 数据视图

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 查看 LDIF 数据视图的属性。


    $ dpconf get-ldif-data-view-prop -h host -p port view-name
    

    LDIF 数据视图具有以下默认属性:


    alternate-search-base-dn                    :  ""
    alternate-search-base-dn                    :  dc=com
    attr-name-mappings                          :  none
    base-dn                                     :  suffixDN
    bind-pwd-attr                               :  userPassword
    contains-shared-entries                     :  -
    db-pwd-encryption                           :  clear-text
    description                                 :  -
    distribution-algorithm                      :  -
    dn-join-rule                                :  -
    dn-mapping-attrs                            :  none
    dn-mapping-source-base-dn                   :  none
    excluded-subtrees                           :  -
    filter-join-rule                            :  -
    is-enabled                                  :  true
    is-read-only                                :  false
    is-routable                                 :  true
    ldif-data-source                            :  /path/to/filename.ldif
    lexicographic-attrs                         :  all
    lexicographic-lower-bound                   :  none
    lexicographic-upper-bound                   :  none
    non-viewable-attr                           :  -
    non-writable-attr                           :  -
    numeric-attrs                               :  all
    numeric-default-data-view                   :  false
    numeric-lower-bound                         :  none
    numeric-upper-bound                         :  none
    pattern-matching-base-object-search-filter  :  all
    pattern-matching-dn-regular-expression      :  all
    pattern-matching-one-level-search-filter    :  all
    pattern-matching-subtree-search-filter      :  all
    process-bind                                :  -
    replication-role                            :  master
    viewable-attr                               :  all except non-viewable-attr
    writable-attr                               :  all except non-writable-attr
  2. 更改步骤 1 中列出的一个或多个属性。


    $ dpconf set-ldif-data-view-prop -h host -p port view-name property:value \
     [property:value ... ]

    例如,要更改数据视图的源 LDIF 文件,请设置 ldif-data-source 属性。


    $ dpconf set-ldif-data-view-prop -h host1 -p 1389 -D cn="Proxy Manager" \
    myLDIFDataView ldif-data-source:/local/files/example.ldif

在虚拟数据视图上定义访问控制

可以将虚拟视图上的 ACI 存储在 LDAP 目录或 LDIF 文件中。有关虚拟 ACI 的工作方式的信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的“Access Control On Virtual Data Views”

创建目录代理服务器实例时,将为虚拟访问控制定义以下默认配置:

Procedure定义新的 ACI 存储系统信息库

如果不想使用前面介绍的默认 ACI 配置,可以定义其他的存储系统信息库。

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 为要存储 ACI 的系统信息库创建数据视图。

  2. 将上一步创建的数据视图的名称指定为 ACI 数据视图。

    $ dpconf set-virtual-aci-prop -h host -p port aci-data-view:data-view-name
    
  3. 如果 ACI 系统信息库是 LDAP 目录,请定义访问 ACI 数据视图所需的凭证。

    $ dpconf set-virtual-aci-prop -h host -p port aci-manager-bind-dn:bind-dn
    $ dpconf set-virtual-aci-prop -h host -p port aci-manager-bind-pwd-file:filename
    

Procedure配置虚拟访问控制

无论使用的是什么 ACI 系统信息库,都必须配置虚拟访问控制。


注 –

只有代理管理员才能直接通过 ACI 数据视图创建 ACI 池和管理 ACI。如果 ACI 系统信息库是 LDAP 目录,则必须修改该目录的模式,以使其包含 aciSource 对象类和 dpsaci 属性。有关自定义该模式的详细信息,请参见扩展目录服务器模式


无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 在 ACI 系统信息库中创建 ACI 池,并设置全局 ACI。

    有关全局 ACI 的信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的“Global ACIs”。要设置全局 ACI,请在 ACI 数据视图的视图基下添加一个 aciSource 条目。例如:


    % ldapmodify -p port -D "cn=proxy manager" -w -
    dn: cn=aci-source-name,cn=virtual access controls
    changetype: add
    objectclass: aciSource
    dpsaci: (targetattr="*") (target="ldap:///ou=people,o=virtual") (version 3.0; 
     acl "perm1"; allow(all) groupdn="ldap:///cn=virtualGroup1,o=groups,o=virtual";)
    cn: data-source-name
    
  2. 将一个或多个连接处理程序配置为使用此 ACI 池。


    % dpconf set-connection-handler-prop -h host -p port connection-handler \
    aci-source:aci-source-name
    
  3. 将所需的 ACI 添加到数据中。

    要执行此操作,请创建包含 ACI 的虚拟条目。例如:


    % ldapmodify -p port -D "cn=virtual application,ou=application users,dc=com" -w -
    dn: ou=people,o=virtual
    changetype: modify
    add: dpsaci
    dpsaci: (targetattr="*")(version 3.0; acl "perm1"; allow(all) userdn="ldap:///self";)
    dpsaci: (targetattr="*")(version 3.0; acl "perm1"; allow(search, read, compare) 
     userdn ="ldap:///anyone";)

    注 –

    具有相应访问权限的任何用户都可以通过数据视图添加和检索虚拟 ACI。


在虚拟数据视图上定义模式检查

通常,对于 LDAP 数据视图,模式检查是由后端目录使用后端目录模式执行的。如果希望目录代理服务器执行模式检查,请使用以下过程。

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

要标准化请求(特别是 DN),请按如下方式设置服务器的 use-external-schema 属性:

Procedure定义模式检查

  1. 指示服务器实例使用外部模式。


    $ dpconf set-server-prop -h host -p port use-external-schema:true
  2. 对连接处理程序启用模式检查。


    $ dpconf set-connection-handler-prop -h host -p port connection-handler \
     schema-check-enabled:true
  3. 创建公开 cn=schema 的数据视图。

    如果在 LDAP 目录中定义外部模式,请使用名为 cn=schema 的视图基创建 LDAP 数据视图,如第 19 章,LDAP 数据视图中所述。

    如果在 LDIF 文件中定义外部模式,请使用视图基 cn=schema 创建 LDIF 数据视图,如创建和配置 LDIF 数据视图所述。

  4. 将此数据视图添加到由连接处理程序公开的数据视图列表中。

    默认情况下,所有数据视图都由连接处理程序公开。如果已定义由连接处理程序公开的数据视图的自定义列表,请将此数据视图添加到列表中。


    $ dpconf set-connection-handler-prop -h host -p port connection-handler \
     data-view-routing-custom-list+:data-view-name
    

创建和配置联接数据视图

联接数据视图是多个数据视图的聚合。有关联接数据视图的工作方式的信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的“Join Data Views”

有关如何创建和配置联接数据视图的信息,请参见以下过程。

Procedure创建联接数据视图

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 对将要聚合成联接视图的主数据视图和从数据视图进行标识。

    在创建联接视图之前,必须存在主数据视图和从数据视图。主数据视图和从数据视图可以是任意类型的数据视图,包括 LDAP 数据视图、LDIF 数据视图、JDBC 数据视图或其他联接数据视图。必须在从视图上配置一些特定属性,以便将其作为联接视图的源。有关详细信息,请参见配置联接视图的从视图

  2. 创建联接数据视图。


    $ dpconf create-join-data-view -h host -p port view-name primary-view secondary-view \
     suffix-dn
    
  3. (可选的)查看联接视图列表,以检查是否已成功创建数据视图。


    $ dpconf list-join-data-views -h host -p port
    

Procedure配置联接数据视图

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 查看联接数据视图的属性。


    $ dpconf get-join-data-view-prop -h host -p port view-name
    

    联接数据视图的默认属性如下所示:


    alternate-search-base-dn                    :  ""
    alternate-search-base-dn                    :  dc=com
    attr-name-mappings                          :  none
    base-dn                                     :  suffixDN
    contains-shared-entries                     :  -
    description                                 :  -
    distribution-algorithm                      :  -
    dn-join-rule                                :  -
    dn-mapping-attrs                            :  none
    dn-mapping-source-base-dn                   :  none
    excluded-subtrees                           :  -
    filter-join-rule                            :  -
    is-enabled                                  :  true
    is-read-only                                :  false
    is-routable                                 :  true
    join-rule-control-enabled                   :  false
    lexicographic-attrs                         :  all
    lexicographic-lower-bound                   :  none
    lexicographic-upper-bound                   :  none
    non-viewable-attr                           :  -
    non-writable-attr                           :  -
    numeric-attrs                               :  all
    numeric-default-data-view                   :  false
    numeric-lower-bound                         :  none
    numeric-upper-bound                         :  none
    pattern-matching-base-object-search-filter  :  all
    pattern-matching-dn-regular-expression      :  all
    pattern-matching-one-level-search-filter    :  all
    pattern-matching-subtree-search-filter      :  all
    primary-view                                :  primary-view
    process-bind                                :  -
    replication-role                            :  master
    secondary-view                              :  secondary-view
    viewable-attr                               :  all except non-viewable-attr
    writable-attr                               :  all except non-writable-attr
  2. 更改步骤 1 中列出的一个或多个属性。


    $ dpconf set-join-data-view-prop -h host -p port view-name property:value \
     [property:value ... ]

    例如,要将数据源的主数据视图更改为 myLDAPDataView,请使用以下命令:


    $ dpconf set-join-data-view-prop -h host1 -p 1389 -D cn="Proxy Manager" \
     myJoinDataView primary-view:myLDAPDataView
  3. 配置联接数据视图时,请在主数据视图和从数据视图上设置 viewable-attrwritable-attr 属性。

    设置这些属性有助于在主数据视图和从数据视图上相应地拆分搜索过滤器。否则,当搜索过滤器包含来自从数据视图的属性时,搜索结果可能会出现不一致。

  4. 重新启动目录代理服务器实例以使更改生效(如有必要)。

    有关重新启动目录代理服务器的信息,请参见重新启动目录代理服务器

Procedure将联接数据视图配置为允许多个联接数据视图引用某个数据视图

通过在联接数据视图中设置联接规则配置信息,可使多个联接数据视图能够引用该数据视图。要具备此功能,请执行以下操作:

  1. 在联接数据视图上,将 join-rule-control-enabled 设置为 true


    $ dpconf set-join-data-view-prop view-name join-rule-control-enabled:true

    join-rule-control-enabled 设置为 true 后,服务器将使用联接数据视图中存储的联接规则配置信息。如果联接数据视图的联接规则配置信息存储在从数据视图中,服务器将不会使用此信息。要让服务器使用此信息,您必须手动在联接数据视图级别添加此配置信息。

  2. 定义联接规则,以确定从视图与主视图的关联方式。

    联接规则可为以下任一选项:

    • DN 联接规则


      $ dpconf set-join-data-view-prop view-name \
      dn-join-rule:uid=\${primary-view-name.uid},ou=People,dc=example
    • 过滤器联接规则


      $ dpconf set-join-data-view-prop view-name \
      filter-join-rule:uid=\${primary-view-name.uid}

    在以上命令中,属性名称是作为变量括在 ${} 中的。如果不使用括在 ${} 中的属性名称,则会将该属性名称视为常量。

    如果在 Unix 中使用 bash 或 ksh,应采用 \$ 字符进行转义,例如 \${primary-view-name .uid} 之类的结构;而在 Windows 中,则不需要进行转义。

Procedure配置联接视图的从视图

必须在从数据视图上配置一些特定属性,以便将其作为联接视图的源。由于从视图可以是任意类型的数据视图,因此您所使用的命令取决于数据视图类型。以下样例命令假定从视图为 LDAP 数据视图。有关此处介绍的属性的详细信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的“Additional Secondary Data View Properties”

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 定义联接规则,以确定从视图与主视图的关联方式。

    切勿对联接视图的主数据视图设置 filter-join-ruledn-join-rule

    联接规则可为以下任一选项:

    • DN 联接规则


      $ dpconf set-ldap-data-view-prop -h host -p port secondary-view-name \
      dn-join-rule:uid=\${primary-view-name.uid},ou=People,dc=example
    • 过滤器联接规则


      $ dpconf set-ldap-data-view-prop -h host -p port secondary-view-name \
      filter-join-rule:uid=\${primary-view-name.uid}

    仅当联接数据视图上的 join-rule-control-enabled 属性设置为 false 时,服务器才会使用 dn-join-rulefilter-join-rule 属性的配置。否则,如果在联接数据视图上将 join-rule-control-enabled 属性设置为 true,将忽略在从视图上设置的此信息。

  2. 如果在联接数据视图上设置了过滤器联接规则,则需要在从数据视图上设置虚拟转换规则,以便能够在联接数据视图上添加条目。


    dpconf add-virtual-transformation secondary-view-name \
    write add-attr-value dn uid=\${uid}

    注 –

    如果未设置此规则,则无法在联接数据视图上添加条目。


  3. (可选的)指定从视图上是否允许绑定。

    默认情况下,所有数据视图上都允许绑定。如果您要禁止绑定到从数据视图,请运行以下命令:


    $ dpconf set-ldap-data-view-prop -h host -p port secondary-view-name process-bind:false

    有关此属性的详细信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的“Handling of Binds”

  4. (可选的)指定从视图是否包含共享条目。


    $ dpconf set-ldap-data-view-prop -h host -p port secondary-view-name \
    contains-shared-entries:true

    有关此属性的详细信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的“Handling of Shared Entries”

创建和配置 JDBC 数据视图

通过使用 JDBC 数据视图,可使 LDAP 客户端应用程序能够访问关系数据库。有关 JDBC 数据视图的工作方式的信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的“JDBC Data Views”

有关如何创建和配置 JDBC 数据视图的信息,请参见以下过程。

Procedure创建 JDBC 数据视图

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 为关系数据库创建 JDBC 数据源。


    $ dpconf create-jdbc-data-source -h host -p port -b db-name -B db-url -J driver-url \
    [-J driver-url]... -S driver-class source-name
    

    目前,每个 JDBC 数据视图只支持一个 JDBC 数据源。换句话说,您无法跨 JDBC 数据源实现负载平衡。要访问多个 JDBC 数据源,可以为每个数据源创建一个数据视图,然后通过联接视图将这些数据视图联接在一起。

    在创建 JDBC 数据源时,必须设置以下属性:

    db-name

    关系数据库的名称,例如 payrolldb

    db-url

    指向数据库的 URL,格式为 jdbc: vendor:driver://dbhost: dbport

    db-url 不是完整的 JDBC 数据库 URL,因为它不包含数据库名称。(数据库名称由 db-name 属性指定。)

    对于 MySQL、DB2 和 Derby 数据库,db-url 必须以 / 结束;对于 Oracle 数据库,则必须以 : 结束。

    driver-class

    JDBC 驱动程序类,例如 org.hsqldb.jdbcDriver

    driver-url

    JDBC 驱动程序所在的路径,例如 file:/// path/to/hsqldb/lib/hsqldb.jar

    driver-url 属性是多值属性。因此,driver-url 可以为 JDBC 驱动程序支持多个 JAR 文件,以确保连接到不同平台上的 JDBC 源。

  2. 创建 JDBC 数据源池。


    $ dpconf create-jdbc-data-source-pool -h host -p port pool-name
    
  3. 将 JDBC 数据源连接到此 JDBC 数据源池。


    $ dpconf attach-jdbc-data-source -h host -p port pool-name source-name
    
  4. 创建 JDBC 数据视图。


    $ dpconf create-jdbc-data-view -h host -p port view-name pool-name suffix-DN
    
  5. (可选的)查看 JDBC 数据视图列表,以检查是否已成功创建数据视图。


    $ dpconf list-jdbc-data-views -h host -p port
    

Procedure配置 JDBC 数据视图

无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。

  1. 查看 JDBC 数据视图的属性。


    $ dpconf get-jdbc-data-view-prop -h host -p port view-name
    

    JDBC 数据视图的默认属性如下所示:


    alternate-search-base-dn                    :  -
    attr-name-mappings                          :  none
    base-dn                                     :  o=sql1
    contains-shared-entries                     :  -
    description                                 :  -
    distribution-algorithm                      :  -
    dn-join-rule                                :  -
    dn-mapping-attrs                            :  none
    dn-mapping-source-base-dn                   :  none
    excluded-subtrees                           :  -
    filter-join-rule                            :  -
    is-enabled                                  :  true
    is-read-only                                :  false
    is-routable                                 :  true
    jdbc-data-source-pool                       :  pool-name
    lexicographic-attrs                         :  all
    lexicographic-lower-bound                   :  none
    lexicographic-upper-bound                   :  none
    non-viewable-attr                           :  -
    non-writable-attr                           :  -
    numeric-attrs                               :  all
    numeric-default-data-view                   :  false
    numeric-lower-bound                         :  none
    numeric-upper-bound                         :  none
    pattern-matching-base-object-search-filter  :  all
    pattern-matching-dn-regular-expression      :  all
    pattern-matching-one-level-search-filter    :  all
    pattern-matching-subtree-search-filter      :  all
    process-bind                                :  -
    replication-role                            :  master
    viewable-attr                               :  all except non-viewable-attr
    writable-attr                               :  all except non-writable-attr
  2. 更改步骤 1 中列出的一个或多个属性。


    $ dpconf set-jdbc-data-view-prop -h host -p port view-name property:value \
     [property:value ... ]

Procedure配置 JDBC 表、属性和对象类

配置 JDBC 数据视图时,还必须配置以下对象:

  1. 为关系数据库中的每个表创建 JDBC 表。


    % dpconf create-jdbc-table jdbc-table-name db-table
    

    db-table 的名称区分大小写。请确保使用的大小写与关系数据库中使用的相同,否则针对该表的操作可能会失败。

  2. 为每个关系数据库表中的每个列创建 JDBC 属性。


    % dpconf add-jdbc-attr table-name attr-name sql-column
    

    创建 JDBC 属性会将表列映射到 LDAP 属性。

  3. (可选的)如果关系数据库中的列区分大小写,请更改 JDBC 属性的 LDAP 语法。


    % dpconf set-jdbc-attr-prop table-name attr-name ldap-syntax:ces

    默认情况下,ldap-syntax 的值为 cis。这表明 jdbc-attr 不区分大小写。如果您的关系数据库区分大小写,请将值更改为 ces

    默认情况下,某些关系数据库(如 Oracle 和 DB2)区分大小写。LDAP 在默认情况下不区分大小写。当目录代理服务器检测到关系数据库表的某个列区分大小写时,在过滤器中具有相应属性的 ldapsearch 查询将被转换为使用函数 UPPER 的 SQL 查询。

    例如,查询 ldapsearch -b "dc=mysuffix" "(attr=abc)" 将被转换为以下 SQL 查询:


    SELECT * FROM mytable WHERE (UPPER(attr)='ABC')

    默认情况下,此类查询不会编制索引。因此,具有此特性的查询可能会造成较大的性能影响。

    可通过以下两种方式减轻性能影响:

    • 将 jdbc-attr 的 ldap-syntax 属性设置为 ces

    • 对于每个可能会在 LDAP 过滤器中使用的 jdbc-attr,使用函数 UPPER 创建索引。


    注 –

    如果关系数据库不区分大小写,请使用 ldap-syntax 的默认值,即 cis。不区分大小写的数据库不支持 ldap-syntax:ces


  4. 为 LDAP 关系数据库表创建 JDBC 对象类。


    % dpconf create-jdbc-object-class view-name objectclass primary-table \
      [secondary-table... ] DN-pattern
    

    创建 JDBC 对象类实际上是指定将与这些表相关联的 LDAP 对象类。JDBC 对象类还将指定主表和从表(如果这些表存在)。

    创建 JDBC 对象类时将指定 DN 模式。DN 模式用于描述将使用哪些属性来构建条目的 DN。例如,如果将 DN 模式指定为 uid,则会使用属性 uid 和数据视图的视图基来构建条目的 DN。例如,uid=bjensen,ou=people,dc=example,dc=com。DN 模式可以由多个属性组成。在这种情况下,应使用 ,(逗号)来分隔各个属性。例如,如果将 DN 模式指定为 uid,country,则数据视图返回的条目 DN 为 uid=bjensen,country=America,ou=people,dc=example,dc=com

    对于在 JDBC 对象类的 DN 模式中定义的所有子树组件,均应为其定义 JDBC 对象类。例如,如果 JDBC 对象类中具有 DN 模式 uid,ou,则应为 DN 模式 ou 定义一个 JDBC 对象类。这对于目录代理服务器构建结构正确的 DIT 很有必要。否则,在搜索结果中不会返回具有类似于 ou=xxx,base-DN 值的子树。

  5. 如果存在从表,请定义主表和从表之间的联接规则。


    % dpconf set-jdbc-table-prop secondary-table-name filter-join-rule:join-rule
    

    联接规则在从表上进行定义,用于确定该表中的数据如何链接到主表数据。对象类主表和从表关系的定义方式非常重要。有关详细信息,请参见定义 JDBC 表之间的关系

  6. 指定 JDBC 对象类的超类。


    % dpconf set-jdbc-object-class-prop view-name objectclass super-class:value
    

    超类表示 JDBC 对象类所继承的 LDAP 对象类。

定义 JDBC 表之间的关系

最简单的情况是 JDBC 对象类只包含一个(主)表。不存在从表,因此无需定义表之间的关系。

如果对象类包含多个表,则必须明确定义这些表之间的关系。表之间的关系始终在从表上进行定义。可以使用从表的以下属性定义这些关系:

以下示例将说明如何根据前两个属性的值定义过滤器联接规则。这些示例假定对象类具有一个主表和一个从表。


示例 23–1 is-single-row-table:true contains-shared-entries:true

以上是这些属性的默认值。在此案例中,主表和从表之间的关系为 n->1,也就是说,主表中的 n 个行将引用从表中的一个共享行。

在关系数据库中,外键 (foreign key, FK) 在主表中定义,它指向从表的某个列。

例如,在某个组织中,一位经理可以管理多名员工。定义了两个关系数据库表,结构如下:


primary table : EMPLOYEE [ID, NAME, FK_MANAGER_ID]
secondary table : MANAGER  [ID, NAME]

定义了以下对象类和属性:


object-class : employee
attr : name (from primary EMPLOYEE.NAME)
attr : manager (from secondary MANAGER.NAME)

在从表中定义了以下过滤器联接规则:


ID=\${EMPLOYEE.FK_MANAGER_ID}"

如果存在多个从表,则必须为每个从表配置 filter-join-rule。有关如何为多个从表配置 filter-join-rule 的详细信息,请参见步骤 11

在此配置下,LDAP 操作的运行方式如下:



示例 23–2 is-single-row-table:true contains-shared-entries:false

在此案例中,主表和从表之间的关系为 1->11<-1,也就是说,从表中的一行将引用主表中的一行。

在关系数据库中,外键 (foreign key, FK) 可能在主表中定义,也可能在从表中定义。

例如,在某个组织中,员工的 UID 存储在一个表中,其姓氏存储在另一个表中。定义了两个关系数据库表,结构如下:


primary table : UID [ID, VALUE, FK_SN_ID]
secondary table : SN [ID, VALUE]

定义了以下对象类和属性:


object-class : employee
attr : uid (from primary UID.VALUE)
attr : sn (from secondary ID.VALUE)

在从表中定义了以下过滤器联接规则:


ID=\${UID.FK_SN_ID}

此配置也可能是另外一种方式,即外键 FK_UID_ID 存储在从表中,并指向 UID.ID



示例 23–3 is-single-row-table:falsecontains-shared-entries:false

在此案例中,主表和从表之间的关系为 1->n,也就是说,从表中的 n 个行将引用主表中的一行。此示例说明了多值属性的情况。多值属性在从表中以一组行表示,每个属性值为一行。

在关系数据库中,外键在从表中定义,它指向主表中的某个列。

例如,在某个组织中,员工可以有多个电话号码。定义了两个关系数据库表,结构如下:


primary table : EMPLOYEE [ID, NAME]
secondary table : PHONE [ID, VALUE, USER_ID]

定义了以下对象类和属性:


object-class : employee
attr : cn (from primary EMPLOYEE.NAME)
attr : telephoneNumber (from secondary PHONE.VALUE)

在从表中定义了以下过滤器联接规则:


USER_ID=\${EMPLOYEE.ID}


示例 23–4 is-single-row-table:falsecontains-shared-entries:true

目录代理服务器目前不支持此案例。


样例虚拟配置

以下部分提供两个样例配置。这些配置说明虚拟目录的主要功能,并指出这些功能的配置方式。

联接 LDAP 目录和 MySQL 数据库

本部分中的过程介绍将 LDAP 目录和 MySQL 数据库联接在一起的样例虚拟配置。LDAP 目录是主数据源,其中包含大多数用户信息。MySQL 数据库包含有关用户的其他信息。下图说明了最终的配置。

图 23–1 样例虚拟配置

图中显示了由 LDAP 数据视图和 JDBC 数据视图组成的联接数据视图

可以使用 install-path/ds6/ldif/Example.ldif 中提供的样例数据复制此示例,也可以使用您自己的数据替换样例数据。

此配置可以分为三个部分:

为了简单起见,本部分中的所有命令都假定目录代理服务器在 /local/dps 中的本地主机上运行。这些命令还假定设置了以下环境变量:

DIR_PROXY_PORT

1389

LDAP_ADMIN_PWF

pwd.txt,包含管理员密码的文件。

DIRSERV_PORT

4389

LDAP_ADMIN_USER

cn=Directory Manager

配置和测试 LDAP 数据视图

Procedure配置 LDAP 数据视图

开始之前

本部分中的任务假定运行环境如下:

  1. 为目录服务器实例创建名为 myds1 的 LDAP 数据源。


    % dpconf create-ldap-data-source myds1 host1:4389
  2. 启用该数据源,并允许对其执行写入操作。


    % dpconf set-ldap-data-source-prop myds1 is-enabled:true is-read-only:false
  3. 创建名为 myds1-pool 的 LDAP 数据源池。


    % dpconf create-ldap-data-source-pool myds1-pool
  4. 将 LDAP 数据源连接到此 LDAP 数据源池。


    % dpconf attach-ldap-data-source myds1-pool myds1
  5. 指定数据源应接收来自该数据源池的所有绑定、添加、搜索和修改操作。


    % dpconf set-attached-ldap-data-source-prop myds1-pool myds1 add-weight:100 \
     bind-weight:100 modify-weight:100 search-weight:100
  6. 为数据源池创建名为 myds1–view 且基 DN 为 dc=example,dc=com 的 LDAP 数据视图。


    % dpconf create-ldap-data-view myds1-view myds1-pool dc=example,dc=com

Procedure测试 LDAP 数据视图

  1. dc=example,dc=com 下的用户身份搜索 LDAP 数据源中的所有条目,以验证您是否可以读取数据视图中的内容。


    % ldapsearch -p 1389 -D "uid=kvaughan,ou=people,dc=example,dc=com" -w bribery \
     -b dc=example,dc=com "objectclass=*"

    注 –

    必须使用 dc=example,dc=com 下的用户凭证。如果要使用 cn=Directory Manager,则必须定义用于处理该 DN 的数据视图。


  2. dc=example,dc=com 下的用户身份修改 userPassword 属性,以验证您是否可以向数据视图中写入内容。


    % ldapmodify -p 1389 -D "uid=kvaughan,ou=people,dc=example,dc=com" -w bribery
    dn: uid=kvaughan,ou=people,dc=example,dc=com
    changetype: modify
    replace: userPassword
    userPassword: myNewPassword

    注 –

    目录服务器中的默认 ACI 允许用户修改自己的密码。


配置和测试 JDBC 数据视图

以下任务假定已安装了 MySQL 数据库,该数据库正在运行并且填充了数据,同时该数据库还具有以下特性:

下表介绍数据库中的表及其复合字段。您需要使用此信息来设置 JDBC 数据视图。

MySQL 表 

字段 

EMPLOYEE

IDSURNAMEPASSWORDROOMCOUNTRY_ID

COUNTRY

IDNAME

PHONE

USER_IDNUMBER

Procedure配置 JDBC 数据视图

  1. 为 SQL 数据库创建名为 mysql1 的 JDBC 数据源。


    % dpconf create-jdbc-data-source -b sample_sql \
     -B jdbc:mysql://host2.example.com:3306/ \
     -J file:/net/host2.example/local/mysql/lib/jdbc.jar \
     -S com.mysql.jdbc.Driver mysql1
  2. 指定该 SQL 数据库的用户名和密码文件。


    % dpconf set-jdbc-data-source-prop mysql1 db-pwd-file:sqlpwd.txt db-user:root
  3. 重新启动代理服务器。


    % dpadm restart /local/dps
  4. 启用该数据源,并允许对其执行写入操作。


    % dpconf set-jdbc-data-source-prop mysql1 is-enabled:true is-read-only:false
  5. 创建名为 mysql1–pool 的 JDBC 数据源池。


    % dpconf create-jdbc-data-source-pool mysql1-pool
  6. 将 JDBC 数据源连接到此数据源池。


    % dpconf attach-jdbc-data-source mysql1-pool mysql1
  7. 为数据源池创建名为 myjdbc1–view 且基 DN 为 o=sql 的 JDBC 数据视图。


    % dpconf create-jdbc-data-view mysql1-view mysql1-pool o=sql
  8. 为 MySQL 数据库中的每个表创建 JDBC 表。


    % dpconf create-jdbc-table employee1 EMPLOYEE
    % dpconf create-jdbc-table country1 COUNTRY
    % dpconf create-jdbc-table phone1 PHONE

    SQL 数据库中的表名区分大小写。请确保您使用的大小写与 SQL 数据库中使用的相同。

  9. 为每个表中的每一列创建 JDBC 属性。

    创建 JDBC 属性会将 MySQL 列映射到 LDAP 属性。


    % dpconf add-jdbc-attr employee1 uid ID
    % dpconf add-jdbc-attr employee1 sn SURNAME
    % dpconf add-jdbc-attr employee1 userPassword PASSWORD
    % dpconf add-jdbc-attr employee1 roomNumber ROOM
    % dpconf add-jdbc-attr phone1 telephoneNumber NUMBER
    % dpconf add-jdbc-attr country1 countryName NAME

    无需为 phone1 user_idcountry1 id 列创建 JDBC 属性,因为这些列仅包含用于 EMPLOYEE.ID(已为其创建 LDAP 属性 uid)中的值。

  10. 为 LDAP person 对象类创建 JDBC 对象类。

    在此步骤中,employee1 表被标识为主表,而 country1phone1 表被标识为从表。创建 JDBC 对象类时也需要 DN。在此示例中,DN 是通过数据视图的 uid 属性和基 DN 构建的。


    % dpconf create-jdbc-object-class mysql1-view person employee1 country1 phone1 uid
  11. 定义主表和从表之间的联接规则。

    联接规则在从表上进行定义,用于确定该表中的数据如何链接到主表数据。


    % dpconf set-jdbc-table-prop country1 filter-join-rule:ID=\${EMPLOYEE.COUNTRY_ID}
    % dpconf set-jdbc-table-prop phone1 filter-join-rule:USER_ID=\${EMPLOYEE.ID}
  12. 指定 JDBC 对象类的超类。

    超类表示 JDBC 对象类从中继承属性的 LDAP 对象类。


    % dpconf set-jdbc-object-class-prop mysql1-view person super-class:top

Procedure创建所需的 ACI

测试 JDBC 数据视图之前,必须先通过配置 ACI 启用对数据视图的写入访问权限。默认情况下将拒绝对非 LDAP 数据视图的写入访问。在此示例中,只需添加一个允许用户修改其密码的全局 ACI。

  1. 以代理管理员身份向 JDBC 数据源中添加一个 ACI 池,并添加一个允许用户修改其条目的全局 ACI。


    % ldapmodify -p 1389 -D "cn=proxy manager" -w password
    dn: cn=mysql1,cn=virtual access controls
    changetype: add
    objectclass: acisource
    dpsaci: (targetattr="*") (target = "ldap:///o=sql") 
    (version 3.0; acl "enable all access for all users "; allow(all) 
    userdn="ldap:///uid=kvaughan,o=sql";)
    cn: mysql1
  2. 创建一个连接处理程序,以处理到 o=sql 域的连接。


    % dpconf create-connection-handler mysql1-handler
  3. 启用该连接处理程序,并将其配置为处理来自 o=sql 域用户的所有绑定。


    % dpconf set-connection-handler-prop mysql1-handler is-enabled:true \
     bind-dn-filters:"uid=.*,o=sql"
  4. 将连接处理程序配置为使用之前添加的 ACI 池。


    % dpconf set-connection-handler-prop mysql1-handler aci-source:mysql1

Procedure测试 JDBC 数据视图

  1. o=sql 下的用户身份搜索 JDBC 数据源,以验证您是否可以读取数据视图中的内容。


    % ldapsearch -p 1389 -D "uid=kvaughan,o=sql" -w mypwd -b o=sql "objectclass=*"

    注 –

    您必须使用 o=sql 下的用户的凭证。


  2. o=sql 下的用户身份修改 userPassword 属性,以验证您是否可以向数据视图中写入内容。


    % ldapmodify -p 1389 -D "uid=kvaughan,o=sql" -w mypwd
    dn: uid=kvaughan,o=sql
    changetype: modify
    replace: userPassword
    userPassword: myNewpwd

创建和测试联接数据视图

Procedure创建联接数据视图

  1. 创建名为 myjoin1–view 的联接数据视图。

    将 LDAP 数据视图指定为主数据视图,将 JDBC 数据视图指定为从数据视图。


    % dpconf create-join-data-view myjoin1-view myds1-view mysql1-view o=join
  2. 在从数据视图上定义联接规则。

    以下联接规则指定从数据视图中条目的 uid 属性应该与主数据视图中条目的 uid 属性相匹配。


    % dpconf set-jdbc-data-view-prop mysql1-view filter-join-rule:uid=\${myds1-view.uid}
  3. 如果在联接数据视图上设置了过滤器联接规则,则需要在从数据视图上设置虚拟转换规则,以便能够在联接数据视图上添加条目。


    dpconf add-virtual-transformation secondary-view-name \
    write add-attr-value dn uid=\${uid}

    注 –

    如果未设置此规则,则无法在联接数据视图上添加条目。


  4. 定义可以通过联接数据视图从主数据视图读取以及向主数据视图写入的属性集。


    % dpconf set-ldap-data-view-prop myds1-view viewable-attr:dn \
    viewable-attr:cn viewable-attr:sn viewable-attr:givenName \
    viewable-attr:objectClass viewable-attr:ou viewable-attr:l \
    viewable-attr:uid viewable-attr:mail viewable-attr:telephoneNumber \
    viewable-attr:facsimileTelephoneNumber viewable-attr:roomNumber \
    viewable-attr:userPassword
    % dpconf set-ldap-data-view-prop myds1-view writable-attr:dn \
    writable-attr:cn writable-attr:sn writable-attr:givenName \
    writable-attr:objectClass writable-attr:ou writable-attr:l \
    writable-attr:uid writable-attr:mail writable-attr:telephoneNumber \
     writable-attr:facsimileTelephoneNumber writable-attr:roomNumber \
    writable-attr:userPassword

    这些定义仅适用于联接视图环境。默认情况下,如果直接访问 LDAP 数据视图,则可以读取和写入所有属性。

  5. 定义可以通过联接数据视图在从数据视图中读取以及向从数据视图写入的属性集。


    % dpconf set-jdbc-data-view-prop mysql1-view viewable-attr:dn \
     viewable-attr:objectclass viewable-attr:sn viewable-attr:roomNumber \
     viewable-attr:userpassword viewable-attr:jobtitle viewable-attr:countryName \
     viewable-attr:telephoneNumber
    % dpconf set-jdbc-data-view-prop mysql1-view writable-attr:dn \
    writable-attr:objectclass writable-attr:sn writable-attr:roomNumber \
    writable-attr:userpassword writable-attr:jobtitle \
    writable-attr:countryName writable-attr:telephoneNumber

    这些定义仅适用于联接视图环境。默认情况下,如果直接访问 JDBC 数据视图,则可以读取和写入所有属性。

Procedure创建所需的 ACI

  1. 以代理管理员身份添加一个允许匿名访问联接数据视图的全局 ACI。


    % ldapmodify -p 1389 -D "cn=proxy manager" -w password
    dn: cn=myjoin1,cn=virtual access controls
    changetype: add
    objectclass: acisource
    dpsaci: (targetattr="*") (target = "ldap:///o=join") 
    (version 3.0; acl "anonymous_access"; allow(all) userdn="ldap:///anyone";)
    cn: myjoin1
  2. 将连接处理程序配置为使用之前添加的 ACI 池。


    % dpconf set-connection-handler-prop default-connection-handler aci-source:myjoin1

Procedure测试联接数据视图

  1. 以匿名用户身份搜索联接数据视图。

    在此步骤中,我们将搜索 Kirsten Vaughan 的条目,以查看是否会检索来自两个联接视图的数据。


    % ldapsearch -p 1389 -b o=join "uid=kvaughan"

    请注意,返回的条目包括来自 LDAP 数据视图和 JDBC 数据视图的属性。

  2. o=join 下的用户身份修改 userPassword 属性,以验证您是否可以向联接数据视图中写入内容。


    % ldapmodify -p 1389
    dn: uid=kvaughan,ou=people,o=join
    changetype: modify
    replace: userPassword
    userPassword: myPassword

联接多个不同的数据源

此配置以 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 用户数据存储方式的高级视图。

图 23–2 不同源中的数据存储

图中显示了 Example.com 用户数据在不同数据源中的存储方式

客户端应用程序要求

Example.com 有几个 LDAP 客户端应用程序需要访问存储在不同数据源中的数据。这些客户端应用程序的要求不尽相同。因此需要不同的数据视图。在某些情况下,客户端需要聚合数据。另外,某些客户端应用程序还需要访问 Company22 的用户数据,以便能够同时管理 Example.com 的新老员工。

下图提供了 Example.com 客户端应用程序要求的高级视图。

图 23–3 客户端应用程序要求

图中显示了 Example.com 的 LDAP 应用程序要求

以下部分提供了充分的目录代理服务器数据视图的配置示例,以满足此样例方案中所述的客户端应用程序要求。有关数据视图的工作方式的信息,请参见《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”

样例方案的配置可分为以下几部分:

聚合人力资源部门 LDAP 目录和管理部门 LDIF 文件中的数据

人力资源部门存储员工姓名、入职数据和职务级别等信息。管理部门存储大楼代码和办公室编号等其他信息。处理人力资源数据的客户端应用程序需要访问来自这两个数据源的组合数据。这两个数据源有一个公用属性 employeeNumber,即每个条目中都具有该属性 。

下图说明了此客户端应用程序的要求。

图 23–4 来自 LDAP 目录和 LDIF文件的数据聚合

图中显示了 LDAP 目录和 LDIF 文件的联接视图

要满足此应用程序要求,需要为薪酬目录和管理 LDIF 文件各创建一个数据视图。然后将这两个数据视图联接在一起,以提供对聚合数据的访问。目录代理服务器可以使用此公用属性聚合每个用户的数据。

为了简单起见,本部分中使用的命令假定运行环境如下:

要获取每个命令的完整语法,请运行不含任何选项的命令。例如:

$ dpconf create-ldap-data-view
Operands are missing
Usage: dpconf create-ldap-data-view VIEW_NAME POOL_NAME SUFFIX_DN

Procedure为薪酬目录创建和启用 LDAP 数据视图

  1. 为薪酬目录创建 LDAP 数据源。

    $ dpconf create-ldap-data-source payroll-directory payrollHost:2389
  2. 为薪酬目录创建 LDAP 数据源池。

    $ dpconf create-ldap-data-source-pool payroll-pool
  3. 将薪酬数据源连接到此数据源池。

    $ dpconf attach-ldap-data-source payroll-pool payroll-directory
  4. 配置连接数据源的权重。

    $ 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
  5. 为薪酬目录创建 LDAP 数据视图。

    $ dpconf create-ldap-data-view payroll-view payroll-pool o=example.com
  6. 启用 LDAP 数据视图,以便客户端请求可以路由到此数据视图。

    $ dpconf set-ldap-data-view-prop payroll-view is-enabled:true
  7. 重新启动目录代理服务器以使更改生效。

    $ dpadm restart /local/myDPS

Procedure为管理数据创建和启用 LDIF 数据视图

  1. 为管理数据创建 LDIF 数据视图。

    $ dpconf create-ldif-data-view admin-view example.ldif dc=example,dc=com
  2. 启用管理数据的 LDIF 数据视图。

    $ dpconf set-ldif-data-view-prop admin-view is-enabled:true
  3. 指定管理视图包含可由薪酬视图中的多个条目使用的条目。

    $ dpconf set-ldif-data-view-prop admin-view contains-shared-entries:true

    此属性设置为 TRUE 时,删除薪酬数据视图中的条目不会导致管理数据视图中的共享条目被删除。向薪酬数据视图添加条目只会将该条目添加到从数据视图(如果该条目尚不存在)。

  4. 重新启动目录代理服务器以使更改生效。

    $ dpadm restart /local/myDPS

Procedure联接薪酬数据视图和管理数据视图

  1. 在管理数据视图上创建过滤器联接规则,该规则指定数据的聚合方式。

    以下联接规则指定应该根据用户条目的 employeeNumber 属性联接数据。

    $ dpconf set-ldif-data-view-prop admin-view \
    filter-join-rule:employeeNumber=\${payroll-view.employeeNumber}
  2. 创建聚合这两个数据视图的联接数据视图。

    对于该联接数据视图,组织将使用后缀 DN dc=example,dc=com

    $ dpconf create-join-data-view example-join-view payroll-view admin-view \
    dc=example,dc=com

通过重命名 DN 将 Company 22 的数据添加到 Example.Com 的 DIT 中

Company 22 的用户数据存储在 DN dc=company22,dc=com 下。虽然在大多数情况下 Example.com 希望单独保留此用户数据,但一个客户端应用程序需要同时管理 Company 22 员工和其他 Example.com 员工。此客户端应用程序要求 Company 22 的用户数据类似于 Example.com 数据。

下图说明了此客户端应用程序的要求。

图 23–5 DN 重命名

图中显示了通过重命名 DN 将数据添加到 DIT

要满足此应用程序要求,需要为 Company 22 的目录创建一个虚拟 DN 为 dc=example,dc=com 的数据视图。

为了简单起见,本部分中使用的命令假定运行环境如下:

Procedure使用虚拟 DN 为 Company 22 的目录创建数据视图

  1. 为 Company 22 的目录创建 LDAP 数据源。

    $ dpconf create-ldap-data-source company22-directory company22Host:2389
  2. 为 Company 22 的目录创建 LDAP 数据源池。

    $ dpconf create-ldap-data-source-pool company22-pool
  3. 将 Company 22 的数据源连接到此数据源池。

    $ dpconf attach-ldap-data-source company22-pool company22-directory
  4. 配置连接数据源的权重。

    $ 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
  5. 使用虚拟 DN dc=example,dc=com 为 Company 22 的目录创建 LDAP 数据视图。

    $ dpconf create-ldap-data-view company22-view company22-pool dc=example,dc=com
  6. 指示目录代理服务器将此虚拟 DN 映射到 Company 22 目录中的实际 DN。

    $ dpconf set-ldap-data-view-prop company22-view \
    dn-mapping-source-base-dn:dc=company22,dc=com
  7. 启用 Company 22 目录的 LDAP 数据视图,以便客户端请求可以路由到此数据视图。

    $ dpconf set-ldap-data-view-prop company22-view is-enabled:true
  8. 重新启动目录代理服务器以使更改生效。

    $ dpadm restart /local/myDPS

将 Company 22 数据添加到人力资源数据

人力资源部门需要人力资源数据(来自 Example.com 和最近收购的 Company 22)的聚合视图。下图说明了人力资源部门全局应用程序的要求。

图 23–6 来自联接数据视图和 LDAP 数据视图的数据聚合

图中显示了 LDAP 目录和其他联接视图的复合联接视图

Procedure联接示例联接数据视图和 Company 22 数据视图

  1. 在 Company 22 数据视图上创建过滤器联接规则,该规则指定数据的聚合方式。

    以下联接规则指定应该根据用户条目的 employeeNumber 属性联接数据。

    $ dpconf set-ldif-data-view-prop company22-view \
    filter-join-rule:employeeNumber=\${example-join-view.employeeNumber}
  2. 创建联接数据视图,该视图将 Company 22 的数据视图和 Example.com 的联接数据视图聚合在一起。

    $ dpconf create-join-data-view global-join-view example-join-view \
    company22-view dc=example,dc=com

使 LDAP 客户端可以访问 SQL 数据库中的薪酬数据

Example.com 的薪酬部门将薪水数据存储在 SQL 数据库中。该数据库有两个表,即 employee 表和 salary 表。Example.com 具有需要访问这些数据的 LDAP 客户端应用程序。该客户端应用程序要求 SQL 数据类似于 LDAP 数据。

下图说明了此客户端应用程序的要求。

图 23–7 提供 SQL 数据库访问的 JDBC 数据视图

图中显示了提供 SQL 数据库访问的 JDBC 数据视图

要满足此应用程序要求,需要创建一个将 SQL 表中的列映射到 LDAP 属性的 JDBC 数据视图。

为了简单起见,本部分中使用的命令假定运行环境如下:

Procedure为 Example.com 的薪酬数据库创建 JDBC 数据视图

  1. 为薪酬数据库创建 JDBC 数据源。

    $ dpconf create-jdbc-data-source -b payrollsqldb \
      -B jdbc:payrollsqldb:payrollsql://localhost/ \
      -J file://payrollsqldb.jar \
      -S org.payrollsqldb.jdbcDriver payroll-src 
  2. 使用 SQL 数据库的属性配置 JDBC 数据源。

    $ dpconf set-jdbc-data-source-prop payroll-src \
      db-user:proxy db-pwd-file:password-file-location/myPasswordFile
  3. 启用 JDBC 数据源。

    $ dpconf set-jdbc-data-source-prop payroll-src is-enabled:true
  4. 为薪酬数据库创建 JDBC 数据源池。

    $ dpconf create-jdbc-data-source-pool payroll-pool
  5. 将薪酬数据源连接到此数据源池。

    $ dpconf attach-jdbc-data-source payroll-pool payroll-src
  6. 使用虚拟 DN o=payroll 为薪酬数据库创建 JDBC 数据视图。

    $ dpconf create-jdbc-data-view payroll-view payroll-pool o=payroll
  7. 为 SQL 数据库中的每个表创建 JDBC 表。

    $ dpconf create-jdbc-table jdbc-employee employee
    $ dpconf create-jdbc-table jdbc-salary salary
  8. 为 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
  9. 指定可以通过 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
  10. 创建一个映射到 LDAP 对象类的 JDBC 对象类。

    以下命令将创建一个映射到 LDAP person 对象类的对象类。该对象类指定应该将员工表用作主表,而将薪水表用作从表。eid 属性应用于构建 DN。

    $ dpconf create-jdbc-object-class payroll-view \
     person jdbc-employee jdbc-salary eid
  11. 在从表上创建过滤器联接规则,该规则指定从表中的数据应如何链接到主表数据。

    以下联接规则指定应根据 employee_id 属性联接数据。

    $ dpconf set-jdbc-table-prop jdbc-salary \
    filter-join-rule:employee_id=\${employee.employee_id}
  12. 在 JDBC 对象类上创建超类。

    $ dpconf set-jdbc-object-class-prop payroll-view person super-class:extensibleObject

添加虚拟访问控制

LDAP 目录上的访问控制是通过定义这些目录中的 ACI 来处理的。通过虚拟数据视图访问数据源时必须定义 ACI,这些 ACI 只适用于通过这些数据视图查看的数据。

所有通过目录代理服务器的访问都由连接处理程序进行控制。有关连接处理程序的信息,请参见第 26 章,客户端和目录代理服务器之间的连接

Procedure添加允许匿名访问的 ACI

  1. 添加 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");)
  2. 将连接处理程序指向虚拟 ACI。

    $ dpconf set-connection-handler-prop anonymous aci-source:ldifonly-acis
  3. 启用连接处理程序。

    $ dpconf set-connection-handler-prop anonymous is-enabled:true