JDBC 資料檢視可讓 LDAP 用戶端應用程式得以存取關聯式資料庫。如需有關 JDBC 資料檢視運作方式的資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.1 Reference」中的「JDBC Data Views」。
如需有關如何建立與配置 JDBC 資料檢視的資訊,請參閱下列程序。
無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。
為關聯式資料庫建立 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 資料來源時必須設定下列特性:
關聯式資料庫的名稱,例如 payrolldb。
資料庫的 URL,格式為 jdbc: vendor:driver://dbhost: dbport。
db-url 不是完整的 JDBC 資料庫 URL,因為它不包含資料庫名稱。(資料庫名稱由 db-name 特性指定。)
若是 MySQL、DB2 和 Derby 資料庫,db-url 必須尾隨 /;若是 Oracle 資料庫,則必須尾隨 :。
JDBC 驅動程式類別,例如 org.hsqldb.jdbcDriver。
JDBC 驅動程式的路徑,例如 file:/// path/to/hsqldb/lib/hsqldb.jar。
driver-url 特性為多值特性。因此,driver-url 對 JDBC 驅動程式支援多重 JAR 檔案,以確保可對不同平台上之 JDBC 來源進行連線。
建立 JDBC 資料來源池。
$ dpconf create-jdbc-data-source-pool -h host -p port pool-name |
將 JDBC 資料來源附加至 JDBC 資料來源池。
$ dpconf attach-jdbc-data-source -h host -p port pool-name source-name |
建立 JDBC 資料檢視。
$ dpconf create-jdbc-data-view -h host -p port view-name pool-name suffix-DN |
(可選擇) 檢視 JDBC 資料檢視清單以檢查是否已成功建立資料檢視。
$ dpconf list-jdbc-data-views -h host -p port |
無法使用 DSCC 執行此作業。請依照此程序中的說明使用指令行。
檢視 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 |
變更步驟 1 中所列的一或多個特性。
$ dpconf set-jdbc-data-view-prop -h host -p port view-name property:value \ [property:value ... ] |
JDBC 物件類別。將一或多個 JDBC 表格對映至 LDAP 物件類別。
JDBC 表格。已針對每個關聯式資料庫表格進行定義。
JDBC 屬性。定義 JDBC 表格中指定欄的 LDAP 屬性。
為關聯式資料庫中的每個表格建立 JDBC 表格。
% dpconf create-jdbc-table jdbc-table-name db-table |
db-table 的名稱區分大小寫。請確保使用與關聯式資料庫中相同的大小寫,否則以該表格為目標的作業可能會失敗。
為各關聯式資料庫表格中的每一欄建立 JDBC 屬性。
% dpconf add-jdbc-attr table-name attr-name sql-column |
建立 JDBC 屬性會將表格欄對映至 LDAP 屬性。
(可選擇) 如果關聯式資料庫中的欄區分大小寫,請變更 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 篩選可能會使用的索引。
如果您的關聯式資料庫不區分大小寫,請搭配預設值 (亦即 cis) 使用 ldap-syntax。區分大小寫的資料庫不支援 ldap-syntax:ces。
為 LDAP 關聯式資料庫表格建立 JDBC 物件類別。
% dpconf create-jdbc-object-class view-name objectclass primary-table \ [secondary-table... ] DN-pattern |
建立 JDBC 物件類別本質上是指定將與這些表格相關聯的 LDAP 物件類別。JDBC 物件類別還指定主要表格與輔助表格 (如果存在)。
在建立 JDBC 物件類別時,指定 DN 模式。DN 模式顯示項目 DN 的建構方式。
如果存在輔助表格,請定義主要表格與輔助表格之間的連結規則。
% dpconf set-jdbc-table-prop secondary-table-name filter-join-rule:join-rule |
連結規則定義於輔助表格上,並確定輔助表格的資料如何連結至主要表格的資料。如何定義物件類別的主要與輔助表格之間的關係頗為重要。如需詳細資訊,請參閱定義 JDBC 表格之間的關係。
指定 JDBC 物件類別的超級類別。
% dpconf set-jdbc-object-class-prop view-name objectclass super-class:value |
超級類別表示 JDBC 物件類別從其繼承的 LDAP 物件類別。
JDBC 物件類別在最簡單的情況下僅包含單一 (主要) 表格。由於沒有輔助表格,因此無須定義表格之間的關係。
如果物件類別包含多個表格,必須清楚地定義這些表格之間的關係。表格之間的關係一律定義於輔助表格上。輔助表格的下列特性可讓您定義這些關係:
is-single-row-table 指定 LDAP 項目在表格中僅有一個相符列。
contains-shared-entries 指定主要表格中的多個列會使用輔助表格中的某列。
filter-join-rule 指出如何根據主要表格中的項目,從輔助表格中擷取項目。
以下範例說明如何根據前兩個特性的值定義篩選連結規則。這些範例假設物件類別具有一個主要表格與一個輔助表格。
這是這些特性的預設值。在本例中,主要與輔助表格之間的關係為 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 作業的運作方式如下:
增加員工項目。如果表格中的員工項目沒有經理,將新建一列。如果有經理,則使用現有的列。
取代項目中「manager」屬性的值。MANAGER.NAME 列的值遭變更。
刪除員工項目。由於共用經理項目,因此未刪除輔助表格中的該列。
刪除項目的「manager」屬性。刪除輔助表格中的該列,且將外來鍵 (EMPLOYEE.FK_MANAGER_ID) 設為 NULL。
在本例中,主要與輔助表格之間的關係為 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。
在本例中,主要與輔助表格之間的關係為 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}" |
目錄代理伺服器目前不支援此案例。