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

建立與配置 JDBC 資料檢視

JDBC 資料檢視讓您能將關聯式資料庫提供給 LDAP 用戶端應用程式存取。如需有關 JDBC 資料檢視運作方式的資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的「JDBC Data Views」

如需有關如何建立與配置 JDBC 資料檢視的資訊,請參閱下列程序。

Procedure建立 JDBC 資料檢視

無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。

  1. 為關聯式資料庫建立 JDBC 資料來源。


    $ dpconf create-jdbc-data-source -h host -p port -b db-name -B db-url -J driver-url \
     -S driver-class source-name
    

    目前,每個 JDBC 資料檢視只支援一個 JDBC 資料來源。亦即,您無法在 JDBC 資料來源之間進行負載平衡。若要存取多個 JDBC 資料來源,可以建立每個資料來源的資料檢視,再使用連結資料檢視連結所有檢視。

    建立 JDBC 資料來源時必須設定下列特性:

    db-name

    關聯式資料庫的名稱,例如 payrolldb

    db-url

    資料庫的 URL,格式為 jdbc: vendor:driver://dbhost: dbport

    db-url 不是完整的 JDBC 資料庫 URL,因為它不包含資料庫名稱。(資料庫名稱由 db-name 特性指定。)

    driver-class

    JDBC 驅動程式類別,例如 org.hsqldb.jdbcDriver

    driver-url

    JDBC 驅動程式的路徑,例如 file:/// path/to/hsqldb/lib/hsqldb.jar

  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
    

Procedure配置 JDBC 資料檢視

無法使用 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 ... ]

Procedure配置 JDBC 表格、屬性與物件類別

配置 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

    • 透過使用 UPPER 函數為每個 jdbc-attr 編製 LDAP 篩選可能會使用的索引。

  4. 為 LDAP 關聯式資料庫表格建立 JDBC 物件類別。


    % dpconf create-jdbc-object-class view-name objectclass primary-table \
      [secondary-table... ] DN-pattern
    

    建立 JDBC 物件類別本質上是指定將與這些表格相關聯的 LDAP 物件類別。JDBC 物件類別還指定主要表格與輔助表格 (如果存在)。

    在建立 JDBC 物件類別時,指定 DN 模式。DN 模式顯示項目 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 物件類別僅包含單一 (主要) 表格。由於沒有輔助表格,因此無須定義表格之間的關係。

如果物件類別包含多個表格,必須清楚地定義這些表格之間的關係。表格之間的關係一律定義於輔助表格上。輔助表格的下列特性可讓您定義這些關係:

以下範例說明如何根據前兩個特性的值定義篩選連結規則。這些範例假設物件類別具有一個主要表格與一個輔助表格。


範例 24–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}"

在此配置下,LDAP 作業的運作方式如下:



範例 24–2 is-single-row-table:truecontains-shared-entries:false

在本例中,主要與輔助表格之間的關係為 1->11<-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



範例 24–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}"


範例 24–4 is-single-row-table:falsecontains-shared-entries:true

目錄代理伺服器目前不支援此案例。