此配置以 Example.com 機構為例,說明虛擬目錄的部分功能可以滿足其特定的目錄服務需求。
Example.com 將機構資料儲存在多個不同的資料來源中。為了支援舊版,使用者資料分佈在 LDAP 目錄、平面 LDIF 檔案與 SQL 資料庫中。人力資源部門將使用者資料儲存在基底 DN 為 o=example.com 的 LDAP 目錄中。薪資部門將資料儲存在 SQL 資料庫中。管理部門將部門與大樓編號等管理資料儲存在基底 DN 為 dc=example,dc=com 的 LDIF 檔案中。
此外,Example.com 已買入名為 Company22 的公司。Company22 也將其使用者資料儲存在基底 DN 為 dc=company22,dc=com 的 LDAP 目錄中。
下圖提供如何儲存 Example.com 使用者資料的高階檢視。
Example.com 具有數個必須能夠存取儲存在不同資料來源中的資料的 LDAP 用戶端應用程式。這些用戶端應用程式的需求不盡相同。因此需要不同的資料檢視。在某些情況下,用戶端必須彙總資料。此外,某些用戶端應用程式必須能夠存取 Company22 的使用者資料,以便能夠同時管理 Example.com 的新舊員工。
下圖提供 Example.com 用戶端應用程式需求的高階檢視。
以下幾節引導您充分配置目錄代理伺服器資料檢視,以滿足本範例方案中所述之用戶端應用程式需求。如需有關資料檢視如何運作的資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的第 22 章「Directory Proxy Server LDAP Data Views」與「Sun Java System Directory Server Enterprise Edition 6.0 Reference」中的第 23 章「Virtual Data Views」。
範例方案的配置分為下列幾節:
人力資源部門儲存員工姓名、工作開始資料與工作職級等資訊。管理部門儲存其他資料,例如大樓代碼與辦公室編號。處理人力資源部門資料的用戶端應用程式必須能夠存取合併自這兩個來源的資料。這兩個資料來源具有存在於每個項目中的共用屬性 employeeNumber。
下圖說明用戶端應用程式的需求。
若要滿足此應用程式需求,必須為薪資部門的目錄與管理部門的 LDIF 檔案建立資料檢視。然後,連結這兩個資料檢視以提供對彙總資料的存取。此共用屬性可讓目錄代理伺服器彙總每個使用者的資料。
為簡便起見,本節中所用的指令假設下列資訊:
目錄代理伺服器實例在本機上執行,並具有預設 LDAP 連接埠 (389)。
目錄代理伺服器實例位於 /local/myDPS。
已將包含代理伺服器管理員密碼之檔案的路徑設定為變數 LDAP_ADMIN_PWF。如需有關設定目錄代理伺服器環境變數的詳細資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Installation Guide」中的「Environment Variables」。
薪資部門的 LDAP 目錄在連接埠 2389 上名為 payrollHost 的主機上執行。
用以儲存管理部門資料的 LDIF 檔案名為 example.ldif。
若要取得每個指令的完整語法,請執行不含任何選項的指令。例如:
$ dpconf create-ldap-data-view Operands are missing Usage: dpcfg create-ldap-data-view VIEW_NAME POOL_NAME SUFFIX_DN
為薪資部門目錄建立 LDAP 資料來源。
$ dpconf create-ldap-data-source payroll-directory payrollHost:2389
為薪資部門目錄建立 LDAP 資料來源池。
$ dpconf create-ldap-data-source-pool payroll-pool
將薪資部門資料來源附加至資料來源池。
$ dpconf attach-ldap-data-source payroll-pool payroll-directory
建立薪資部門目錄的 LDAP 資料檢視。
$ dpconf create-ldap-data-view payroll-view payroll-pool o=example.com
啟用 LDAP 資料檢視以將用戶端請求路由至此資料檢視。
$ dpconf set-ldap-data-view-prop payroll-view is-enabled:true
重新啟動目錄代理伺服器以使變更生效。
$ dpadm restart /local/myDPS
建立管理部門資料的 LDIF 資料檢視。
$ dpconf create-ldif-data-view admin-view example.ldif dc=example,dc=com
啟用管理部門資料的 LDIF 資料檢視。
$ dpconf set-ldif-data-view-prop admin-view is-enabled:true
指定管理部門檢視包含薪資部門檢視中多個項目所使用的項目。
$ dpconf set-ldif-data-view-prop admin-view contains-shared-entries:true
當此特性設為 TRUE 時,刪除薪資部門資料檢視中的某項目,不會導致刪除管理部門資料檢視中的共用項目。如果某項目不存在,將該項目增加至薪資部門資料檢視僅會將其增加至輔助資料檢視。
重新啟動目錄代理伺服器以使變更生效。
$ dpadm restart /local/myDPS
建立管理部門資料檢視的篩選連結規則,以指定彙總資料的方式。
下列連結規則指定應根據使用者項目的 employeeNumber 屬性連結資料。
$ dpconf set-ldif-data-view-prop admin-view filter-join-rule:'employeeNumber=\${payroll-view.employeeNumber}'
建立彙總這兩個資料檢視的連結資料檢視。
對於此連結資料檢視,該機構使用尾碼 DN dc=example,dc=com。
$ dpconf create-join-data-view example-join-view payroll-view admin-view dc=example,dc=com
Company22 的使用者資料儲存在 DN dc=company22,dc=com 下。雖然 Example.com 希望在大多數情況下能夠單獨儲存此使用者資料,但卻只有一個用戶端應用程式同時管理 Company 22 員工與其他 Example.com 員工。此用戶端應用程式要求 Company22 的使用者資料必須類似於 Example.com 的資料。
下圖說明用戶端應用程式的需求。
若要滿足此應用程式需求,必須為 Company22 的目錄建立虛擬 DN 為 dc=example,dc=com 的資料檢視。
為簡便起見,本節中所用的指令假設下列資訊:
目錄代理伺服器實例在本機上執行,並具有預設 LDAP 連接埠 (389)。
目錄代理伺服器實例位於 /local/myDPS。
已將包含代理伺服器管理員密碼之檔案的路徑設定為變數 LDAP_ADMIN_PWF。如需有關設定目錄代理伺服器環境變數的詳細資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Installation Guide」中的「Environment Variables」。
Company 22 的 LDAP 目錄在連接埠 2389 上名為 company22Host 的主機上執行。
為 Company 22 的目錄建立 LDAP 資料來源。
$ dpconf create-ldap-data-source company22-directory company22Host:2389
為 Company 22 的目錄建立 LDAP 資料來源池。
$ dpconf create-ldap-data-source-pool company22-pool
將 Company 22 的資料來源附加至資料來源池。
$ dpconf attach-ldap-data-source company22-pool company22-directory
為 Company 22 的目錄建立虛擬 DN 為 dc=example,dc=com 的 LDAP 資料檢視。
$ dpconf create-ldap-data-view company22-view company22-pool dc=example,dc=com
指示目錄代理伺服器將此虛擬 DN 對映至 Company 22 目錄中的實際 DN。
$ dpconf set-ldap-data-view-prop company22-view dn-mapping-source-base-dn:dc=company22,dc=com
啟用 Company 22 目錄的 LDAP 資料檢視,以將用戶端請求路由至此資料檢視。
$ dpconf set-ldap-data-view-prop company22-view is-enabled:true
重新啟動目錄代理伺服器以使變更生效。
$ dpadm restart /local/myDPS
人力資源部門需要 Example.com 與新買入的 Company 22 人力資源部門資料的彙總檢視。下圖說明人力資源部門全域應用程式的需求。
建立 Company 22 資料檢視的篩選連結規則,以指定彙總資料的方式。
下列連結規則指定應根據使用者項目的 employeeNumber 屬性連結資料。
$ dpconf set-ldif-data-view-prop company22-view filter-join-rule:'employeeNumber=\${example-join-view.employeeNumber}'
建立彙總 Company 22 的資料檢視與 Example.com 連結資料檢視的連結資料檢視。
$ dpconf create-join-data-view global-join-view example-join-view company22-view dc=example,dc=com
Example.com 的薪資部門將薪水資料儲存在 SQL 資料庫中。該資料庫有兩個表格,分別為 employee 表格與 salary 表格。Example.com 具有要求能夠存取那些資料的 LDAP 用戶端應用程式。用戶端應用程式要求 SQL 資料必須類似於 LDAP 資料。
下圖說明用戶端應用程式的需求。
若要滿足此應用程式需求,必須建立 JDBC 資料檢視將 SQL 表格中的欄對映至 LDAP 屬性。
為簡便起見,本節中所用的指令假設下列資訊:
目錄代理伺服器實例在本機上執行,並具有預設 LDAP 連接埠 (389)。
目錄代理伺服器實例位於 /local/myDPS。
已將包含代理伺服器管理員密碼之檔案的路徑設定為變數 LDAP_ADMIN_PWF。如需有關設定目錄代理伺服器環境變數的詳細資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.0 Installation Guide」中的「Environment Variables」。
SQL 資料庫已啟動且正在執行。
已將 JAVA_HOME 變數設定為正確的 Java 路徑。
SQL 資料庫的密碼為 myPassword。
為薪資部門資料庫建立 JDBC 資料來源。
$ dpconf create-jdbc-data-source payroll-src myPassword
以 SQL 資料庫的特性配置 JDBC 資料來源。
$ dpconf set-jdbc-data-source-prop payroll-src db-user:proxy db-pwd:myPassword db-url:jdbc:payrollsqldb:payrollsql://localhost driver-url:file://payrollsqldb.jar driver-class:org.payrollsqldb.jdbcDriver
啟用 JDBC 資料來源。
$ dpconf set-jdbc-data-source-prop payroll-src is-enabled:true
為薪資部門資料庫建立 JDBC 資料來源池。
$ dpconf create-jdbc-data-source-pool payroll-pool
將薪資部門資料來源附加至資料來源池。
$ dpconf attach-jdbc-data-source payroll-pool payroll-src
為薪資部門資料庫建立虛擬 DN 為 o=payroll 的 JDBC 資料檢視。
$ dpconf create-jdbc-data-view payroll-view payroll-pool o=payroll
為 SQL 資料庫中的每個表格建立 JDBC 表格。
$ dpconf create-jdbc-table jdbc-employee employee $ dpconf create-jdbc-table jdbc-salary salary
為 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
指定可以透過 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
建立對映至 LDAP 物件類別的 JDBC 物件類別。
下列指令建立對映至 LDAP person 物件類別的物件類別。該物件類別指定員工表格應作為主要表格使用,而薪資表格應用做輔助表格。eid 屬性應用來建構 DN。
$ dpcfg create-jdbc-object-class payroll-view \ person jdbc-employee jdbc-salary eid
在輔助表格上建立篩選連結規則,以指定輔助表格的資料如何連結至主要表格的資料。
下列連結規則指定應根據 employee_id 屬性連結資料。
$ dpconf set-jdbc-table-prop jdbc-salary filter-join-rule:'employee_id=\${employee.employee_id}'
建立 JDBC 物件類別的超級類別。
$ set-jdbc-object-class-prop payroll-view person super-class:extensibleObject
透過在 LDAP 目錄中定義 ACI 可處理該目錄的存取控制。透過虛擬資料檢視存取資料來源時,必須定義 ACI 僅會套用至透過這些資料檢視進行檢視的資料。
連線處理程式控制透過目錄代理伺服器的所有存取。如需有關連線處理程式的資訊,請參閱第 25 章, 目錄代理伺服器連線處理程式。
增加 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");)
將連線處理程式指向虛擬 ACI。
$ dpconf set-connection-handler-prop anonymous aci-source:ldifonly-acis
啟用連線處理程式。
$ dpconf set-connection-handler-prop anonymous is-enabled:true