1. 程式人生 > >OpenLDAP,Windows,MySQL之初搭建

OpenLDAP,Windows,MySQL之初搭建

安裝OpenLDAP for Windows,mysql,

另附無博文連結http://huangdekai1.blog.163.com/blog/static/3057141620126134262357/

注意:ODBC資料來源與作業系統有很大的關係,ODBC必須裝32位的,否則OpenLDAP啟動會報錯,Native ERROR。

在64位Windows系統中,預設“資料來源(ODBC)”是64位的,包括“控制面板-》管理工具-》資料來源 ”或在“執行”中直接執行“ODBCAD32”程式。如果客戶端是32位應用程式,仍然需要配置32位ODBC資料來源,這時需要執行“C:\Windows\SysWOW64\odbcad32.exe”來啟動“ODBC資料來源管理器”,新增32位的ODBC資料來源。


slapd.exe -d 1 -f ./slapd.conf

LDAPBROWSER


為工作原因,需要在windows作業系統下,搭建openldap+mysql工具平臺。曾經嘗試在網上搜索相關的文章,但是openldap與DBMS連線的內容非常少,在windows作業系統下配置和使用的資料更是少之又少。所以只好查閱了許多零碎的參考資料,摸索了幾天,終於折騰成功。在這裡把詳細的過程記錄下來,希望能幫助有需要的朋友。

一、準備工作:

1、 安裝好OpenLDAP:

        我使用的是openldap-2.2.29-db-4.3.29-openssl-0.9.8a-win32_Setup.exe,網上很多地方提供下載,在windows下如何安裝的文章也很多。

        先安裝配置好LDAP,確認能夠正常使用。

2、 安裝好MySQL:

        我使用的是5.1.35版本。應該5.0版本以上都沒問題。

3、 從openldap官網下載原始碼包,裡面有需要用到的測試資料和配置樣例。最好是與安裝你安裝的OpenLDAP版本一致。本文下載的是openldap-2.2.29.tgz。解壓縮至本地目錄。

二、部署:

現在開始正式部署。

1、 安裝MYSQL的ODBC驅動:下載驅動程式,安裝即可(本文使用的是MyODBC-3.51.11-2-win.exe)。

2、 建立資料庫:

1) 建立一個空資料庫;

2) 在下載的原始碼包中找到servers/slapd/back-sql/rdbms_depend/mysql目錄,在MYSQL客戶端依次執行該目錄下的個SQL指令碼檔案:

testdb_create.sql

testdb_data.sql

backsql_create.sql  //只有這個腳本里的內容是必須的,其他腳本里的都是測試資料。第一次配置時還是全部執行。

testdb_metadata.sql

3、 建立一個可操作以上資料庫的賬戶,並設定密碼。

4、 建立ODBC資料來源,連線到以上資料庫。(開始選單-->設定-->控制面板-->管理工具-->資料來源(ODBC),詳細的就不介紹了)。

5、 修改ldap安裝目錄下的slapd.conf檔案,將配置檔案中BDB配置相關的程式碼全部刪除掉(就是從“database bdb”語句到最後的內容),新增以下程式碼:

#######################################################################

# sql database definitions

#######################################################################

database sql

suffix "dc=example,dc=com"

rootdn "cn=root,dc=example,dc=com"

rootpw pwd

dbname ldap //資料來源名稱,不是資料庫名稱。

dbuser user  //資料庫使用者帳號

dbpasswd userpwd //資料庫使用者密碼

subtree_cond "ldap_entries.dn LIKE CONCAT(''%'',?)"

insentry_query "INSERT INTO ldap_entries (dn,oc_map_id,parent,keyval) VALUES (?,?,?,?)"

lastmod off

has_ldapinfo_dn_ru no

upper_func "upper"

strcast_func "CONCAT"

concat_pattern "?||?"

6、 我這樣配置之後,無法啟動windows下的openldap服務,但是能通過在命令列視窗輸入命令:"slapd –d 1"來啟動服務。問題出在哪裡還沒搞清楚,暫時先通過命令列來啟動服務吧。

7、 啟動服務後,在命令列視窗輸入以下命令,如果能看到測試資料的內容,則表示配置成功:

ldapsearch -LLL -s sub -b "dc=example,dc=com" "(objectClass=*)"

image

大功告成,說明OpenLDAP已經能夠讀取資料庫裡的測試資料。

理解一下資料庫端的原理。

先將資料庫中的測試資料清除掉:

1、刪除原資料庫中所有表格;

2、在下載的原始碼包中找到servers/slapd/back-sql/rdbms_depend/mysql目錄,執行指令碼backsql_create.sql 。

本文將通過一個例子講解資料庫結構。假設我們的LDAP服務端目錄結構如下:

image

圖一

首先給大家看一下,相應資料庫結構:

image

圖二

由圖二看出,資料庫中包括系統表格和自定義表格。系統表格是必須建立的表格,即backsql_create.sql腳本里的內容;自定義表格是根據實際的LDAP entry目錄結構建立的相應的物件(Object)表,表格欄位對應該物件的屬性(Attribute)。

下面開始講解怎樣初始化資料庫資料,使其能儲存圖一中的目錄結構。

注:如果更改了系統表格中的資料,需要重啟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

mail

sel_expr

name

name

code

name_en

name_cn

password

email

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

完成上面的操作後,目錄結構的初始化工作完成。

目錄結構為例:

image

圖一

一、新加一個entry的處理

新加一個entry有兩種處理方式,一種是直接操作資料庫,一種是通過LDAP客戶端是實現。

1.直接操作資料庫的方法:

每新增一個entry,都應該在兩個表格中新增資料:

1) 在相應自定義表格中增加一行,記錄物件的各屬性值。

2) 在ldap_entries中增加一行,記錄entry的相關屬性。

以圖一所示的結構為例,增加以下entry:

1) dc=wfi,dc=wfiqa,dc=com

2) ou=users,dc=wfi,dc=wfiqa,dc=com

3) uid=admin,ou=users,dc=wfi,dc=wfiqa,dc=com

4) uid=user1,ou=users,dc=wfi,dc=wfiqa,dc=com

下面詳細講解如何進行操作:

1) entry“dc=wfi,dc=wfiqa,dc=com”是Organization類的物件,因此在organization表格中新增以下內容:

Column

Row1

id

1

name

wfi

2) entry“ou=users,dc=wfi,dc=wfiqa,dc=com”是Organization Unit類的物件,因此在org_unit表格中新增以下內容:

Column

Row1

id

1

name

users

3) entry“uid=admin,ou=users,dc=wfi,dc=wfiqa,dc=com”和“uid=user1,ou=users,dc=wfi,dc=wfiqa,dc=com”是User類的物件,因此在users表格中新增以下內容:

Column

Row1

Row2

id

1

2

name_en

admin

user1

name_cn

管理員

使用者1

password

adminpwd

Pwd1

email

[email protected]

[email protected]

code

admincode

Code1

4) 在ldap_entries中加入entry資訊:

本表是核心表格,儲存所有entry的資訊。每個entry都是一個物件。

以下是表格各個欄位的詳細介紹:

Column

Desc.

id

entry唯一標識

dn

entry的dn

oc_map_id

所屬objectClass的唯一標識

parent

父節點entry的唯一標識

keyval

對應的自定義表格中,該物件的唯一標識。

把所有entry資訊新增到表格中:

Column

id

dn

oc_map_id

parent

keyval

Row1

1

dc=wfi,dc=wfiqa,dc=com

3

1

Row2

2

ou=users,dc=wfi,dc=wfiqa,dc=com

1

1

1

Row3

3

uid=admin, ou=users, dc=wfi, dc=wfiqa

2

2

1

Row4

4

uid=user1, ou=users, dc=wfi, dc=wfiqa

2

2

2

2. 通過LDAP客戶端實現增加entry:

使用LDAP客戶端實現增加entry的原理是:

在資料庫中儲存在自定義表格中增加一個Object以及修改一個Attribute的SQL語句,當通過客戶端增加entry時,LDAP會進行以下操作:

1) 根據該entry的objectClass屬性確定其物件類;

2) 找到相應的新增Object的SQL語句來執行,在自定義表格中新增一行記錄,並得到新增Object的ID;

3) 根據客戶端輸入的entry資訊以及上個步驟得到的ID,在ldap_entries表中插入一行記錄;

4) 執行修改Attribute的SQL語句,更新自定義表格中該Object的各個attribute。

2.1 增加Object的SQL語句:

增加Object的SQL語句儲存在ldap_oc_mappings表的add_proc欄位中,該SQL語句應能夠在對應的自定義表格中新增一行記錄,並且返回新增記錄的唯一標識(ID)。

可以先編寫一個儲存過程/函式,滿足上述功能。然後通過SQL語句呼叫儲存過程/函式。

本例中編寫了一個新增使用者的函式,內容如下:

DELIMITER $$

DROP FUNCTION IF EXISTS `ldap `.`create_user` $$

CREATE DEFINER=`root`@`%` FUNCTION `create_user`() RETURNS int(11)

BEGIN

//從使用者表中獲取當前ID值,+1作為新物件的ID值

SELECT MAX(id)+1 INTO @newId

FROM users;

//新增使用者記錄

INSERT INTO users

VALUES(@newId,null,null,null,null,null);

//返回使用者ID

return @newId;

END $$

DELIMITER ;

在ldap_oc_mappings表中“inetOrgPerson”類的add_proc欄位中,SQL語句內容如下:

SELECT create_user()

2.2. 修改attribute的SQL語句:

增加attribute的SQL語句儲存在ldap_attr_mappings表的add_proc欄位中,該SQL語句應能夠在對應的自定義表格修改相應屬性值。

可以先編寫一個儲存過程/函式,滿足上述功能。然後通過SQL語句呼叫儲存過程/函式。

例如,更新一個使用者的英文名稱,在ldap_attr_mappings表中sn屬性的add_proc中儲存以下SQL語句:

update users set name_cn=? where id=?

二、刪除一個entry的處理

刪除一個entry也有兩種處理方式,一種是直接操作資料庫,一種是通過LDAP客戶端是實現。

1. 通過資料庫刪除entry:

先刪除對應自定義表格中的物件記錄,然後刪除ldap_entries表中相應的entry記錄。3.1已經詳細描述了表結構,此處不再贅述。

注:如果要刪除的entry下面還有子entry,注意要先刪除下面的子entry。

2. 通過LDAP客戶端刪除entry:

使用LDAP客戶端實現刪除entry的原理是:

在資料庫中儲存在自定義表格中刪除一個Object的SQL語句,當通過客戶端刪除entry時,LDAP會進行以下操作:

1) 根據該entry的dn,在ldap_entries表中找到其物件類(oc_map_id),以及該物件的ID(keyval);

2) 找到相應的刪除Object的SQL語句來執行,在自定義表格中刪除相應的物件記錄;

3) 從ldap_entries表中刪除相應的entry記錄。

刪除一個Object的SQL語句儲存在ldap_oc_mappings表的delete_proc欄位中。詳細的內容可參考“2.通過LDAP客戶端實現增加entry”。

三、修改或刪除一個attribute的處理

其實刪除attribute的操作只不過是將attribute的值清空(修改為空字串),所以等同於修改attribute值。

1. 通過資料庫操作來修改attribute:

直接在對應的自定義表格中修改欄位值即可。

2. 通過LDAP客戶端來修改:

原理不再贅述。

將修改屬性值的SQL語句儲存到ldap_attr_mappings表的add_proc欄位中,將修改屬性值為空字串的SQL語句儲存到ldap_attr_mappings表的delete_proc欄位中。

可參考“2.2. 修改attribute的SQL語句”.。

四、本例中沒有提到的幾個系統表格:

在本次示例中,有幾個系統表格沒有使用到。

ldap_entry_objectclass

當一個entry對應多個object時,此表用來記錄對應關係。曾看到一個資料說,如果此表內容為空,某處的操作會出錯(具體是什麼操作給忘記了),所以建議往這張表裡插入至少一條記錄,無論正確與否。

Column

Desc.

entry_id

ldap_entries表中對應entry的ID

oc_name

objectclass name

2 ldap_referrals

... something to do with referrals?


相關推薦

OpenLDAP,Windows,MySQL搭建

安裝OpenLDAP for Windows,mysql, 另附無博文連結http://huangdekai1.blog.163.com/blog/static/3057141620126134262357/ 注意:ODBC資料來源與作業系統有很大的關係,ODBC必須裝32

Gitlab+Gerrit+Ldap+nginx+mysql Gerrit搭建與配置(一)

公司之前一直用gitlab來存放專案程式碼 ,目前因為業務需要(程式碼bug太多)需要引入gerrit來進行code review。 最初用的是centos 7.4,但是安裝完成後,GerritResource中沒有ALL_Project.git和All_Users.git生成,日誌中一直在報錯,反覆裝了幾

windows MySQL主從複製搭建

一、安裝Mysql 1.本地首先需要搭建一套mysql,可以使用整合環境。 2.需要單獨在搭建mysql,用來做主從複製 3.下載安裝太麻煩這裡可以直接複製phpStudy或者WAMP整合環境裡的MySQL 4.配置 mysql環境變數 (  修改PATH,新增 D:\My

Web開發學習路--Eclipse+Tomcat+mysql體驗

    學習了一段時間android,正好要用到android和伺服器之間的互動,既然要學習android,那麼就涉獵下伺服器端的開發了,以前學過php,用thinkphp很快可以搭建起來,但是android是java的,web用java來寫不是更好,主要實現聊天的話得需要

mysql mysql 5.6不停機主從搭建(一主一從基於GTID復制)

從庫 creat 不停機 event rep ply copy from end 環境說明:版本 version 5.6.25-log 主庫ip: 10.219.24.25從庫ip:10.219.24.22os 版本: centos 6.7已安裝熱備軟件:xtrabacku

mysql mysql 5.6不停機雙主一從搭建(活躍雙主一從基於日誌點復制)

stat 5.6 create 文件夾 eat ima send spec tar 環境說明:版本 version 5.6.25-log 主1庫ip: 10.219.24.25主2庫ip: 10.219.24.22從1庫ip:10.219.24.26os 版本: cento

LAMP、LNMP實戰搭建mysql(持續更新)

export 加密 base yum exe root with pat debug LAMP、LNMP實戰之四搭建mysql說明:服務器192.168.2.32 數據庫版本mysql5.5.32 cmake版本2.8.8yum install -y g

mysqlwindows忘記密碼

nbsp leg word -- roo host 服務 and grant 步驟: 1. 關閉mysql服務 2. mysqld --skip-grant-tables; 3. 新cmd,執行mysql 4. use mysql; 5. update mysql.use

MYSQL讀寫分離搭建方案

讀寫分離實現:360 Atlas(代理層實現,無需修改應用程式程式碼) 實現步驟 # 安裝 shell> rpm -i Atlas-2.2.1.el6.x86_64.rpm # 解除安裝 shell> rpm -e Atlas-2.2

《深入淺出MySQL:資料庫開發、優化與管理維護(2nd)》第31章MySQL非同步複製搭建學習筆記

MySQL的複製原理大致如下: (1)首先,MySQL主庫在事務提交時會把資料變更作為事件Events記錄在二進位制日誌檔案Binlog中;MySQL主庫上的sync_binlog引數控制Binlog日誌重新整理到磁碟。 (2)主庫推送二進位制日誌檔案Binlog中的事件到從庫的中繼日誌Re

MySQL高可用架構MHA搭建以及測試(二)

一、MHA特點 MHA監控複製架構的主伺服器,一旦檢測到主伺服器故障,就會自動進行故障轉移。 即使有些從伺服器沒有收到最新的relay log,MHA自動從最新的從伺服器上識別差異的relay log並把這些日誌應用到其他從伺服器上,因此所有的從伺服器保持一致性了。MHA通

伺服器配置 centos 搭建伺服器-----mysql配置

mysql 分享給大家:https://pan.baidu.com/s/1fYeFDJ3OOlW4Nd6siyrjbw 密碼:9of6   Mysql安裝 步驟: 檢視CentOS自帶的mysql 輸入 rpm -qa | grep mys

ReactNative開發實戰一環境搭建Windows下)

作為微信公眾號(Zjiaxin)的開山篇文章------我們將從環境搭建開始:(Windows環境下)1首先準備必要的軟體和工具:Python 2、Node、ReactNative、AndroidStudio、WebStorm、Git、Genymotion。Python2:h

Windows server 2012下搭建MySQL資料庫並建立遠端連線

開發的首要任務就是要搭建起自己的伺服器,下面主要是我這搭建記錄下 我的各種環境 伺服器為Windows server2012  安裝的MySQL資料的版本是5.6.10 ,64位。當然了版本對於安裝沒有太大的阻撓。安裝資料庫呢一般是由兩種:一種是下載安裝包自己安裝,而另外一

Windows開發——IIS的搭建

前言 Internet Information Server(簡稱IIS)是Windows系統提供的一種服務,它包括WWW伺服器、FTP伺服器和SMTP伺服器,是架設個人網站的首選。 Microsoft IIS 是允許在公共Intranet或Internet上釋出資訊的W

mysqlPXC5.7.18集群系列——1.Percona XtraDB Cluster搭建

1. 相關準備 備註:rhel不安裝epel,很多叢集搭建依賴的包無法通過yum安裝,很是不便 2. 叢集節點 Nodes Hostname IP HAProxy haproxy 172.16.3.30

php自學筆記windows開發環境的搭建

          眾所周知PHP整合開發環境有很多,如XAMPP、AppServ......只要一鍵安裝就把PHP環境給搭建好了。           但這種安裝方式不夠靈活,軟體的自由組合不方便

mysql mysql 5.6不停機主從搭建(一主一從基於日誌點複製)

環境說明: 版本 version 5.6.25-log  主庫ip: 10.219.24.25 從庫ip:10.219.24.22 os 版本: centos 6.7 已安裝熱備軟體:xtrabackup  防火牆已關 補充: 主從複製原理: http://blog.

C#+OpenGL程式設計環境搭建(windows)

  現在各種引擎紅紅火火,為什麼還要開影象基礎呢?現在的遊戲開發中遊戲引擎有什麼樣的地位,是不是不可缺少的。我覺得遊戲引擎或多或少的會對遊戲開發的靈活性有一些限制。不同公司使用的引擎應該是不一樣的,有沒有必要現在就確定去學習某一種遊戲引擎?  一般來說必須用的,涉及到遊戲製

Windows平臺安裝flutter體驗(安裝教程)

之前沒接觸過,挺說挺好用的,安裝來試試,but 每次都記不住步驟,索性記錄下來吧,安裝的過程真是不明覺厲 flutter:一款建立應用的開源庫、 1.安裝git       首先電腦上可以安裝git,可以方便從github網站下載安裝包,當然也可以從官網下載,但是國