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

23장 디렉토리 프록시 서버 가상화

이 장에서는 가상 데이터 보기를 만드는 방법에 대해 설명합니다. 가상 데이터 보기는 소스 데이터를 변환하고 해당 데이터의 다른 보기를 클라이언트 응용 프로그램에 제공합니다. 가상 데이터 보기에는 변환된 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 데이터 보기는 LDIF 파일이 LDAP 데이터 소스처럼 표시되는 간단한 가상 데이터 보기입니다. LDAP 데이터 보기와 달리 LDIF 데이터 보기를 설정할 때는 데이터 소스 또는 데이터 소스 풀을 만들지 않습니다. 대신, 데이터 보기를 만들 때 LDIF 파일을 지정합니다. 기본적으로 LDIF 데이터 보기에는 쓸 수 없습니다. 자세한 내용은 가상 데이터 보기에서 액세스 제어 정의를 참조하십시오.

LDIF 데이터 보기를 만들고 구성하는 방법에 대한 자세한 내용은 다음 절차를 참조하십시오.

ProcedureLDIF 데이터 보기를 만드는 방법

DSCC를 사용하여 이 작업을 수행할 수 없습니다. 이 절차에 설명된 것처럼 명령줄을 사용하십시오.

  1. LDIF 데이터 보기를 만듭니다.


    $ dpconf create-ldif-data-view -h host -p port view-name path-to-ldif-file suffix-dn
    
  2. (옵션) LDIF 데이터 보기 목록을 봅니다.


    $ dpconf list-ldif-data-views -h host -p port
    

    virtual access controls 데이터 보기는 유일한 기본 LDIF 데이터 보기입니다. 이 데이터 보기는 서버에서 생성되며 가상 액세스 제어 지침(ACI)에 요청을 전달하도록 합니다.

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

DSCC를 사용하여 이 작업을 수행할 수 없습니다. 이 절차에 설명된 것처럼 명령줄을 사용하십시오.

  1. 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
  2. 단계 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 ReferenceAccess Control On Virtual Data Views를 참조하십시오.

디렉토리 프록시 서버 인스턴스를 만드는 경우 가상 액세스 제어에 대해 다음 기본 구성이 정의됩니다.

Procedure새 ACI 저장소를 정의하는 방법

앞에 설명된 기본 ACI 구성을 사용하지 않으려면 다른 저장소를 정의할 수 있습니다.

DSCC를 사용하여 이 작업을 수행할 수 없습니다. 이 절차에 설명된 것처럼 명령줄을 사용하십시오.

  1. 가상 ACI가 저장되는 저장소에 대한 데이터 보기를 만듭니다.

  2. 이전 단계에서 만든 데이터 보기의 이름을 ACI 데이터 보기로 지정합니다.

    $ dpconf set-virtual-aci-prop -h host -p port aci-data-view:data-view-name
    
  3. 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
    

Procedure가상 액세스 제어를 구성하는 방법

사용하는 ACI 저장소에 상관없이 가상 액세스 제어를 구성해야 합니다.


주 –

프록시 관리자만 ACI 데이터 보기를 통해 ACI 풀을 만들고 ACI를 직접 관리할 수 있습니다. ACI 저장소가 LDAP 디렉토리인 경우 aciSource 객체 클래스 및 dpsaci 속성을 포함하도록 해당 디렉토리의 스키마를 수정해야 합니다. 스키마를 사용자 정의하는 방법에 대한 자세한 내용은 디렉토리 서버 스키마 확장을 참조하십시오.


DSCC를 사용하여 이 작업을 수행할 수 없습니다. 이 절차에 설명된 것처럼 명령줄을 사용하십시오.

  1. ACI 저장소에서 ACI 풀을 만들고 전역 ACI를 설정합니다.

    전역 ACI에 대한 자세한 내용은 Sun Java System Directory Server Enterprise Edition 6.3 ReferenceGlobal 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
    
  2. 이 ACI 풀을 사용하도록 하나 이상의 연결 처리기를 구성합니다.


    % dpconf set-connection-handler-prop -h host -p port connection-handler \
    aci-source:aci-source-name
    
  3. 필요한 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 등록 정보를 설정합니다.

Procedure스키마 검사를 정의하는 방법

  1. 서버 인스턴스가 외부 스키마를 사용해야 함을 나타냅니다.


    $ dpconf set-server-prop -h host -p port use-external-schema:true
  2. 연결 처리기에서 스키마 검사를 활성화합니다.


    $ dpconf set-connection-handler-prop -h host -p port connection-handler \
     schema-check-enabled:true
  3. cn=schema를 표시하는 데이터 보기를 만듭니다.

    외부 스키마가 LDAP 디렉토리에 정의된 경우 19 장, LDAP 데이터 보기에 설명된 것처럼 cn=schema의 보기 기준을 사용하여 LDAP 데이터 보기를 만듭니다.

    외부 스키마가 LDIF 파일에 정의된 경우 LDIF 데이터 보기 만들기 및 구성에 설명된 것처럼 cn=schema의 보기 기준을 사용하여 LDIF 데이터 보기를 만듭니다.

  4. 연결 처리기에서 표시되는 데이터 보기 목록에 이 데이터 보기를 추가합니다.

    기본적으로 모든 데이터 보기는 연결 처리기에서 표시됩니다. 연결 처리기에서 표시되는 데이터 보기의 사용자 정의 목록을 정의한 경우 이 데이터 보기를 해당 목록에 추가합니다.


    $ 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 ReferenceJoin Data Views를 참조하십시오.

결합 데이터 보기를 만들고 구성하는 방법에 대한 자세한 내용은 다음 절차를 참조하십시오.

Procedure결합 데이터 보기를 만드는 방법

DSCC를 사용하여 이 작업을 수행할 수 없습니다. 이 절차에 설명된 것처럼 명령줄을 사용하십시오.

  1. 결합 보기를 형성하도록 집계할 기본 및 보조 데이터 보기를 식별합니다.

    결합 보기를 만들려면 먼저 기본 및 보조 데이터 보기가 있어야 합니다. 기본 및 보조 보기는 LDAP 데이터 보기, LDIF 데이터 보기, JDBC 데이터 보기 또는 다른 결합 데이터 보기를 비롯한 모든 유형의 데이터 보기가 될 수 있습니다. 결합 보기의 소스로 작동하려면 보조 보기에서 특정 등록 정보를 구성해야 합니다. 자세한 내용은 결합 보기의 보조 보기를 구성하는 방법을 참조하십시오.

  2. 결합 데이터 보기를 만듭니다.


    $ dpconf create-join-data-view -h host -p port view-name primary-view secondary-view \
     suffix-dn
    
  3. (옵션) 데이터 보기가 성공적으로 만들어졌는지 확인하려면 결합 보기 목록을 봅니다.


    $ dpconf list-join-data-views -h host -p port
    

Procedure결합 데이터 보기를 구성하는 방법

DSCC를 사용하여 이 작업을 수행할 수 없습니다. 이 절차에 설명된 것처럼 명령줄을 사용하십시오.

  1. 결합 데이터 보기의 등록 정보를 봅니다.


    $ 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
  2. 단계 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
  3. 결합 데이터 보기가 구성된 경우 기본 데이터 보기와 보조 데이터 보기에서 viewable-attrwritable-attr 등록 정보를 설정합니다.

    이 등록 정보를 설정하면 기본 데이터 보기와 보조 데이터 보기에서 검색 필터를 적절하게 분할할 수 있습니다. 그렇지 않으면 검색 필터에 보조 데이터 보기의 속성이 포함되어 있을 때 검색 결과가 불일치할 수 있습니다.

  4. 필요한 경우 디렉토리 프록시 서버 인스턴스를 다시 시작하여 변경 사항을 적용합니다.

    디렉토리 프록시 서버를 다시 시작하는 방법에 대한 자세한 내용은 디렉토리 프록시 서버를 다시 시작하는 방법을 참조하십시오.

Procedure여러 결합 데이터 보기에서 데이터 보기를 참조할 수 있도록 결합 데이터 보기를 구성하는 방법

결합 데이터 보기에서 결합 규칙 구성 정보를 설정하면 여러 결합 데이터 보기에서 데이터 보기를 참조할 수 있습니다. 이렇게 하려면 다음을 수행합니다.

  1. 결합 데이터 보기에서 join-rule-control-enabledtrue로 설정합니다.


    $ dpconf set-join-data-view-prop view-name join-rule-control-enabled:true

    join-rule-control-enabledtrue로 설정한 후에는 결합 데이터 보기에 저장된 결합 규칙 구성 정보가 서버에서 사용됩니다. 결합 규칙 구성 정보가 있는 결합 데이터 보기가 보조 데이터 보기에 저장되어 있는 경우 이 정보는 서버에서 사용되지 않습니다. 서버에서 이 정보를 사용하려면 결합 데이터 보기 수준에서 구성 정보를 수동으로 추가해야 합니다.

  2. 보조 보기가 기본 보기와 관련된 방식을 결정하는 결합 규칙을 정의합니다.

    결합 규칙은 다음 중 하나일 수 있습니다.

    • 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에서는 이스케이프할 필요가 없습니다.

Procedure결합 보기의 보조 보기를 구성하는 방법

결합 보기의 소스로 작동하려면 보조 데이터 보기에서 특정 등록 정보를 구성해야 합니다. 보조 보기는 모든 유형의 데이터 보기가 될 수 있으므로 사용하는 명령은 데이터 보기 유형에 따라 달라집니다. 다음 명령 예에서는 보조 보기를 LDAP 데이터 보기로 가정합니다. 여기에 설명된 등록 정보에 대한 자세한 내용은 Sun Java System Directory Server Enterprise Edition 6.3 ReferenceAdditional Secondary Data View Properties를 참조하십시오.

DSCC를 사용하여 이 작업을 수행할 수 없습니다. 이 절차에 설명된 것처럼 명령줄을 사용하십시오.

  1. 보조 보기가 기본 보기와 관련된 방식을 결정하는 결합 규칙을 정의합니다.

    결합 보기의 기본 데이터 보기에 filter-join-ruledn-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}

    dn-join-rulefilter-join-rule 등록 정보의 구성은 결합 데이터 보기의 join-rule-control-enabled 등록 정보가 false로 설정된 경우에만 서버에서 사용됩니다. 그렇지 않으면 결합 데이터 보기에 join-rule-control-enabled 등록 정보가 true로 설정된 경우 보조 보기에 설정된 정보는 무시됩니다.

  2. 결합 데이터 보기에 필터 결합 규칙이 설정되어 있는 경우 결합 데이터 보기에 항목을 추가하려면 보조 데이터 보기에 가상 변환 규칙을 설정해야 합니다.


    dpconf add-virtual-transformation secondary-view-name \
    write add-attr-value dn uid=\${uid}

    주 –

    이 규칙을 설정하지 않으면 결합 데이터 보기에 항목을 추가할 수 없습니다.


  3. (옵션) 보조 보기에서 바인드가 허용되는지 여부를 지정합니다.

    기본적으로 바인드는 모든 데이터 보기에서 허용됩니다. 보조 데이터 보기에 대한 바인드를 금지하려면 다음 명령을 실행합니다.


    $ 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 ReferenceHandling of Binds를 참조하십시오.

  4. (옵션) 보조 보기에 공유 항목이 포함되는지 여부를 지정합니다.


    $ 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 ReferenceHandling of Shared Entries를 참조하십시오.

JDBC 데이터 보기 만들기 및 구성

JDBC 데이터 보기를 사용하면 LDAP 클라이언트 응용 프로그램이 관계형 데이터베이스에 액세스할 수 있습니다. JDBC 데이터 보기가 작동하는 방법에 대한 자세한 내용은 Sun Java System Directory Server Enterprise Edition 6.3 ReferenceJDBC Data Views를 참조하십시오.

JDBC 데이터 보기를 만들고 구성하는 방법에 대한 자세한 내용은 다음 절차를 참조하십시오.

ProcedureJDBC 데이터 보기를 만드는 방법

DSCC를 사용하여 이 작업을 수행할 수 없습니다. 이 절차에 설명된 것처럼 명령줄을 사용하십시오.

  1. 관계형 데이터베이스에 대한 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 데이터 소스를 만드는 경우 다음 등록 정보를 설정해야 합니다.

    db-name

    관계형 데이터베이스 이름(예: payrolldb).

    db-url

    jdbc: vendor:driver://dbhost: dbport 형식의 데이터베이스 URL.

    db-url에는 데이터베이스 이름이 없으므로 완전한 JDBC 데이터베이스 URL이 아닙니다. (데이터베이스 이름은 db-name 등록 정보로 지정됩니다.)

    MySQL, DB2 및 Derby 데이터베이스의 경우에는 db-url/로 끝나야 하고, Oracle 데이터베이스의 경우에는 :으로 끝나야 합니다.

    driver-class

    JDBC 드라이버 클래스(예: org.hsqldb.jdbcDriver).

    driver-url

    JDBC 드라이버 경로(예: file:/// path/to/hsqldb/lib/hsqldb.jar).

    driver-url 등록 정보는 여러 값을 가집니다. 따라서 driver-url은 JDBC 드라이버에 여러 개의 JAR 파일을 지원하여 여러 플랫폼의 JDBC 소스에 연결할 수 있습니다.

  2. JDBC 데이터 소스 풀을 만듭니다.


    $ dpconf create-jdbc-data-source-pool -h host -p port pool-name
    
  3. JDBC 데이터 소스를 JDBC 데이터 소스 풀에 첨부합니다.


    $ dpconf attach-jdbc-data-source -h host -p port pool-name source-name
    
  4. JDBC 데이터 보기를 만듭니다.


    $ dpconf create-jdbc-data-view -h host -p port view-name pool-name suffix-DN
    
  5. (옵션) 데이터 보기가 성공적으로 만들어졌는지 확인하려면 JDBC 데이터 보기 목록을 봅니다.


    $ dpconf list-jdbc-data-views -h host -p port
    

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

DSCC를 사용하여 이 작업을 수행할 수 없습니다. 이 절차에 설명된 것처럼 명령줄을 사용하십시오.

  1. 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
  2. 단계 1에 나열된 하나 이상의 등록 정보를 변경합니다.


    $ dpconf set-jdbc-data-view-prop -h host -p port view-name property:value \
     [property:value ... ]

ProcedureJDBC 테이블, 속성 및 객체 클래스 구성

JDBC 데이터 보기를 구성할 경우에는 다음 객체도 구성해야 합니다.

  1. 관계형 데이터베이스에서 각 테이블에 대한 JDBC 테이블을 만듭니다.


    % dpconf create-jdbc-table jdbc-table-name db-table
    

    db-table의 이름은 대소문자를 구분합니다. 관계형 데이터베이스에 사용된 것과 동일한 대소문자를 사용해야 하며, 그렇지 않으면 해당 테이블에 대한 작업이 실패할 수 있습니다.

  2. 각 관계형 데이터베이스 테이블에서 각 열에 대한 JDBC 속성을 만듭니다.


    % dpconf add-jdbc-attr table-name attr-name sql-column
    

    JDBC 속성을 만들면 테이블 열이 LDAP 속성에 매핑됩니다.

  3. (옵션) 관계형 데이터베이스의 열이 대소문자를 구분할 경우 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는 대소문자를 구분하지 않는 데이터베이스에서 지원되지 않습니다.


  4. 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로 지정하면 항목의 DN이 uid 속성 및 데이터 보기의 보기 기준을 사용하여 구성됩니다. 예를 들면 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가 있는 경우 JDBC 객체 클래스 정의에는 DN 패턴 ou가 포함되어야 합니다. 디렉토리 프록시 서버에서는 올바로 구성된 DIT를 구성해야 합니다. 그렇지 않으면 ou=xxx,base-DN과 같은 값이 있는 하위 트리는 검색 결과로 반환되지 않습니다.

  5. 보조 테이블이 있을 경우 기본 테이블과 보조 테이블 간에 결합 규칙을 정의합니다.


    % dpconf set-jdbc-table-prop secondary-table-name filter-join-rule:join-rule
    

    결합 규칙은 보조 테이블에 정의되며 해당 테이블의 데이터가 기본 테이블의 테이터에 연결되는 방법을 결정합니다. 객체 클래스의 기본 테이블과 보조 테이블 간에 관계를 정의하는 방법은 중요합니다. 자세한 내용은 JDBC 테이블 간의 관계 정의를 참조하십시오.

  6. JDBC 객체 클래스에 대한 수퍼 클래스를 지정합니다.


    % dpconf set-jdbc-object-class-prop view-name objectclass super-class:value
    

    수퍼 클래스는 JDBC 객체 클래스가 상속하는 LDAP 객체 클래스를 나타냅니다.

JDBC 테이블 간의 관계 정의

가장 단순한 경우 JDBC 객체 클래스는 단일(기본) 테이블만 포함합니다. 이 테이블에는 보조 테이블이 없으므로 테이블 간에 관계를 정의할 필요가 없습니다.

객체 클래스에 둘 이상의 테이블이 포함된 경우에는 해당 테이블 간의 관계를 분명하게 정의해야 합니다. 테이블 간의 관계는 항상 보조 테이블에서 정의됩니다. 보조 테이블의 다음 등록 정보를 사용하여 이러한 관계를 정의할 수 있습니다.

다음 예는 처음 두 개의 등록 정보 값을 기준으로 필터 결합 규칙을 정의하는 방법을 보여줍니다. 다음 예에서는 객체 클래스에 기본 테이블과 보조 테이블이 한 개씩 있다고 가정합니다.


예 23–1 is-single-row-table:truecontains-shared-entries:true

이 값은 해당 등록 정보의 기본값입니다. 이 경우 기본 테이블과 보조 테이블 간의 관계는 n->1입니다. 즉, 기본 테이블의 n개 행이 보조 테이블의 공유된 행 하나를 참조합니다.

관계형 데이터베이스에서 외래 키(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 작업에 대해 다음 동작이 발생합니다.



예 23–2 is-single-row-table:truecontains-shared-entries:false

이 경우 기본 테이블과 보조 테이블 간의 관계는 1->1 또는 1<-1입니다. 즉, 기본 테이블의 한 행을 보조 테이블의 한 행에서 참조합니다.

관계형 데이터베이스에서 외래 키(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를 가리키는 정반대 구성이 될 수 있습니다.



예 23–3 is-single-row-table:falsecontains-shared-entries:false

이 경우 기본 테이블과 보조 테이블 간의 괸계는 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}


예 23–4 is-single-row-table:falsecontains-shared-entries:true

이 경우는 현재 디렉토리 프록시 서버에서 지원되지 않습니다.


가상 구성 예

다음 절에서는 두 개의 구성 예에 대해 설명합니다. 이러한 구성은 가상 디렉토리의 기본 기능과 이러한 기능을 구성하는 방법을 보여줍니다.

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

별도의 여러 데이터 소스 결합

이 구성에서는 가상 디렉토리의 일부 기능이 특정 디렉토리 서비스 요구 사항을 충족하는 조직인 Example.com에 대해 설명합니다.

데이터 저장소 시나리오

Example.com은 별도의 여러 데이터 소스에 조직 데이터를 저장합니다. 레거시 이유로 인해 사용자 데이터는 LDAP 디렉토리, 플랫 LDIF 파일 및 SQL 데이터베이스에 분산됩니다. HR 부서는 o=example.com의 기본 DN을 사용하여 LDAP 디렉토리에 사용자 데이터를 저장합니다. 급여 부서는 데이터를 SQL 데이터베이스에 저장합니다. 관리 부서는 dc=example,dc=com의 기본 DN을 사용하여 부서 및 건물 번호와 같은 관리 데이터를 LDIF 파일에 저장합니다.

또한 Example.com은 Company22라는 회사를 인수했습니다. Company 22 역시 dc=company22,dc=com의 기본 DN을 사용하여 사용자 데이터를 LDAP 디렉토리에 저장합니다.

다음 다이어그램은 Example.com의 사용자 데이터가 저장되는 방법에 대한 상위 수준 보기를 제공합니다.

그림 23–2 별도의 소스에 있는 데이터 저장소

Example.com의 사용자 데이터가 별도의 데이터 소스에 저장되는 방법을 보여주는 그림

클라이언트 응용 프로그램 요구 사항

Example.com에는 별도의 데이터 소스에 저장된 데이터에 대한 액세스 권한을 필요로 하는 여러 LDAP 클라이언트 응용 프로그램이 있습니다. 클라이언트 응용 프로그램의 요구 사항은 각각 다릅니다. 다른 데이터 보기가 필요합니다. 클라이언트가 데이터를 집계하도록 요구하는 경우도 있습니다. 또한 일부 클라이언트 응용 프로그램에는 Example.com의 새 직원을 이전 직원과 함께 관리할 수 있도록 Company22의 사용자 데이터에 대한 액세스 권한이 필요합니다.

다음 다이어그램은 Example.com의 클라이언트 응용 프로그램 요구 사항에 대한 상위 수준 보기를 제공합니다.

그림 23–3 클라이언트 응용 프로그램 요구 사항

Example.com의 LDAP 응용 프로그램의 요구 사항을 보여주는 그림

다음 절에서는 이 샘플 시나리오에 설명된 클라이언트 응용 프로그램의 요구 사항을 충족할 수 있는 충분한 구성 디렉토리 프록시 서버 데이터 보기를 안내합니다. 데이터 보기가 작동하는 방법에 대한 자세한 내용은 Sun Java System Directory Server Enterprise Edition 6.3 Reference의 17 장, Directory Proxy Server DistributionSun Java System Directory Server Enterprise Edition 6.3 Reference의 18 장, Directory Proxy Server Virtualization을 참조하십시오.

샘플 시나리오의 구성은 다음 절로 구분됩니다.

HR LDAP 디렉토리 및 관리 LDIF 파일의 데이터 집계

HR 부서는 직원 이름, 작업 시작 데이터 및 작업 수준과 같은 정보를 저장합니다. 관리 부서는 건물 코드 및 사무실 번호와 같은 추가 데이터를 저장합니다. HR 데이터를 처리하는 클라이언트 응용 프로그램에는 두 소스의 결합된 데이터에 대한 액세스 권한이 필요합니다. 두 데이터 소스에는 각 항목에 존재하는 공통 속성인 employeeNumber가 있습니다.

다음 다이어그램은 클라이언트 응용 프로그램의 요구 사항을 보여줍니다.

그림 23–4 LDAP 디렉토리 및 LDIF 파일의 데이터 집계

LDAP 디렉토리 및 LDIF 파일의 결합 보기를 보여주는 그림

이 응용 프로그램의 요구 사항을 충족하기 위해 급여 디렉토리 및 관리 LDIF 파일에 대한 데이터 보기가 만들어집니다. 그런 다음 이러한 두 데이터 보기가 결합되어 집계된 데이터에 대한 액세스를 제공합니다. 이 공통 속성을 사용하여 디렉토리 프록시 서버는 각 사용자에 대한 데이터를 집계할 수 있습니다.

단순하게 만들기 위해 이 절에 사용된 명령은 다음 정보를 가정합니다.

각 명령의 완전한 구문을 얻으려면 명령을 옵션 없이 실행합니다. 예를 들면 다음과 같습니다.

$ dpconf create-ldap-data-view
Operands are missing
Usage: dpconf create-ldap-data-view VIEW_NAME POOL_NAME SUFFIX_DN

Procedure급여 디렉토리에 대한 LDAP 데이터 보기 만들기 및 활성화

  1. 급여 디렉토리에 대한 LDAP 데이터 소스를 만듭니다.

    $ dpconf create-ldap-data-source payroll-directory payrollHost:2389
  2. 급여 디렉토리에 대한 LDAP 데이터 소스 풀을 만듭니다.

    $ dpconf create-ldap-data-source-pool payroll-pool
  3. 급여 데이터 소스를 데이터 소스 풀에 첨부합니다.

    $ dpconf attach-ldap-data-source payroll-pool payroll-directory
  4. 첨부된 데이터 소스의 가중치를 구성합니다.

    $ 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
  5. 급여 디렉토리에 대한 LDAP 데이터 보기를 만듭니다.

    $ dpconf create-ldap-data-view payroll-view payroll-pool o=example.com
  6. 클라이언트 요청을 이 데이터 보기로 전달할 수 있도록 LDAP 데이터 보기를 활성화합니다.

    $ dpconf set-ldap-data-view-prop payroll-view is-enabled:true
  7. 디렉토리 프록시 서버를 다시 시작하여 변경 사항을 적용합니다.

    $ dpadm restart /local/myDPS

Procedure관리 데이터에 대한 LDIF 데이터 보기 만들기 및 활성화

  1. 관리 데이터에 대한 LDIF 데이터 보기를 만듭니다.

    $ dpconf create-ldif-data-view admin-view example.ldif dc=example,dc=com
  2. 관리 데이터에 대한 LDIF 데이터 보기를 활성화합니다.

    $ dpconf set-ldif-data-view-prop admin-view is-enabled:true
  3. 관리 보기가 급여 보기에서 둘 이상의 항목에 사용되는 항목을 포함하도록 지정합니다.

    $ dpconf set-ldif-data-view-prop admin-view contains-shared-entries:true

    이 등록 정보를 TRUE로 설정할 경우 급여 데이터 보기에서 항목을 삭제하면 관리 데이터 보기의 공유 항목이 삭제되지 않습니다. 급여 데이터 보기에 항목을 추가하면 항목이 보조 데이터 보기에만 추가됩니다(아직 없는 경우).

  4. 디렉토리 프록시 서버를 다시 시작하여 변경 사항을 적용합니다.

    $ dpadm restart /local/myDPS

Procedure급여 데이터 보기 및 관리 데이터 보기 결합

  1. 관리 데이터 보기에서 데이터가 집계되는 방법을 지정하는 필터 결합 규칙을 만듭니다.

    다음 결합 규칙은 사용자 항목의 employeeNumber 속성을 기준으로 데이터를 결합해야 함을 지정합니다.

    $ dpconf set-ldif-data-view-prop admin-view \
    filter-join-rule:employeeNumber=\${payroll-view.employeeNumber}
  2. 두 데이터 보기를 집계하는 결합 데이터 보기를 만듭니다.

    결합 데이터 보기의 경우 조직에서는 접미어 DN dc=example,dc=com을 사용합니다.

    $ dpconf create-join-data-view example-join-view payroll-view admin-view \
    dc=example,dc=com

DN의 이름을 바꾸어 Company 22의 데이터를 Example.Com의 DIT에 추가

Company 22의 사용자 데이터는 DN dc=company22,dc=com에 저장됩니다. Example.com에서는 대부분 이 사용자 데이터를 별도로 유지하려고 하지만 한 클라이언트 응용 프로그램은 나머지 Example.com 직원과 함께 Company 22 직원을 관리해야 합니다. 이 클라이언트 응용 프로그램의 경우 Company 22 사용자 데이터의 모양은 Example.com 데이터와 같아야 합니다.

다음 다이어그램은 클라이언트 응용 프로그램의 요구 사항을 보여줍니다.

그림 23–5 DN 이름 바꾸기

DN의 이름을 바꾸어 DIT에 데이터를 추가하는 그림

이 응용 프로그램의 요구 사항을 충족하기 위해 dc=example,dc=com의 가상 DN을 사용하여 데이터 보기가 Company 22의 디렉토리에 대해 만들어집니다.

단순하게 만들기 위해 이 절에 사용된 명령은 다음 정보를 가정합니다.

Procedure가상 DN을 사용하여 Company 22의 디렉토리에 대한 데이터 보기 만들기

  1. Company 22의 디렉토리에 대한 LDAP 데이터 소스를 만듭니다.

    $ dpconf create-ldap-data-source company22-directory company22Host:2389
  2. Company 22의 디렉토리에 대한 LDAP 데이터 소스 풀을 만듭니다.

    $ dpconf create-ldap-data-source-pool company22-pool
  3. Company 22의 데이터 소스를 데이터 소스 풀에 첨부합니다.

    $ dpconf attach-ldap-data-source company22-pool company22-directory
  4. 첨부된 데이터 소스의 가중치를 구성합니다.

    $ 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
  5. dc=example,dc=com의 가상 DN을 사용하여 Company 22의 디렉토리에 대한 LDAP 데이터 보기를 만듭니다.

    $ dpconf create-ldap-data-view company22-view company22-pool dc=example,dc=com
  6. 이 가상 DN을 Company 22의 디렉토리에 있는 실제 DN에 매핑하도록 디렉토리 프록시 서버에 지시합니다.

    $ dpconf set-ldap-data-view-prop company22-view \
    dn-mapping-source-base-dn:dc=company22,dc=com
  7. 클라이언트 요청을 이 데이터 보기에 전달할 수 있도록 Company 22의 디렉토리에 대한 LDAP 데이터 보기를 활성화합니다.

    $ dpconf set-ldap-data-view-prop company22-view is-enabled:true
  8. 디렉토리 프록시 서버를 다시 시작하여 변경 사항을 적용합니다.

    $ dpadm restart /local/myDPS

Company 22의 데이터를 HR 데이터에 추가

HR 부서에서는 Example.com과 새로 인수한 Company 22에 대한 HR 데이터의 집계된 보기가 필요합니다. 다음 다이어그램은 전역 HR 응용 프로그램의 요구 사항을 보여줍니다.

그림 23–6 결합 데이터 보기 및 LDAP 데이터 보기의 데이터 집계

LDAP 디렉토리 및 다른 결합 보기의 복잡한 결합 보기를 보여주는 그림

Procedure결합 데이터 보기 및 Company 22 데이터 보기 예 결합

  1. Company 22 데이터 보기에서 데이터가 집계되는 방법을 지정하는 필터 결합 규칙을 만듭니다.

    다음 결합 규칙은 사용자 항목의 employeeNumber 속성을 기준으로 데이터를 결합해야 함을 지정합니다.

    $ dpconf set-ldif-data-view-prop company22-view \
    filter-join-rule:employeeNumber=\${example-join-view.employeeNumber}
  2. Company 22의 데이터 보기와 Example.com의 결합 데이터 보기를 집계하는 결합 데이터 보기를 만듭니다.

    $ dpconf create-join-data-view global-join-view example-join-view \
    company22-view dc=example,dc=com

SQL 데이터베이스의 급여 데이터에 액세스할 수 있도록 LDAP 클라이언트 활성화

Example.com의 급여 부서는 급여 데이터를 SQL 데이터베이스에 저장합니다. 이 데이터베이스에는 두 개의 테이블(employeesalary)이 있습니다. Example.com에는 해당 데이터에 대한 액세스 권한을 필요로 하는 LDAP 클라이언트 응용 프로그램이 있습니다. 이 클라이언트 응용 프로그램의 경우 SQL 데이터의 모양이 LDAP 데이터와 같아야 합니다.

다음 다이어그램은 클라이언트 응용 프로그램의 요구 사항을 보여줍니다.

그림 23–7 SQL 데이터베이스에 대한 액세스를 제공하는 JDBC 데이터 보기

SQL 데이터베이스에 대한 액세스를 제공하는 JDBC 데이터 보기를 보여주는 그림

이 응용 프로그램의 요구 사항을 충족하기 위해 SQL 테이블의 열을 LDAP 속성에 매핑하는 JDBC 데이터 보기가 만들어집니다.

단순하게 만들기 위해 이 절에 사용된 명령은 다음 정보를 가정합니다.

ProcedureExample.com의 급여 데이터베이스에 대한 JDBC 데이터 보기 만들기

  1. 급여 데이터베이스에 대한 JDBC 데이터 소스를 만듭니다.

    $ dpconf create-jdbc-data-source -b payrollsqldb \
      -B jdbc:payrollsqldb:payrollsql://localhost/ \
      -J file://payrollsqldb.jar \
      -S org.payrollsqldb.jdbcDriver payroll-src 
  2. SQL 데이터베이스의 등록 정보를 사용하여 JDBC 데이터 소스를 구성합니다.

    $ dpconf set-jdbc-data-source-prop payroll-src \
      db-user:proxy db-pwd-file:password-file-location/myPasswordFile
  3. JDBC 데이터 소스를 활성화합니다.

    $ dpconf set-jdbc-data-source-prop payroll-src is-enabled:true
  4. 급여 데이터베이스에 대한 JDBC 데이터 소스 풀을 만듭니다.

    $ dpconf create-jdbc-data-source-pool payroll-pool
  5. 급여 데이터 소스를 데이터 소스 풀에 첨부합니다.

    $ dpconf attach-jdbc-data-source payroll-pool payroll-src
  6. o=payroll의 가상 DN을 사용하여 급여 데이터베이스에 대한 JDBC 데이터 보기를 만듭니다.

    $ dpconf create-jdbc-data-view payroll-view payroll-pool o=payroll
  7. SQL 데이터베이스의 각 테이블에 대한 JDBC 테이블을 만듭니다.

    $ dpconf create-jdbc-table jdbc-employee employee
    $ dpconf create-jdbc-table jdbc-salary salary
  8. 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
  9. 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
  10. LDAP 객체 클래스에 매핑되는 JDBC 객체 클래스를 만듭니다.

    다음 명령은 LDAP person 객체 클래스에 매핑되는 객체 클래스를 만듭니다. 객체 클래스는 직원 테이블을 기본 테이블로 사용하고 급여 테이블을 보조 테이블로 사용해야 함을 지정합니다. eid 속성을 사용하여 DN을 구성해야 합니다.

    $ dpconf create-jdbc-object-class payroll-view \
     person jdbc-employee jdbc-salary eid
  11. 보조 테이블의 데이터가 기본 테이블의 데이터에 연결되는 방법을 지정하는 필터 결합 규칙을 보조 테이블에서 만듭니다.

    다음 결합 규칙은 employee_id 속성을 기준으로 데이터를 결합해야 함을 지정합니다.

    $ dpconf set-jdbc-table-prop jdbc-salary \
    filter-join-rule:employee_id=\${employee.employee_id}
  12. JDBC 객체 클래스에서 수퍼 클래스를 만듭니다.

    $ dpconf set-jdbc-object-class-prop payroll-view person super-class:extensibleObject

가상 액세스 제어 추가

LDAP 디렉토리에 대한 액세스 제어는 디렉토리 자체에 ACI를 정의하여 처리됩니다. 가상 데이터 보기를 통해 데이터 소스에 액세스할 경우 이러한 데이터 보기를 통해 표시되는 데이터에만 적용하도록 ACI를 정의해야 합니다.

디렉토리 프록시 서버를 통한 모든 액세스는 연결 처리기에서 제어됩니다. 연결 처리기에 대한 자세한 내용은 26 장, 클라이언트와 디렉토리 프록시 서버 간의 연결 을 참조하십시오.

Procedure익명 액세스를 허용하는 ACI 추가

  1. 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");)
  2. 연결 처리기에서 가상 ACI를 가리킵니다.

    $ dpconf set-connection-handler-prop anonymous aci-source:ldifonly-acis
  3. 연결 처리기를 활성화합니다.

    $ dpconf set-connection-handler-prop anonymous is-enabled:true