本節程序說明的虛擬配置範例,會連結 LDAP 目錄與 MySQL 資料庫。LDAP 目錄是主要的資料來源,包含大部分的使用者資訊。mySQL 資料庫包含關於使用者的其他資訊。下圖說明產生的配置。
您可以使用 install-path /ds6/ldif/Example.ldif 中提供的資料範例複寫本範例,或者以自己的資料替代資料範例。
此配置可分為三部分:
配置與測試 LDAP 資料檢視
配置與測試 JDBC 資料檢視
配置與測試連結資料檢視
為簡便起見,本節中的所有指令假設目錄代理伺服器在本機的 /local/dps 中執行。這些指令還假設已設定下列環境變數:
1389
pwd.txt,包含管理員密碼的檔案。
4389
cn=Directory Manager
本節中的作業假設下列資訊:
目錄伺服器實例在連接埠 4389 的 host1 執行。
目錄伺服器中的資料儲存在尾碼 dc=example,dc=com 下。若要複製此範例,請依序建立目錄伺服器實例與尾碼 dc=example,dc=com,然後匯入 install-path/ds6/ldif/Example.ldif 中的範例資料。
為目錄伺服器實例建立名為 myds1 的 LDAP 資料來源。
% dpconf create-ldap-data-source myds1 host1:4389 |
啟用資料來源,並允許該資料來源的寫入作業。
% dpconf set-ldap-data-source-prop myds1 is-enabled:true is-read-only:false |
建立名為 myds1-pool 的 LDAP 資料來源池。
% dpconf create-ldap-data-source-pool myds1-pool |
將 LDAP 資料來源附加至 LDAP 資料來源池。
% dpconf attach-ldap-data-source myds1-pool myds1 |
指定資料來源應從資料來源池接收 100% 的連結、增加、搜尋與修改作業。
% dpconf set-attached-ldap-data-source-prop myds1-pool myds1 add-weight:100 \ bind-weight:100 modify-weight:100 search-weight:100 |
建立資料來源池的 LDAP 資料檢視,名稱為 myds1–view,基底 DN 為 dc=example,dc=com。
% dpconf create-ldap-data-view myds1-view myds1-pool dc=example,dc=com |
以 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。
以 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 可讓使用者修改自己的密碼。
下列作業假設已安裝 mySQL 資料庫,此資料庫正在執行中並已填入資料,而且 mySQL 資料庫具有下列特性:
資料庫名稱:sample_sql
資料庫 URL:host2.example.com:3306/
JDBC 驅動程式 URL:file:/net/host2.example/local/mysql/lib/jdbc.jar
驅動程式類別:com.mysql.jdbc.Driver
資料庫使用者:root
資料庫密碼檔案:mysqlpwd.txt
下表說明資料庫中的表格及其複合欄位。您需要此資訊才能設定 JDBC 資料檢視。
mySQL 表格 |
欄位 |
---|---|
EMPLOYEE |
ID、SURNAME、PASSWORD、TITLE、COUNTRY_ID |
COUNTRY |
ID、NAME |
PHONE |
USER_ID、NUMBER |
為 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 |
指定 SQL 資料庫的使用者名稱與密碼檔案。
% dpconf set-jdbc-data-source-prop mysql1 db-pwd-file:sqlpwd.txt db-user:root |
重新啟動代理伺服器。
% dpadm restart /local/dps |
啟用資料來源,並允許該資料來源的寫入作業。
% dpconf set-jdbc-data-source-prop mysql1 is-enabled:true is-read-only:false |
建立名為 mysql1–pool 的 JDBC 資料來源池。
% dpconf create-jdbc-data-source-pool mysql1-pool |
將 JDBC 資料來源附加至資料來源池。
% dpconf attach-jdbc-data-source mysql1-pool mysql1 |
為資料來源池建立名為 myjdbc1–view 且基底 DN 為 o=sql 的 JDBC 資料檢視。
% dpconf create-jdbc-data-view mysql1-view mysql1-pool o=sql |
為 MySQL 資料庫中的每個表格建立 JDBC 表格。
% dpconf create-jdbc-table employee1 EMPLOYEE % dpconf create-jdbc-table country1 COUNTRY % dpconf create-jdbc-table phone1 PHONE |
SQL 資料庫中表格的名稱區分大小寫。請確保使用與 SQL 資料庫中相同的大小寫。
為各表格中的每一欄建立 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 room ROOM % dpconf add-jdbc-attr phone1 tel NUMBER % dpconf add-jdbc-attr country1 country NAME |
由於 phone1 user_id 與 country1 id 欄僅在 MySQL 資料庫環境中使用,因此無須為這兩欄建立 JDBC 屬性。這兩欄不具有對應的 LDAP 屬性。
為 LDAP person 物件類別建立 JDBC 物件類別。
在此步驟中,將 employee1 表格識別為主要表格,而將 country1 與 phone1 表格識別為輔助表格。JDBC 物件類別的建立作業也需要 DN。在此範例中,DN 從資料檢視的 uid 屬性與基底 DN 中建構。
% dpconf create-jdbc-object-class mysql1-view person employee1 country1 phone1 uid |
定義主要表格與輔助表格之間的連結規則。
連結規則定義於輔助表格上,並確定輔助表格的資料如何連結至主要表格的資料。
% 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}' |
指定 JDBC 物件類別的超級類別。
超級類別表示 JDBC 物件類別從其繼承屬性的 LDAP 物件類別。
% dpconf set-jdbc-object-class-prop mysql1-view person super-class:top |
您必須透過配置 ACI 以啟用資料檢視的寫入存取,才能測試 JDBC 資料檢視。依預設拒絕對非 LDAP 資料檢視的寫入存取。就本例目的而言,增加一個允許使用者修改其密碼的全域 ACI 即已足夠。
以代理伺服器管理員的身份將 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 |
建立連線處理程式處理與 o=sql 網域的連線。
% dpconf create-connection-handler mysql1-handler |
啟用連線處理程式,並將其配置為處理來自 o=sql 網域中使用者的所有連結。
% dpconf set-connection-handler-prop mysql1-handler is-enabled:true \ bind-dn-filters:"uid=.*,o=sql" |
將連線處理程式配置為使用先前增加的 ACI 池。
% dpconf set-connection-handler-prop mysql1-handler aci-source:mysql1 |
以 o=sql 下使用者的身份搜尋 JDBC 資料來源,來驗證是否可以讀取資料檢視。
% ldapsearch -p 1389 -D "uid=kvaughan,o=sql" -w mypwd -b o=sql "objectclass=*" |
您必須使用 o=sql 下使用者的憑證或匿名連結。
以 o=sql 下使用者的身份修改 userPassword 屬性,來驗證是否可以寫入資料檢視。
% ldapmodify -p 1389 -D "uid=kvaughan,o=sql" -w mypwd dn: uid=kvaughan,o=sql changetype: modify replace: userPassword userPassword: myNewpwd |
將 LDAP 資料檢視指定為主要資料檢視,而 JDBC 資料檢視為輔助資料檢視。
% dpconf create-join-data-view myjoin1-view myds1-view mysql1-view o=join |
在輔助資料檢視上定義連結規則。
下列連結規則指定輔助資料檢視項目的 uid 屬性應與主要資料檢視項目的 uid 屬性相符。
% dpconf set-jdbc-data-view-prop mysql1-view filter-join-rule:uid='${myds1-view.uid}' |
如果在連結資料檢視上設定篩選連結規則,則必須在輔助資料檢視上設定虛擬轉換規則,才能在連結資料檢視上增加項目。
dpconf add-virtual-transformation secondary-view-name \ write add-attr-value dn uid=\${uid} |
若未設定此規則,則不可能在連結資料檢視上增加項目。
定義可以透過連結資料檢視從主要資料檢視讀取及寫入主要資料檢視的一組屬性。
% 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 資料檢視,則可以讀取與寫入所有屬性。
定義可以透過連結資料檢視從輔助資料檢視讀取及寫入輔助資料檢視的一組屬性。
% dpconf set-jdbc-data-view-prop mysql1-view viewable-attr:dn viewable-attr:objectclass \ viewable-attr:sn viewable-attr:room viewable-attr:userpassword viewable-attr:jobtitle \ viewable-attr:country viewable-attr:tel % dpconf set-jdbc-data-view-prop mysql1-view writable-attr:dn writable-attr:objectclass \ writable-attr:sn writable-attr:room writable-attr:userpassword writable-attr:jobtitle \ writable-attr:country writable-attr:tel |
這些定義僅套用至連結檢視的環境中。依預設,如果直接存取 JDBC 資料檢視,則可以讀取與寫入所有屬性。
以代理伺服器管理員的身份增加全域 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 |
建立連線處理程式處理與 o=join 網域的連線。
% dpconf create-connection-handler myjoin1-handler |
啟用連線處理程式,並將其配置為處理來自 o=join 下使用者的所有連結。
% dpconf set-connection-handler-prop myjoin1-handler is-enabled:true \ bind-dn-filters:"uid=.*,ou=people,o=join" |
將連線處理程式配置為使用先前增加的 ACI 池。
% dpconf set-connection-handler-prop myjoin1-handler aci-source:myjoin1 |
此步驟將搜尋 Kirsten Vaughan 的項目,以查看是否同時從兩個連結檢視擷取資料。
% ldapsearch -p 1389 -b o=join "uid=kvaughan" |
請注意,傳回的項目包含 LDAP 資料檢視與 JDBC 資料檢視的屬性。
以 o=join 下使用者的身份修改 userPassword 屬性,來驗證是否可以寫入連結資料檢視。
% ldapmodify -p 1389 -D "uid=kvaughan,ou=people,o=join" -w myNewPassword dn: uid=kvaughan,ou=people,o=join changetype: modify replace: userPassword userPassword: myPassword |