- DB2 教程
- 首页
- DB2 - 简介
- DB2 - 服务器安装
- DB2 - 实例
- DB2 - 数据库
- DB2 - 缓冲池
- DB2 - 表空间
- DB2 - 存储组
- DB2 - 模式
- DB2 - 数据类型
- DB2 - 表
- DB2 - 别名
- DB2 - 约束
- DB2 - 索引
- DB2 - 触发器
- DB2 - 序列
- DB2 - 视图
- DB2 与 XML
- DB2 - 备份和恢复
- DB2 - 数据库安全
- DB2 - 角色
- DB2 - LDAP
- DB2 有用资源
- DB2 - 问答
- DB2 - 快速指南
- DB2 - 有用资源
- DB2 - 讨论
DB2 - LDAP
介绍
LDAP 是轻量级目录访问协议。LDAP 是一种全局目录服务,行业标准协议,基于客户端-服务器模型,运行在 TCP/IP 协议栈之上。LDAP 提供了一种连接、访问、修改和搜索互联网目录的工具。
LDAP 服务器包含以目录树形式组织的信息。客户端请求服务器提供信息或对特定信息执行某些操作。服务器通过提供所需信息(如果存在)来响应客户端,或者将客户端引用到另一个服务器以对所需信息进行操作。然后,客户端从另一个服务器获取所需信息。
目录的树状结构在所有参与的服务器上保持一致。这是 LDAP 目录服务的突出特性。因此,无论客户端引用哪个服务器,客户端始终都能以无错误的方式获取所需信息。在这里,我们使用 LDAP 来认证 IBM DB2 作为操作系统认证的替代。
LDAP 有两种类型
- 透明的
- 插件
让我们看看如何配置透明的 LDAP。
配置透明 LDAP
要开始配置透明 LDAP,您需要配置 LDAP 服务器。
LDAP 服务器配置
创建一个 SLAPD.conf 文件,其中包含有关 LDAP 中用户和组对象的所有信息。当您安装 LDAP 服务器时,默认情况下它会在您的机器上配置基本的 LDAP 目录树。
下表显示了修改后的文件配置。
代码框中用黄色突出显示的文本表示以下内容
DBA 用户 ID = “db2my1”,组 = “db1my1adm”,密码 = “db2my1” 管理员用户 ID = “my1adm”,组 = “dbmy1ctl”。
# base dn: example.com dn: dc=example,dc=com dc: example o: example objectClass: organization objectClass: dcObject # pc box db dn: dc=db697,dc=example,dc=com dc: db697 o: db697 objectClass: organization objectClass: dcObject # # Group: dbadm # dn: cn=dbmy1adm,dc=db697,dc=example,dc=com cn: dbmy1adm objectClass: top objectClass: posixGroup gidNumber: 400 objectClass: groupOfNames member: uid=db2my1,cn=dbmy1adm,dc=db697,dc=example,dc=com memberUid: db2my1 # # User: db2 # dn: uid=db2my1,cn=dbmy1adm,dc=db697,dc=example,dc=com cn: db2my1 sn: db2my1 uid: db2my1 objectClass: top objectClass: inetOrgPerson objectClass: posixAccount uidNumber: 400 gidNumber: 400 loginShell: /bin/csh homeDirectory: /db2/db2my1 # # Group: db ctl # dn: cn=dbmy1ctl,dc=db697,dc=example,dc=com cn: dbmy1ctl objectClass: top objectClass: posixGroup gidNumber: 404 objectClass: groupOfNames member: uid=my1adm,cn=dbmy1adm,dc=db697,dc=example,dc=com memberUid: my1adm # # User: adm # dn: uid=my1adm,cn=dbmy1ctl,dc=db697,dc=example,dc=com cn: my1adm sn: my1adm uid: my1adm objectClass: top objectClass: inetOrgPerson objectClass: posixAccount uidNumber: 404 gidNumber: 404 loginShell: /bin/csh homeDirectory: /home/my1adm
将上述文件保存为“/var/lib/slapd.conf”,然后执行以下命令将这些值添加到 LDAP 服务器中。这是一个 Linux 命令;不是 db2 命令。
ldapadd r- -D ‘cn=Manager,dc=example,dc=com” –W –f /var/lib/slapd.conf
在 LDAP 服务器上注册 DB2 用户和 DB2 组后,登录到您已安装实例和数据库的特定用户。您需要配置 LDAP 客户端以确认客户端服务器所在的位置,无论是远程还是本地。
LDAP 客户端配置
LDAP 客户端配置保存在“ldap.conf”文件中。有两个文件可用于配置参数,一个是通用的,另一个是特定的。您应该在“/etc/ldap.conf”中找到第一个文件,第二个文件位于“/etc/openldap/ldap.conf”中。
以下数据在通用 LDAP 客户端配置文件中可用
# File: /etc/ldap.conf # The file contains lots of more entries and many of them # are comments. You show only the interesting values for now host localhost base dc=example,dc=com ldap_version 3 pam_password crypt pam_filter objectclass=posixAccount nss_map_attribute uniqueMember member nss_base_passwd dc=example,dc=com nss_base_shadow dc=example,dc=com nss_base_group dc=example,dc=com
您需要根据 DB2 配置更改服务器和域信息的位置。如果我们在同一系统中使用服务器,则在“host”中将其指定为“localhost”,在“base”中,您可以配置在 LDAP 服务器的“SLAPD.conf”文件中提到的内容。
可插拔身份验证模块 (PAM) 是用于身份验证服务的 API。这是 LDAP 身份验证与加密密码和类型为 posixAccount 的特殊 LDAP 对象的通用接口。此类型的所有 LDAP 对象都表示具有可移植操作系统接口 (POSIX) 属性的帐户的抽象。
网络安全服务 (NSS) 是一组库,用于支持安全启用客户端和服务器应用程序的跨平台开发。这包括 SSL、TLS、PKCS S/MIME 和其他安全标准等库。
您需要为该接口指定基本 DN 和两个附加映射属性。OpenLDAP 客户端配置文件包含以下条目
host localhost base dc=example,dc=com
到目前为止,您只是定义了 LDAP 服务器的主机和基本 DN。
验证 OpenLDAP 环境
配置完 LDAP 服务器和 LDAP 客户端后,验证两者之间的通信。
步骤 1:检查您的本地 LDAP 服务器是否正在运行。使用以下命令
ps -ef | grep -i ldap
此命令应列出表示您的 LDAP 服务器的 LDAP 守护程序
/usr/lib/openldap/slapd -h ldap:/// -u ldap -g ldap -o slp=on
这表示您的 LDAP 服务器正在运行并正在等待来自客户端的请求。如果之前命令没有此类进程,您可以使用“rcldap”命令启动 LDAP 服务器。
rcldap start
服务器启动后,您可以在“/var/log/messages/”文件中监视它,方法是执行以下命令。
tail –f /var/log/messages
使用 ldapsearch 测试与 LDAP 服务器的连接
ldapsearch 命令打开到 LDAP 服务器的连接,绑定到它并执行搜索查询,可以使用特殊参数“-x”通过使用 –x 参数而不是更复杂的机制(如简单身份验证和安全层 (SASL))来连接到您的 LDAP 服务器,使用简单的身份验证机制。
ldapsearch –x
LDAP 服务器应回复以下响应,其中包含 LDAP 数据交换格式 (LDIF) 中的所有 LDAP 条目。
# extended LDIF # # LDAPv3 # base <> with scope subtree # filter: (objectclass=*) # requesting: ALL # example.com dn: dc=example, dc=com dc: example o: example objectClass: organization objectClass: dcObject # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
配置 DB2
在使用 LDAP 服务器和客户端之后,您需要配置我们的 DB2 数据库以与 LDAP 一起使用。让我们讨论一下,如何安装和配置您的数据库以使用我们的 LDAP 环境进行 DB2 用户身份验证过程。
配置 DB2 和 LDAP 交互插件
IBM 提供了一个包含 LDAP 插件的免费 DB2 软件包。DB2 软件包包括以下每个的三个 DB2 安全插件
- 服务器端身份验证
- 客户端身份验证
- 组查找
根据您的需求,您可以使用这三个插件中的任何一个或全部。此插件不支持某些用户在 LDAP 中定义而其他用户在操作系统中定义的环境。如果您决定使用 LDAP 插件,则需要在 LDAP 服务器中定义与数据库关联的所有用户。相同的原则适用于组插件。
您必须决定哪些插件对我们的系统是强制性的。客户端身份验证插件用于用户 ID 和 CONNECT 或 ATTACH 语句中提供的密码验证发生在客户端系统上的场景中。因此,数据库管理器配置参数 SRVCON_AUTH 或 AUTHENTICATION 需要设置为 CLIENT 值。客户端身份验证难以保证安全,通常不建议使用。服务器插件通常建议使用,因为它执行用户 ID 和密码的服务器端验证,如果客户端执行 CONNECT 或 ATTACH 语句,这是安全的方式。服务器插件还提供了一种将 LDAP 用户 ID 映射到 DB2 授权 ID 的方法。
现在您可以开始安装和配置 DB2 安全插件,您需要考虑 DB2 所需的目录信息树。DB2 使用间接授权,这意味着用户属于一个组,并且该组被授予了较少的权限。您需要在 LDAP 目录中定义所有 DB2 用户和 DB2 组。
图片
LDIF 文件 openldap.ldif 应包含以下代码
# # LDAP root object # example.com # dn: dc=example, dc=com dc: example o: example objectClass: organization objectClass: dcObject # # db2 groups # dn: cn=dasadm1,dc=example,dc=com cn: dasadm1 objectClass: top objectClass: posixGroup gidNumber: 300 objectClass: groupOfNames member: uid=dasusr1,cn=dasadm1,dc=example,dc=com memberUid: dasusr1 dn: cn=db2grp1,dc=example,dc=com cn: db2grp1 objectClass: top objectClass: posixGroup gidNumber: 301 objectClass: groupOfNames member: uid=db2inst2,cn=db2grp1,dc=example,dc=com memberUid: db2inst2 dn: cn=db2fgrp1,dc=example,dc=com cn: db2fgrp1 objectClass: top objectClass: posixGroup gidNumber: 302 objectClass: groupOfNames member: uid=db2fenc1,cn=db2fgrp1,dc=example,dc=com memberUid: db2fenc1 # # db2 users # dn: uid=dasusr1, cn=dasadm1, dc=example,dc=com cn: dasusr1 sn: dasusr1 uid: dasusr1 objectClass: top objectClass: inetOrgPerson objectClass: posixAccount uidNumber: 300 gidNumber: 300 loginShell: /bin/bash homeDirectory: /home/dasusr1 dn: uid=db2inst2,cn=db2grp1,dc=example,dc=com cn: db2inst2 sn: db2inst2 uid: db2inst2 objectClass: top objectClass: inetOrgPerson objectClass: posixAccount uidNumber: 301 gidNumber: 301 loginShell: /bin/bash homeDirectory: /home/db2inst2 dn: uid=db2fenc1,cn=db2fgrp1,dc=example,dc=com cn: db2fenc1 sn: db2fenc1 uid: db2fenc1 objectClass: top objectClass: inetOrgPerson objectClass: posixAccount uidNumber: 303 gidNumber: 303 loginShell: /bin/bash homeDirectory: /home/db2fenc1
创建一个名为“db2.ldif”的文件并将上述示例粘贴到其中。使用此文件,将定义的结构添加到您的 LDAP 目录中。
要将 DB2 用户和 DB2 组添加到 LDAP 目录,您需要将用户绑定为“rootdn”到 LDAP 服务器以获得确切的权限。
执行以下语法以使用我们定义在 LDIF 文件“db2.ldif”中的所有对象填充 LDAP 信息目录
ldapadd –x –D “cn=Manager, dc=example,dc=com” –W –f <path>/db2.ldif
使用更多参数执行搜索结果
ldapsearch –x |more
准备用于 DB2 的文件系统
为我们的 LDAP 用户 db2inst2 创建实例。此用户需要一个主目录,其中包含两个空文件。在创建新实例之前,您需要创建一个将成为实例所有者的用户。
创建实例用户后,您应该在用户主目录中创建“ .profile”和“.login”文件,这些文件将由 DB2 修改。要在目录中创建此文件,请执行以下命令
mkdir /home/db2inst2 mkdir /home/db2inst2/.login mkdir /home/db2inst2/.profile
您已在 LDAP 目录中注册了所有与 DB2 相关的用户和组,现在您可以使用实例所有者 ID“db2inst2”创建名为“db2inst2”的实例,并使用用于运行用户定义函数 (UDF) 或存储过程的隔离用户 ID“db2fenc1”。
/opt/ibm/db2/V10.1/instance/db2icrt –u db2fenc1 db2inst2 DBI1070I Program db2icrt completed successfully.
现在检查实例主目录。您可以看到一个名为“sqllib”的新子目录以及为 DB2 使用而定制的“.profile”和“.login”文件。
配置用于 LDAP 支持的 DB2 身份验证公共插件
将所需的 LDAP 插件复制到相应的 DB2 目录
cp // /v10/IBMLDAPauthserver.so /home/db2inst2/sqllib/security /plugin/server/. cp / / /v10/IBMLDAPgroups.so /home/db2inst2/sqllib/security /plugin/group/.
将插件复制到指定目录后,您需要登录到 DB2 实例所有者并更改数据库管理器配置以使用这些插件。
Su – db2inst2 db2inst2> db2 update dbm cfg using svrcon_pw_plugin IBMLDAPauthserver db2inst2> db2 update dbm cfg using group_plugin IBMLDAPgroups db2inst2> db2 update dbm cfg using authentication SERVER_ENCRYPT db2inst2> db2stop db2inst2> db2start
此修改在您启动 DB2 实例后生效。重新启动实例后,您需要安装和配置名为“IBMLDAPSecurity.ini”的主要 DB2 LDAP 配置文件以使 DB2 插件与当前 LDAP 配置一起使用。
IBMLDAPSecurity.ini 文件包含
;----------------------------------------------------------- ; SERVER RELATED VALUES ;----------------------------------------------------------- ; Name of your LDAP server(s). ; This is a space separated list of LDAP server addresses, ; with an optional port number for each one: ; host1[:port] [host2:[port2] ... ] ; The default port number is 389, or 636 if SSL is enabled. LDAP_HOST = my.ldap.server ;----------------------------------------------------------- ; USER RELATED VALUES ;----------------------------------------------------------- rs ; LDAP object class used for use USER_OBJECTCLASS = posixAccount ; LDAP user attribute that represents the "userid" ; This attribute is combined with the USER_OBJECTCLASS and ; USER_BASEDN (if specified) to construct an LDAP search ; filter when a user issues a DB2 CONNECT statement with an ; unqualified userid. For example, using the default values ; in this configuration file, (db2 connect to MYDB user bob ; using bobpass) results in the following search filter: OrgPerson)(uid=bob) ; &(objectClass=inet USERID_ATTRIBUTE = uid representing the DB2 authorization ID ; LDAP user attribute, AUTHID_ATTRIBUTE = uid ;----------------------------------------------------------- ; GROUP RELATED VALUES ;----------------------------------------------------------- ps ; LDAP object class used for grou GROUP_OBJECTCLASS = groupOfNames at represents the name of the group ; LDAP group attribute th GROUPNAME_ATTRIBUTE = cn ; Determines the method used to find the group memberships ; for a user. Possible values are: ; SEARCH_BY_DN - Search for groups that list the user as ; a member. Membership is indicated by the ; group attribute defined as ; GROUP_LOOKUP_ATTRIBUTE. ; USER_ATTRIBUTE - A user's groups are listed as attributes ; of the user object itself. Search for the ; user attribute defined as TRIBUTE to get the groups. ; GROUP_LOOKUP_AT GROUP_LOOKUP_METHOD = SEARCH_BY_DN ; GROUP_LOOKUP_ATTRIBUTE ; Name of the attribute used to determine group membership, ; as described above. llGroups ; GROUP_LOOKUP_ATTRIBUTE = ibm-a GROUP_LOOKUP_ATTRIBUTE = member
现在在当前实例目录中找到文件 IBMLDAPSecurity.ini 文件。将上述示例内容复制到其中。
Cp //db2_ldap_pkg/IBMLDAPSecurity.ini /home/db2inst2/sqllib/cfg/
现在您需要重新启动 DB2 实例,使用以下两个语法
db2inst2> db2stop Db2inst2> db2start
此时,如果您尝试使用“db2start”命令,您将收到安全错误消息。因为,DB2 安全配置尚未针对您的 LDAP 环境正确配置。
自定义两个配置
保留在 slapd.conf 文件中配置的 LDAP_HOST 名称。
现在编辑 IMBLDAPSecurity.ini 文件并键入 LDAP_HOST 名称。这两个文件中 LDAP_HOST 名称必须相同。
文件内容如下所示
;----------------------------------------------------------- ; SERVER RELATED VALUES ;----------------------------------------------------------- LDAP_HOST = localhost ;----------------------------------------------------------- ; USER RELATED VALUES ---------------------------- ;------------------------------- USER_OBJECTCLASS = posixAccount USER_BASEDN = dc=example,dc=com USERID_ATTRIBUTE = uid AUTHID_ATTRIBUTE = uid ;----------------------------------------------------------- ; GROUP RELATED VALUES ;----------------------------------------------------------- GROUP_OBJECTCLASS = groupOfNames GROUP_BASEDN = dc=example,dc=com GROUPNAME_ATTRIBUTE = cn GROUP_LOOKUP_METHOD = SEARCH_BY_DN GROUP_LOOKUP_ATTRIBUTE = member
更改这些值后,LDAP 会立即生效,并且您的 DB2 环境与 LDAP 完美配合。
您可以注销并重新登录到“db2inst2”用户。
现在您的实例正在使用 LDAP 目录。