以下任务假定已安装了 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 |