Sun Java System Directory Server Enterprise Edition 6.3 관리 설명서

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 데이터 보기 구성 및 테스트

ProcedureLDAP 데이터 보기를 구성하는 방법

시작하기 전에

이 절의 작업에서는 다음 정보를 가정합니다.

  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. 데이터 소스가 해당 데이터 소스 풀에서 바인드, 추가, 검색 및 수정 작업을 100% 받아야 함을 지정합니다.


    % dpconf set-attached-ldap-data-source-prop myds1-pool myds1 add-weight:100 \
     bind-weight:100 modify-weight:100 search-weight:100
  6. dc=example,dc=com의 기본 DN을 사용하여 데이터 소스 풀에 대한 myds1–view라는 LDAP 데이터 보기를 만듭니다.


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

ProcedureLDAP 데이터 보기를 테스트하는 방법

  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

ID, SURNAME,PASSWORD, ROOM, COUNTRY_ID

COUNTRY

ID, NAME

PHONE

USER_ID, NUMBER

ProcedureJDBC 데이터 보기를 구성하는 방법

  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. o=sql의 기본 DN을 사용하여 데이터 소스 풀에 대한 myjdbc1–view라는 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 열에는 LDAP 속성 uid가 이미 만들어진 EMPLOYEE.ID에 있는 값만 들어 있기 때문에 JDBC 속성을 만들 필요가 없습니다.

  10. LDAP person 객체 클래스에 대한 JDBC 객체 클래스를 만듭니다.

    이 단계에서 employee1 테이블은 기본 테이블로 식별되고 country1phone1 테이블은 보조 테이블로 식별됩니다. 또한 JDBC 객체 클래스를 만들려면 DN이 필요합니다. 이 예에서 DN은 데이터 보기의 기본 DN 및 uid 속성에서 구성됩니다.


    % 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. 프록시 관리자로 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:///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

ProcedureJDBC 데이터 보기를 테스트하는 방법

  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