首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

以 MySQL 作為 OpenLDAP 後端儲存完整部署指南

     編輯:MySQL 資料庫相關知識

OpenLDAP 預設使用 BerkeleyDB 儲存,若需整合既有關聯式資料庫、支援第三方應用直接管理目錄物件,可採用 back-sql 模組搭配 MySQL + ODBC 橋接。本文基於 FreeBSD Ports 環境,詳細記錄從元件安裝、ODBC 設定、Schema 匯入到 slapd 配置的完整流程。

架構總覽

OpenLDAP (slapd) -- back-sql --> libiodbc --> MyODBC --> MySQL Server
                     (SQL backend)    (ODBC Driver Manager)  (MySQL ODBC Driver)

1. 安裝必要 Ports 套件

# MySQL 伺服器與客戶端
cd /usr/ports/databases/mysql56-server && make install clean
cd /usr/ports/databases/mysql56-client && make install clean

# ODBC 驅動管理器與 MySQL ODBC 驅動
cd /usr/ports/databases/libiodbc && make install clean
cd /usr/ports/databases/mysql-connector-odbc && make install clean

# OpenLDAP 啟用 ODBC 支援
cd /usr/ports/net/openldap24-server
make WITH_ODBC=YES install clean

2. MySQL 建立 LDAP 資料庫與帳號

mysqladmin -u root -p create ldap
mysql -u root -p -e "
GRANT ALL PRIVILEGES ON ldap.* TO 'ldap'@'localhost' IDENTIFIED BY 'ldap_password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
"

3. 配置 libiodbc (ODBC Driver Manager)

/usr/local/etc/libiodbc/odbcinst.ini

[ODBC Drivers]
MySQL = Installed

[MySQL]
Description = ODBC for MySQL
Driver = /usr/local/lib/libmyodbc5w.so  # 或 libmyodbc5a.so (ANSI)
Setup = /usr/local/lib/libmyodbc5w.so
FileUsage = 1

/usr/local/etc/libiodbc/odbc.ini

[ODBC Data Sources]
ldap = MySQL LDAP DSN

[ldap]
Driver = /usr/local/lib/libmyodbc5w.so
Description = OpenLDAP Database
Server = localhost
Port = 3306
Database = ldap
User = ldap
Password = ldap_password
Socket = /tmp/mysql.sock
Option = 3
ReadOnly = No

4. 測試 ODBC 連線

# 安裝測試工具 (若未自動安裝)
cd /usr/ports/databases/libiodbc/work/libiodbc-*/samples && make install

# 測試
iodbctest
# 輸入 DSN=ldap 應成功列出資料表

5. 匯入 OpenLDAP back-sql Schema

# 找到 Ports 建置目錄下的 Schema 檔案
cd /usr/ports/net/openldap24-server/work/openldap-*/servers/slapd/back-sql/rdbms_depend/mysql

# 複製 slapd.conf 範本
cp slapd.conf /usr/local/etc/openldap/

# 匯入建表腳本
mysql -u ldap -p ldap < backsql_create.sql
mysql -u ldap -p ldap < testdb_create.sql
# 選擇性匯入測試資料
mysql -u ldap -p ldap < testdb_data.sql
mysql -u ldap -p ldap < testdb_metadata.sql

6. 修改 slapd.conf 關鍵段落

# 載入 back-sql 模組
moduleload back_sql.la

# 資料庫定義區段
database sql
suffix "o=myorg,c=US"
rootdn "cn=admin,o=myorg,c=US"
rootpw {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

# ODBC 連線設定
dbname ldap
dbuser ldap
dbpasswd ldap_password
subtree_cond "ldap_entries.dn LIKE CONCAT('%',?)"
insentry_query "INSERT INTO ldap_entries (dn,oc_map_id,parent,keyval) VALUES (?,?,?,?)"
# 其他 mapping 查詢保持預設或依 schema 調整

# 註解掉其他範例資料庫 (bdb, hdb, mdb 等)

7. 系統服務啟動配置

/etc/rc.conf

slapd_enable="YES"
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"'
slapd_sockets="/var/run/openldap/ldapi"

/etc/rc.d/slapd 啟動腳本中加入 ODBC 環境變數:

export ODBCINI=/usr/local/etc/libiodbc/odbc.ini

8. 啟動與驗證

# 偵錯模式啟動觀察
/usr/local/libexec/slapd -d 1
# 關鍵成功訊息:
# backsql_db_open(): test succeeded, schema map loaded
# slapd starting

# 正式啟動
service slapd start

# 驗證監聽埠
sockstat | grep slapd
# ldap slapd 12345 9 tcp4 *:389 *:*

# 使用 ldapsearch 測試
ldapsearch -x -H ldap://localhost -b "o=myorg,c=US" -D "cn=admin,o=myorg,c=US" -W

遷移與維護建議

  • 現有 LDIF 資料可用 slapadd 匯入 back-sql(需對應 mapping 表)。
  • 定期備份 MySQL ldap 資料庫,比 BerkeleyDB 更易備份、複寫、稽核。
  • 效能調優:為 mapping 表關鍵欄位(ldap_entries.dn, ldap_attr_mappings.oc_name)建立索引。
  • 高可用:搭配 MySQL 主從複寫 + OpenLDAP 多 Master (MirrorMode) 或 Proxy (ldap-proxy)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved