本章介绍如何创建虚拟数据视图。虚拟数据视图转换源数据,并向客户端应用程序显示该数据的不同视图。虚拟数据视图包括转换的 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 文件显示为类似于 LDAP 数据源。与 LDAP 数据视图不同,在设置 LDIF 数据视图时无需创建数据源或数据源池。但在创建数据视图时应指定 LDIF 文件。默认情况下,无法向 LDIF 数据视图中写入内容。有关详细信息,请参见在虚拟数据视图上定义访问控制。
有关创建和配置 LDIF 数据视图的信息,请参见以下过程。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
创建 LDIF 数据视图。
$ dpconf create-ldif-data-view -h host -p port view-name path-to-ldif-file suffix-dn |
(可选的)查看 LDIF 数据视图的列表。
$ dpconf list-ldif-data-views -h host -p port |
虚拟访问控制数据视图是唯一的默认 LDIF 数据视图。此数据视图由服务器生成,可以将请求路由到虚拟访问控制指令 (access control instruction, ACI)。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
查看 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 |
更改步骤 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”。
创建目录代理服务器实例时,将为虚拟访问控制定义以下默认配置:
默认情况下存储 ACI 的 LDIF 文件 (instance-path/config/access_controls.ldif)
名为虚拟访问控制的 LDIF 数据视图
目录代理服务器可以通过此数据视图访问 LDIF 文件中存储的 ACI。
如果不想使用前面介绍的默认 ACI 配置,可以定义其他的存储系统信息库。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
为要存储 ACI 的系统信息库创建数据视图。
如果将在 LDAP 目录中存储 ACI,请创建一个 LDAP 数据源和一个 LDAP 数据视图,如第 19 章,LDAP 数据视图中所述。
如果 ACI 将存储在 LDIF 文件中,请创建一个 LDIF 数据视图,如创建和配置 LDIF 数据视图所述。
将上一步创建的数据视图的名称指定为 ACI 数据视图。
$ dpconf set-virtual-aci-prop -h host -p port aci-data-view:data-view-name
如果 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
无论使用的是什么 ACI 系统信息库,都必须配置虚拟访问控制。
只有代理管理员才能直接通过 ACI 数据视图创建 ACI 池和管理 ACI。如果 ACI 系统信息库是 LDAP 目录,则必须修改该目录的模式,以使其包含 aciSource 对象类和 dpsaci 属性。有关自定义该模式的详细信息,请参见扩展目录服务器模式。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
在 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 |
将一个或多个连接处理程序配置为使用此 ACI 池。
% dpconf set-connection-handler-prop -h host -p port connection-handler \ aci-source:aci-source-name |
将所需的 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 属性:
指示服务器实例使用外部模式。
$ dpconf set-server-prop -h host -p port use-external-schema:true |
对连接处理程序启用模式检查。
$ dpconf set-connection-handler-prop -h host -p port connection-handler \ schema-check-enabled:true |
创建公开 cn=schema 的数据视图。
如果在 LDAP 目录中定义外部模式,请使用名为 cn=schema 的视图基创建 LDAP 数据视图,如第 19 章,LDAP 数据视图中所述。
如果在 LDIF 文件中定义外部模式,请使用视图基 cn=schema 创建 LDIF 数据视图,如创建和配置 LDIF 数据视图所述。
将此数据视图添加到由连接处理程序公开的数据视图列表中。
默认情况下,所有数据视图都由连接处理程序公开。如果已定义由连接处理程序公开的数据视图的自定义列表,请将此数据视图添加到列表中。
$ 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”。
有关如何创建和配置联接数据视图的信息,请参见以下过程。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
对将要聚合成联接视图的主数据视图和从数据视图进行标识。
在创建联接视图之前,必须存在主数据视图和从数据视图。主数据视图和从数据视图可以是任意类型的数据视图,包括 LDAP 数据视图、LDIF 数据视图、JDBC 数据视图或其他联接数据视图。必须在从视图上配置一些特定属性,以便将其作为联接视图的源。有关详细信息,请参见配置联接视图的从视图。
创建联接数据视图。
$ dpconf create-join-data-view -h host -p port view-name primary-view secondary-view \ suffix-dn |
(可选的)查看联接视图列表,以检查是否已成功创建数据视图。
$ dpconf list-join-data-views -h host -p port |
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
查看联接数据视图的属性。
$ 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 |
更改步骤 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 |
配置联接数据视图时,请在主数据视图和从数据视图上设置 viewable-attr 和 writable-attr 属性。
设置这些属性有助于在主数据视图和从数据视图上相应地拆分搜索过滤器。否则,当搜索过滤器包含来自从数据视图的属性时,搜索结果可能会出现不一致。
重新启动目录代理服务器实例以使更改生效(如有必要)。
有关重新启动目录代理服务器的信息,请参见重新启动目录代理服务器。
通过在联接数据视图中设置联接规则配置信息,可使多个联接数据视图能够引用该数据视图。要具备此功能,请执行以下操作:
在联接数据视图上,将 join-rule-control-enabled 设置为 true。
$ dpconf set-join-data-view-prop view-name join-rule-control-enabled:true |
将 join-rule-control-enabled 设置为 true 后,服务器将使用联接数据视图中存储的联接规则配置信息。如果联接数据视图的联接规则配置信息存储在从数据视图中,服务器将不会使用此信息。要让服务器使用此信息,您必须手动在联接数据视图级别添加此配置信息。
定义联接规则,以确定从视图与主视图的关联方式。
联接规则可为以下任一选项:
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 中,则不需要进行转义。
必须在从数据视图上配置一些特定属性,以便将其作为联接视图的源。由于从视图可以是任意类型的数据视图,因此您所使用的命令取决于数据视图类型。以下样例命令假定从视图为 LDAP 数据视图。有关此处介绍的属性的详细信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的“Additional Secondary Data View Properties”。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
定义联接规则,以确定从视图与主视图的关联方式。
切勿对联接视图的主数据视图设置 filter-join-rule 和 dn-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-rule 和 filter-join-rule 属性的配置。否则,如果在联接数据视图上将 join-rule-control-enabled 属性设置为 true,将忽略在从视图上设置的此信息。
如果在联接数据视图上设置了过滤器联接规则,则需要在从数据视图上设置虚拟转换规则,以便能够在联接数据视图上添加条目。
dpconf add-virtual-transformation secondary-view-name \ write add-attr-value dn uid=\${uid} |
如果未设置此规则,则无法在联接数据视图上添加条目。
(可选的)指定从视图上是否允许绑定。
默认情况下,所有数据视图上都允许绑定。如果您要禁止绑定到从数据视图,请运行以下命令:
$ 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”。
(可选的)指定从视图是否包含共享条目。
$ 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 数据视图,可使 LDAP 客户端应用程序能够访问关系数据库。有关 JDBC 数据视图的工作方式的信息,请参见《Sun Java System Directory Server Enterprise Edition 6.3 Reference》中的“JDBC Data Views”。
有关如何创建和配置 JDBC 数据视图的信息,请参见以下过程。
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
为关系数据库创建 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 数据源时,必须设置以下属性:
关系数据库的名称,例如 payrolldb。
指向数据库的 URL,格式为 jdbc: vendor:driver://dbhost: dbport。
db-url 不是完整的 JDBC 数据库 URL,因为它不包含数据库名称。(数据库名称由 db-name 属性指定。)
对于 MySQL、DB2 和 Derby 数据库,db-url 必须以 / 结束;对于 Oracle 数据库,则必须以 : 结束。
JDBC 驱动程序类,例如 org.hsqldb.jdbcDriver。
JDBC 驱动程序所在的路径,例如 file:/// path/to/hsqldb/lib/hsqldb.jar。
driver-url 属性是多值属性。因此,driver-url 可以为 JDBC 驱动程序支持多个 JAR 文件,以确保连接到不同平台上的 JDBC 源。
创建 JDBC 数据源池。
$ dpconf create-jdbc-data-source-pool -h host -p port pool-name |
将 JDBC 数据源连接到此 JDBC 数据源池。
$ dpconf attach-jdbc-data-source -h host -p port pool-name source-name |
创建 JDBC 数据视图。
$ dpconf create-jdbc-data-view -h host -p port view-name pool-name suffix-DN |
(可选的)查看 JDBC 数据视图列表,以检查是否已成功创建数据视图。
$ dpconf list-jdbc-data-views -h host -p port |
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
查看 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 |
更改步骤 1 中列出的一个或多个属性。
$ dpconf set-jdbc-data-view-prop -h host -p port view-name property:value \ [property:value ... ] |
JDBC 对象类。将一个或多个 JDBC 表映射到 LDAP 对象类。
JDBC 表。为每个关系数据库表定义。
JDBC 属性。从 JDBC 表的指定列中定义 LDAP 属性。
为关系数据库中的每个表创建 JDBC 表。
% dpconf create-jdbc-table jdbc-table-name db-table |
db-table 的名称区分大小写。请确保使用的大小写与关系数据库中使用的相同,否则针对该表的操作可能会失败。
为每个关系数据库表中的每个列创建 JDBC 属性。
% dpconf add-jdbc-attr table-name attr-name sql-column |
创建 JDBC 属性会将表列映射到 LDAP 属性。
(可选的)如果关系数据库中的列区分大小写,请更改 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。
为 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 值的子树。
如果存在从表,请定义主表和从表之间的联接规则。
% dpconf set-jdbc-table-prop secondary-table-name filter-join-rule:join-rule |
联接规则在从表上进行定义,用于确定该表中的数据如何链接到主表数据。对象类主表和从表关系的定义方式非常重要。有关详细信息,请参见定义 JDBC 表之间的关系。
指定 JDBC 对象类的超类。
% dpconf set-jdbc-object-class-prop view-name objectclass super-class:value |
超类表示 JDBC 对象类所继承的 LDAP 对象类。
最简单的情况是 JDBC 对象类只包含一个(主)表。不存在从表,因此无需定义表之间的关系。
如果对象类包含多个表,则必须明确定义这些表之间的关系。表之间的关系始终在从表上进行定义。可以使用从表的以下属性定义这些关系:
is-single-row-table 指定 LDAP 条目在表中只有一个匹配行。
contains-shared-entries 指定从表中的一行由主表中的多个行使用。
filter-join-rule 表示应如何根据主表内容从从表中检索条目。
以下示例将说明如何根据前两个属性的值定义过滤器联接规则。这些示例假定对象类具有一个主表和一个从表。
以上是这些属性的默认值。在此案例中,主表和从表之间的关系为 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 操作的运行方式如下:
添加员工条目。如果员工条目中的经理在表中不存在,将创建一个新行。如果该经理存在,则使用现有行。
替换条目中 "manager" 属性的值。MANAGER.NAME 行的值将发生更改。
删除员工条目。从表中的行不会删除,因为经理条目为共享条目。
从条目中删除 "manager" 属性。从表中的行将被删除,并且外键 (EMPLOYEE.FK_MANAGER_ID) 被设置为 NULL。
在此案例中,主表和从表之间的关系为 1->1 或 1<-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。
在此案例中,主表和从表之间的关系为 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} |
目录代理服务器目前不支持此案例。
以下部分提供两个样例配置。这些配置说明虚拟目录的主要功能,并指出这些功能的配置方式。
本部分中的过程介绍将 LDAP 目录和 MySQL 数据库联接在一起的样例虚拟配置。LDAP 目录是主数据源,其中包含大多数用户信息。MySQL 数据库包含有关用户的其他信息。下图说明了最终的配置。
可以使用 install-path/ds6/ldif/Example.ldif 中提供的样例数据复制此示例,也可以使用您自己的数据替换样例数据。
此配置可以分为三个部分:
配置和测试 LDAP 数据视图
配置和测试 JDBC 数据视图
配置和测试联接数据视图
为了简单起见,本部分中的所有命令都假定目录代理服务器在 /local/dps 中的本地主机上运行。这些命令还假定设置了以下环境变量:
1389
pwd.txt,包含管理员密码的文件。
4389
cn=Directory Manager
本部分中的任务假定运行环境如下:
目录服务器实例通过端口 4389 在 host1上运行。
目录服务器中的数据存储在后缀 dc=example,dc=com 下。要复制此示例,请创建一个目录服务器实例,并创建后缀 dc=example,dc=com,然后将样例数据导入 install-path/ds6/ldif/Example.ldif 中。
为目录服务器实例创建名为 myds1 的 LDAP 数据源。
% dpconf create-ldap-data-source myds1 host1:4389 |
启用该数据源,并允许对其执行写入操作。
% dpconf set-ldap-data-source-prop myds1 is-enabled:true is-read-only:false |
创建名为 myds1-pool 的 LDAP 数据源池。
% dpconf create-ldap-data-source-pool myds1-pool |
将 LDAP 数据源连接到此 LDAP 数据源池。
% dpconf attach-ldap-data-source myds1-pool myds1 |
指定数据源应接收来自该数据源池的所有绑定、添加、搜索和修改操作。
% dpconf set-attached-ldap-data-source-prop myds1-pool myds1 add-weight:100 \ bind-weight:100 modify-weight:100 search-weight:100 |
为数据源池创建名为 myds1–view 且基 DN 为 dc=example,dc=com 的 LDAP 数据视图。
% dpconf create-ldap-data-view myds1-view myds1-pool dc=example,dc=com |
以 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 的数据视图。
以 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 允许用户修改自己的密码。
以下任务假定已安装了 MySQL 数据库,该数据库正在运行并且填充了数据,同时该数据库还具有以下特性:
数据库名称:sample_sql
数据库 URL:host2.example.com:3306/
JDBC 驱动程序 URL:file:/net/host2.example/local/mysql/lib/jdbc.jar
驱动程序类:com.mysql.jdbc.Driver
数据库用户:root
数据库密码文件:mysqlpwd.txt
下表介绍数据库中的表及其复合字段。您需要使用此信息来设置 JDBC 数据视图。
MySQL 表 |
字段 |
---|---|
EMPLOYEE |
ID、SURNAME、PASSWORD、ROOM、COUNTRY_ID |
COUNTRY |
ID、NAME |
PHONE |
USER_ID、NUMBER |
为 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 |
指定该 SQL 数据库的用户名和密码文件。
% dpconf set-jdbc-data-source-prop mysql1 db-pwd-file:sqlpwd.txt db-user:root |
重新启动代理服务器。
% dpadm restart /local/dps |
启用该数据源,并允许对其执行写入操作。
% dpconf set-jdbc-data-source-prop mysql1 is-enabled:true is-read-only:false |
创建名为 mysql1–pool 的 JDBC 数据源池。
% dpconf create-jdbc-data-source-pool mysql1-pool |
将 JDBC 数据源连接到此数据源池。
% dpconf attach-jdbc-data-source mysql1-pool mysql1 |
为数据源池创建名为 myjdbc1–view 且基 DN 为 o=sql 的 JDBC 数据视图。
% dpconf create-jdbc-data-view mysql1-view mysql1-pool o=sql |
为 MySQL 数据库中的每个表创建 JDBC 表。
% dpconf create-jdbc-table employee1 EMPLOYEE % dpconf create-jdbc-table country1 COUNTRY % dpconf create-jdbc-table phone1 PHONE |
SQL 数据库中的表名区分大小写。请确保您使用的大小写与 SQL 数据库中使用的相同。
为每个表中的每一列创建 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_id 和 country1 id 列创建 JDBC 属性,因为这些列仅包含用于 EMPLOYEE.ID(已为其创建 LDAP 属性 uid)中的值。
为 LDAP person 对象类创建 JDBC 对象类。
在此步骤中,employee1 表被标识为主表,而 country1 和 phone1 表被标识为从表。创建 JDBC 对象类时也需要 DN。在此示例中,DN 是通过数据视图的 uid 属性和基 DN 构建的。
% dpconf create-jdbc-object-class mysql1-view person employee1 country1 phone1 uid |
定义主表和从表之间的联接规则。
联接规则在从表上进行定义,用于确定该表中的数据如何链接到主表数据。
% 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} |
指定 JDBC 对象类的超类。
超类表示 JDBC 对象类从中继承属性的 LDAP 对象类。
% dpconf set-jdbc-object-class-prop mysql1-view person super-class:top |
测试 JDBC 数据视图之前,必须先通过配置 ACI 启用对数据视图的写入访问权限。默认情况下将拒绝对非 LDAP 数据视图的写入访问。在此示例中,只需添加一个允许用户修改其密码的全局 ACI。
以代理管理员身份向 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 |
创建一个连接处理程序,以处理到 o=sql 域的连接。
% dpconf create-connection-handler mysql1-handler |
启用该连接处理程序,并将其配置为处理来自 o=sql 域用户的所有绑定。
% dpconf set-connection-handler-prop mysql1-handler is-enabled:true \ bind-dn-filters:"uid=.*,o=sql" |
将连接处理程序配置为使用之前添加的 ACI 池。
% dpconf set-connection-handler-prop mysql1-handler aci-source:mysql1 |
以 o=sql 下的用户身份搜索 JDBC 数据源,以验证您是否可以读取数据视图中的内容。
% ldapsearch -p 1389 -D "uid=kvaughan,o=sql" -w mypwd -b o=sql "objectclass=*" |
您必须使用 o=sql 下的用户的凭证。
以 o=sql 下的用户身份修改 userPassword 属性,以验证您是否可以向数据视图中写入内容。
% ldapmodify -p 1389 -D "uid=kvaughan,o=sql" -w mypwd dn: uid=kvaughan,o=sql changetype: modify replace: userPassword userPassword: myNewpwd |
将 LDAP 数据视图指定为主数据视图,将 JDBC 数据视图指定为从数据视图。
% dpconf create-join-data-view myjoin1-view myds1-view mysql1-view o=join |
在从数据视图上定义联接规则。
以下联接规则指定从数据视图中条目的 uid 属性应该与主数据视图中条目的 uid 属性相匹配。
% dpconf set-jdbc-data-view-prop mysql1-view filter-join-rule:uid=\${myds1-view.uid} |
如果在联接数据视图上设置了过滤器联接规则,则需要在从数据视图上设置虚拟转换规则,以便能够在联接数据视图上添加条目。
dpconf add-virtual-transformation secondary-view-name \ write add-attr-value dn uid=\${uid} |
如果未设置此规则,则无法在联接数据视图上添加条目。
定义可以通过联接数据视图从主数据视图读取以及向主数据视图写入的属性集。
% 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 数据视图,则可以读取和写入所有属性。
定义可以通过联接数据视图在从数据视图中读取以及向从数据视图写入的属性集。
% 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 数据视图,则可以读取和写入所有属性。
以代理管理员身份添加一个允许匿名访问联接数据视图的全局 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 |
将连接处理程序配置为使用之前添加的 ACI 池。
% dpconf set-connection-handler-prop default-connection-handler aci-source:myjoin1 |
在此步骤中,我们将搜索 Kirsten Vaughan 的条目,以查看是否会检索来自两个联接视图的数据。
% ldapsearch -p 1389 -b o=join "uid=kvaughan" |
请注意,返回的条目包括来自 LDAP 数据视图和 JDBC 数据视图的属性。
以 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 用户数据存储方式的高级视图。
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