如今咱們瞭解一下數據庫端的原理。mysql
若是已經按照上一篇文章:「Windows+OpenLDAP+MySQL配置及使用詳解(一)——基礎配置」配置成功,在瞭解本篇文章內容以前,咱們先將數據庫中的測試數據清除掉:sql
一、刪除原數據庫中全部表格;數據庫
二、在下載的源碼包中找到servers/slapd/back-sql/rdbms_depend/mysql目錄,執行腳本backsql_create.sql 。app
本文將經過一個例子講解數據庫結構。假設咱們的LDAP服務端目錄結構以下:測試
圖一ui
首先給你們看一下,相應數據庫結構:spa
圖二.net
由圖二看出,數據庫中包括系統表格和自定義表格。系統表格是必須創建的表格,即backsql_create.sql腳本里的內容;自定義表格是根據實際的LDAP entry目錄結構創建的相應的對象(Object)表,表格字段對應該對象的屬性(Attribute)。code
下面開始講解怎樣初始化數據庫數據,使其能存儲圖一中的目錄結構。server
注:若是更改了系統表格中的數據,須要重啓ldap服務才能生效。
1. 新增自定義表格:
自定義表格主要目的是爲了存儲同一類別的對象(object)數據,表格各個字段定義了對象類(objectClass)的屬性。objectClass、object、attribute的概念都來自LDAP,下面都直接用英文表示,你們會比較清晰一些。
本例中,有以下objectClass:
DN |
objectClass |
dc=wfi,dc=wfiqa,dc=com |
organization(組織) |
ou=users |
organizationalUnit(組織內單元,本例中只有users這一個單元) |
uid=admin uid=user1 |
inetOrgPerson(組織用戶) |
通常狀況下,每個objectClass,咱們爲其建立一個自定義表格,每一個字段對應該對象類的一個屬性。根據上表,咱們新建了organization,org_unit,users三個表,具體表結構參見圖一。
2 在系統表ldap_oc_mappings中加入objectClass信息:
此表格中主要存儲objectClass和對應的自定義表格的對應關係。
如下是表格各字段的詳細介紹:
Column |
Desc. |
id |
objectClass的惟一標識 |
name |
objectClass的名稱 |
keytbl |
對應的自定義表格名稱 |
keycol |
對應的自定義表格中關鍵字字段名稱 |
create_proc |
新增一個object時使用的SQL語句 |
delete_proc |
刪除一個object時使用的SQL語句 |
expect_return |
執行新增或刪除object的SQL語句,表明操做成果的SQL CODE值,一般是0。 |
下面是本例中,往本表添加的數據:
Column |
Row1 |
Row2 |
Row3 |
id |
1 |
2 |
3 |
Name |
organization |
organizationalUnit |
inetOrgPerson |
Keytbl |
organization |
org_unit |
users |
Keycol |
id |
id |
id |
create_proc |
(稍後再講) |
||
delete_proc |
(稍後再講) |
||
expect_return |
3 在系統表ldap_attr_mappings中加入attribute信息:
此表格實際上就是創建LDAP中各attribute和數據庫中objectClass的各個屬性的關係。
此表格中sel_expr,from_tbls,join_where三個字段主要存儲attribute如何經過SQL語句獲取。
例如:得到某個attribute的SQL語句爲:
SELECT CONCAT(a.column2,b.column2)
FROM a,b
WHERE a.column3=b.column1)
分別將SELECT,FROM,WHERE後面的語句存儲到這三個字段裏。
另外,param_order字段的含義目前還沒搞清楚,官網給出的例子裏,這個字段的值都是3,因此這裏也都填3.
如下是表格各個字段的詳細介紹:
Column |
Desc. |
id |
attribute惟一標識 |
oc_map_id |
所屬objectClass的惟一標識 |
name |
Attribute名稱 |
sel_expr |
SELECT後面的SQL語句 |
sel_expr_u |
不清楚用途,本例中沒有使用 |
from_tbls |
FROM後面的SQL語句 |
join_where |
WHERE後面的SQL語句 |
add_proc |
修改一個attribute值時使用的SQL語句 |
delete_proc |
刪除一個attribute值時使用的SQL語句 |
param_order |
不清楚含義,但官網給出的例子中,這個字段的值全是3,因此本例中也將值設爲3。 |
expect_return |
執行修改或刪除attribute值的SQL語句,表明操做成果的SQL CODE值,一般是0。 |
如下是本例中,往本表添加的數據:
Column |
Row1 |
Row2 |
Row3 |
Row4 |
Row5 |
Row6 |
Row7 |
id |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
oc_map_id |
1 |
2 |
3 |
3 |
3 |
3 |
3 |
name |
dc |
ou |
uid |
sn |
cn |
userPassword |
|
sel_expr |
name |
name |
code |
name_en |
name_cn |
password |
|
sel_expr_u |
|||||||
from_tbls |
organization |
org_unit |
users |
users |
users |
users |
users |
join_where |
|||||||
add_proc |
(稍後再講) |
||||||
delete_proc |
(稍後再講) |
||||||
param_order |
3 |
3 |
3 |
3 |
3 |
3 |
3 |
expect_return |
完成上面的操做後,目錄結構的初始化工做完成。