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

配置和测试 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