OpenLDAP,Windows,MySQL之初搭建
来源:互联网 发布:上海家博会数据 编辑:程序博客网 时间:2024/05/20 13:40
安装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=*)"
大功告成,说明OpenLDAP已经能够读取数据库里的测试数据。
理解一下数据库端的原理。
先将数据库中的测试数据清除掉:
1、删除原数据库中所有表格;
2、在下载的源码包中找到servers/slapd/back-sql/rdbms_depend/mysql目录,执行脚本backsql_create.sql 。
本文将通过一个例子讲解数据库结构。假设我们的LDAP服务端目录结构如下:
图一
首先给大家看一下,相应数据库结构:
图二
由图二看出,数据库中包括系统表格和自定义表格。系统表格是必须建立的表格,即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
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
完成上面的操作后,目录结构的初始化工作完成。
目录结构为例:
图一
一、新加一个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
administrator@test.com
User1@test.com
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之初搭建
- Windows搭建OpenLDAP
- openldap搭建(mysql)
- openldap 搭建
- Windows配置OpenLDAP(Configure OpenLDAP on Windows)
- Ubuntu OpenLDAP Server搭建
- Openldap for windows
- OpenLDAP for Windows 配置
- openldap之schema详解
- 使用OpenLDAP搭建Postfix邮件系统。
- 服务器环境搭建之Windows-Apache-Mysql-PHP-PhpMyAdmin
- Windows Server 2012 配置指南 之 MySQL环境搭建篇
- Windows+OpenLDAP+MySQL配置及使用详解(一)——基础配置
- Windows+OpenLDAP+MySQL配置及使用详解(二)——数据库初始化
- Windows+OpenLDAP+MySQL配置及使用详解(三)——LDAP数据的维护
- 在windows上配置openldap
- 在windows下配置OpenLdap
- windows下OpenLDAP的安装
- Linux系统 阻塞socket遇到网络故障
- TCP Nagle's 算法导致的性能问题
- MySQL 5.6 GTID复制 乱序复制
- MySQL xa 事务局限性
- MySQL最大连接数限制分析
- OpenLDAP,Windows,MySQL之初搭建
- 转载: mysql在linux中的通用…
- RandomQueryGenerator 介绍
- expect 使用笔记
- Infinidb 使用笔记1
- glusterfs 快速安装配置
- 网络丢包问题处理
- Linux glibc 的 ma…
- 配置 KVM 的桥接