DB2 - LDAP
DB2 - 与 LDAP 集成实现集中式认证
Section titled “DB2 - 与 LDAP 集成实现集中式认证”集中式认证简介
Section titled “集中式认证简介”在现代 IT 环境中,在每台服务器上单独管理用户帐户(基于操作系统的认证)既低效又不安全。集中式用户目录服务通过为用户身份提供单一可信来源来解决此问题。轻量级目录访问协议(LDAP)是与这些目录服务(如 OpenLDAP 或 Microsoft Active Directory)交互的行业标准。
通过将 Db2 与 LDAP 服务器集成,您可以将用户认证和组查找委托给您的集中式目录。这简化了用户管理,通过强制执行一致的密码策略来增强安全性,并简化了访问控制。本教程将指导您配置 Db2 以使用 LDAP 目录进行认证。
Db2 通过安全插件模型支持 LDAP 集成。我们将重点介绍最常见且安全的方案:透明的服务器端认证。
前提条件:准备您的 LDAP 目录
Section titled “前提条件:准备您的 LDAP 目录”在配置 Db2 之前,您必须确保您的 LDAP 目录结构支持 Db2。Db2 需要查找用户和组对象。尽管具体的模式(schema)可能有所不同,但核心要求是一致的。
所需的 LDAP 对象
Section titled “所需的 LDAP 对象”您将需要为您的 Db2 用户和组创建条目。通常,这些条目使用标准的 objectClass,例如用户使用 posixAccount,组使用 posixGroup 或 groupOfNames。下面是一个 LDAP 数据交换格式(LDIF)示例,展示了用户 db2inst1 和组 db2adms。
## 用户 'db2inst1' 的条目dn: uid=db2inst1,ou=users,dc=example,dc=comobjectClass: topobjectClass: inetOrgPersonobjectClass: posixAccountuid: db2inst1sn: db2inst1cn: Db2 Instance OneuidNumber: 1001gidNumber: 1001homeDirectory: /home/db2inst1
## 组 'db2adms' 的条目dn: cn=db2adms,ou=groups,dc=example,dc=comobjectClass: topobjectClass: groupOfNamescn: db2admsmember: uid=db2inst1,ou=users,dc=example,dc=com注意:您的判别名(DNs),例如 dc=example,dc=com,将取决于您的 LDAP 服务器配置。请确保在继续之前,这些用户和组已在您的 LDAP 服务器上创建。
配置 Db2 LDAP 安全插件
Section titled “配置 Db2 LDAP 安全插件”集成过程涉及三个主要步骤:复制插件文件,为插件创建配置文件,以及更新 Db2 数据库管理器(DBM)配置以使用该插件。
步骤 1:复制插件文件
Section titled “步骤 1:复制插件文件”Db2 在安装时提供了必要的插件库。您需要将它们从安装路径复制到实例的安全插件目录。请以实例所有者的身份执行这些步骤。
# 路径可能因您的 Db2 版本和安装位置而异SQLLIB_PATH=$(db2 get dbm cfg | grep 'Path to database directory' | awk -F'= ' '{print $2}')/sqllibPLUGIN_SOURCE_PATH=/opt/ibm/db2/V11.5/security/plugin
# 复制服务器端认证和组查找插件cp ${PLUGIN_SOURCE_PATH}/server/IBMLDAPauthserver.so ${SQLLIB_PATH}/security/plugin/server/cp ${PLUGIN_SOURCE_PATH}/group/IBMLDAPgroups.so ${SQLLIB_PATH}/security/plugin/group/步骤 2:创建插件配置文件
Section titled “步骤 2:创建插件配置文件”在 <instance_home>/sqllib/cfg/ 目录下创建一个名为 IBMLDAPSecurity.ini 的文件。该文件会告诉 Db2 插件如何连接和搜索您的 LDAP 服务器。
# 位置:<instance_home>/sqllib/cfg/IBMLDAPSecurity.ini
# --- 服务器相关值 ---# 您的 LDAP 服务器主机名或 IP。对于多个服务器,用空格分隔。# 对于安全 LDAP (LDAPS),请使用端口 636 并设置 SSL_ENABLE=true。LDAP_HOST = myldap.server.com:389
# 设置为 TRUE 以使用 LDAPS 进行加密通信SSL_ENABLE = FALSE
# --- 用户相关值 ---# 用户搜索的起始基本 DN。USER_BASEDN = ou=users,dc=example,dc=com# 存储用户 ID 的 LDAP 属性(例如,'uid','sAMAccountName')。USERID_ATTRIBUTE = uid# 定义用户条目的对象类。USER_OBJECTCLASS = posixAccount
# --- 组相关值 ---# 组搜索的起始基本 DN。GROUP_BASEDN = ou=groups,dc=example,dc=com# 存储组名的 LDAP 属性。GROUPNAME_ATTRIBUTE = cn# 定义组条目的对象类。GROUP_OBJECTCLASS = groupOfNames# 列出其成员的组内属性。GROUP_LOOKUP_ATTRIBUTE = member最佳实践:对于生产系统,始终使用 LDAPS。这需要将 SSL_ENABLE 设置为 TRUE,并且可能需要使用 SSL_KEYDB 和 SSL_STASH 参数为 SSL 证书配置密钥库。有关详细信息,请参阅 Db2 官方文档。
步骤 3:更新数据库管理器配置
Section titled “步骤 3:更新数据库管理器配置”最后,告诉 Db2 使用新的插件进行认证和组管理。这些更改需要重启实例才能生效。
# 作为 Db2 实例所有者:
db2 UPDATE DBM CFG USING AUTHENTICATION SERVER_ENCRYPTdb2 UPDATE DBM CFG USING SRVCON_PW_PLUGIN IBMLDAPauthserverdb2 UPDATE DBM CFG USING GROUP_PLUGIN IBMLDAPgroups
# 重启 Db2 实例以使更改生效db2stopdb2start验证和故障排除
Section titled “验证和故障排除”重启实例后,您可以通过尝试使用 LDAP 用户的凭据连接到数据库来验证配置。
# 使用 LDAP 用户 ID 和密码连接db2 CONNECT TO mydatabase USER ldapuser1 USING 'password123'常见错误和调试技巧
Section titled “常见错误和调试技巧”- 连接失败: 如果
db2start失败或连接被拒绝,请检查db2diag.log文件。它通常包含来自 LDAP 插件的详细错误消息。 - 凭据无效: 这意味着 LDAP 服务器拒绝了用户名/密码。请验证凭据,并确保
.ini文件中的USERID_ATTRIBUTE设置正确(例如,OpenLDAP 使用uid,Active Directory 使用sAMAccountName)。 - 用户未找到: 如果用户有效但 Db2 找不到它,请仔细检查
USER_BASEDN和USER_OBJECTCLASS设置。确保 Db2 服务器可以访问指定端口上的LDAP_HOST。 - 组问题: 如果用户可以连接但缺少预期权限,请验证与组相关的设置(
GROUP_BASEDN、GROUPNAME_ATTRIBUTE等),并确保该用户在 LDAP 组中被正确列为member。 - 调试工具: 从 Db2 服务器机器上使用
ldapsearch等命令行工具手动查询 LDAP 服务器。这有助于独立于 Db2 确认连接性以及您的搜索过滤器和基本 DN 是否正确。
本教程介绍了透明 LDAP 认证。Db2 还支持将 LDAP 用户映射到不同的 Db2 授权 ID 以及更复杂的目录模式。对于高级配置和安全强化,请始终查阅您特定版本的最新 IBM Db2 知识中心。