다음 작업에서는 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, TITLE, COUNTRY_ID |
COUNTRY |
ID, NAME |
PHONE |
USER_ID, NUMBER |
SQL 데이터베이스에 mysql1이라는 JDBC 데이터 소스를 만듭니다.
% dpconf create-jdbc-data-source -b sample_sql -B jdbc:mysql://host2: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 |
o=sql의 기본 DN을 사용하여 myjdbc1–view라는 데이터 소스 풀에 대한 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 room ROOM % dpconf add-jdbc-attr phone1 tel NUMBER % dpconf add-jdbc-attr country1 country NAME |
phone1 user_id 및 country1 id 열은 MySQL 데이터베이스의 컨텍스트에서만 사용되므로 이러한 열에 대한 JDBC 속성을 만들 필요가 없습니다. 이러한 열에는 해당 LDAP 속성이 없습니다.
LDAP person 객체 클래스에 대한 JDBC 객체 클래스를 만듭니다.
이 단계에서 employee1 테이블은 기본 테이블로 식별되고 country1 및 phone1 테이블은 보조 테이블로 식별됩니다. 또한 JDBC 객체 클래스를 만들려면 DN이 필요합니다. 이 예에서 DN은 데이터 보기의 기본 DN 및 uid 속성에서 구성됩니다.
% 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만 추가하면 사용자가 자신의 비밀번호를 수정할 수 있습니다.
프록시 관리자로 ACI 풀을 JDBC 데이터 소스에 추가하고 사용자가 자신의 항목을 수정할 수 있도록 전역 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:///self";) 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 |