用OpenLdap建立网络数据库
目录一、 OpenLdap简介 1
二、 项目描述 1
三、 数据库结构图 2
四、 平台环境 2
1. 硬件 2
2. 软件 2
五、 数据库构建的过程 3
1. 安装OS和应用软件 3
2. 系统配置 3
3. 数据库配置 3
4. 数据导入 7
5. 检查LDAP上的操作和主从同步是否正确: 9
一、 OpenLdap简介
LDAP 的英文全称是Lightweight Directory Access Protocol(轻量级的目录访问协议),它基于X.500标准的,支持TCP/IP。简单地说,LDAP其实就是数据库三种模型中的层次型数据库,按照树型结构组织,由entry(条目)这种相当于关系型数据库中记录的数据结构组成。每个条目由多个属性-值对组成,其中DN(区别名)属性是标识这条记录的关键字,还由一个特殊的属性ObjectClass(对象类别)来实现的决定了该条目必须遵循的一些规则,规定了该条目必须和可选包含哪些属性。每个属性都可以有多个值。LDAP的数据类型不用申明默认都为字符型,除了个别还定义了一些如BIN(二进制数据)、CIS(忽略大小写)、CES(大小写敏感)、TEL(电话型)等。LDAP的一个很大的特点就是适合于大型OLTP的数据查询服务,但不适合需要经常改变数据的情况。
二、 项目描述
本项目目的在于提供用户购买会员卡进行网上信息查询,考虑到LDAP读快写慢的特点,而本项目的特点就在于不频繁地导入更新数据库,决定采用 Openldap构建用户信息验证数据库。该数据库有两个子树(相当于两个表),用户信息树和会员帐号树。由于会员卡是事先批量制作流入市场,与用户没有固定的对应关系,只有当用户购买会员卡并注册一个用户名后才能通过网络告知系统用户信息和会员卡号之间的这种关联关系。于是在后台数据库中用户信息树和会员帐号树之间就通过会员卡号作为关联关键字。
三、 数据库结构图
该数据库的构建更能体现逻辑和功能上的模块化。以域名info.net作为树根,有一个系统管理员admin(DN:cn=admin,dc=info,dc=net),该库中包括两大子树: people组(DN:ou=people,dc=info,dc=net),用于存放用户信息;Account组(DN:ou=Account,dc= info,dc=net),用于存放会员卡信息。
四、 平台环境
1. 硬件
SUN sparc主机(主从同步结构)
四层交换机(SLB负载均衡)
2. 软件
OS: solaris 8(sparc)
BerkeleyDB2.7.7(www.sleepycat.com)
Openldap1.2.11(www.openldap.org)
五、 数据库构建的过程
1. 安装OS和应用软件
安装Solaris8,BerkeleyDB2.7.7和Openldap1.2.11
Openldap1.2.11基于BerkeleyDB2.7.7之上
2. 系统配置
修改系统核心参数文件/etc/system:
加入文件句柄的软限制和硬限制:
* set hard limit on file descriptors
set rlim_fd_max = 4096
* set soft limit on file descriptors
set rlim_fd_cur = 1024
修改核心参数需要重启机器
3. 数据库配置
主LDAP服务器:
Slapd.conf
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /opt/openldap/etc/openldap/slapd.at.conf
include /opt/openldap/etc/openldap/slapd.oc.conf
include /opt/openldap/etc/openldap/slapd.info.oc.conf
include /opt/openldap/etc/openldap/slapd.account.oc.conf
schemacheck on
pidfile /opt/openldap/var/slapd.pid
argsfile /opt/openldap/var/slapd.args
loglevel 8
########################################
# ldbm database definitions
########################################
database ldbm
cachesize 3000000
dbcachesize 500000000
#dbcachenowsync
timelimit 30
suffix "dc=info, dc=net"
rootdn "cn=root, dc=info, dc=net"
rootpw root
# cleartext passwords, especially for the rootdn, should
# be avoid. See slapd.conf(5) for details.
replogfile /opt/openldap/log/slapd.replog
directory /opt/openldap/data
index id,card_id,email
index default none
replica host=n.n.n..n binddn="cn=root, dc=info, dc=net" bindmethod=易做图 credentials=root
defaultaccess none
access to dn=".*,dc=root,dc=net"
by self read
by dn="cn=Admin,dc=root,dc=net" write
by * none
access to *
by self read
by dn="cn=Admin,dc=root,dc=net" write
by * none
该配置指定了两个自定义schema:slapd.info.oc.conf slapd..account.oc.conf,同步的辅助服务器和一些ACL用于安全限制
辅LDAP服务器:
#
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
#
include /opt/openldap/etc/openldap/slapd.at.conf
include /opt/openldap/etc/openldap/slapd.oc.conf
include /opt/openldap/etc/openldap/slapd.info.oc.conf
include /opt/openldap/etc/openldap/slapd.account.oc.conf
schemacheck on
pidfile /opt/openldap/var/slapd.pid
argsfile /opt/openldap/var/slapd.args
loglevel 8
########################################
# ldbm database definitions
########################################
database ldbm
#cachesize 4000000
#dbcachesize 500000000
#dbcachenowsync
timelimit 30
suffix "dc=info, dc=net"
rootdn "cn=root, dc=info, dc=net"
rootpw root
# cleartext passwords, especially for the rootdn, should
# be avoid. See slapd.conf(5) for details.
replogfile /opt/openldap/log/slapd.replog
directory /opt/openldap/data
index id,card_id,email
index default none
updatedn "cn=root,dc=info,dc=net"
defaultaccess none
access to dn=".*,dc=info,dc=net"
by self read
by dn="cn=Admin,dc=info,dc=net" write
by * none
access to *
by self read
by dn="cn=Admin,dc=info,dc=net" write
by * none
该配置指定了主LDAP同步过来修改本机信息的权限
增加slapd.info.oc.conf:(用户信息的配置文件)
objectclass InfoPerson
requires
objectClass,
id
allows
username,
pass,
uid,
addr,
shenfenno,
tel,
card_id
指定id字段是比不可少的,其他都为可选
增加slapd.account.oc.conf:(账号信息配置文件)
objectclass AccountPerson
requires
objectClass,
card_id
allows
card_pass
指定了卡号和卡密码
重新启动LDAP SERVER:
这里主LDAP服务器的启动脚本如下
/etc/rc2.d/S94slapd
#!/bin/sh
#
#ident LDAP Service
case "$1" in
'start')
if [ -f /opt/openldap/etc/openldap/slapd.conf -a -f /opt/openldap/libexec/slapd ]; then
echo "LDAP service starting."
/opt/openldap/libexec/slapd -f /opt/openldap/etc/openldap/slapd.conf 1>/dev/console 2>&1 &
fi
if [ -f /opt/openldap/etc/openldap/slapd.conf -a -f /opt/openldap/libexec/slurpd ]; then
echo "LDAP sync service starting."
/opt/openldap/libexec/slurpd -f /opt/openldap/etc/openldap/slapd.conf -t /opt/openldap/log >/tmp/slurpd.log 2>&1 &