如何在开源PostgreSQL中启用LDAP组级身份认证(非用户级)
PostgreSQL LDAP组级身份认证配置方法
核心思路
要实现AD组级认证,需先验证用户的LDAP身份,再检查该用户是否属于指定的AD组。你之前的错误是将组过滤条件写在了ldapsearchattribute中——这个参数用于匹配用户登录名,组校验需要额外添加专用参数。
两种有效配置方案
方案1:直接指定组DN(推荐)
适用于已知组完整LDAP DN的场景,配置如下:
host all all 10.0.0.0/8 ldap ldapscheme="ldaps" ldapserver=domain ldapbasedn="OU=Users,DC=domain,DC=com" ldapbinddn="CN=bindaccount,OU=SA,OU=Users,DC=domain,DC=com" ldapbindpasswd="***" ldapsearchattribute="sAMAccountName" ldapgroupdn="CN=DBA,OU=Groups,DC=domain,DC=com" ldapmemberattribute="member"
参数说明:
ldapsearchattribute="sAMAccountName":保留原有配置,匹配用户登录名与AD的sAMAccountName属性ldapgroupdn:替换为DBA组的完整LDAP DN(需根据实际AD结构调整)ldapmemberattribute="member":AD中组存储成员的属性,值为用户的完整DN
方案2:动态搜索组
适用于需要通过组名动态查找组的场景,配置如下:
host all all 10.0.0.0/8 ldap ldapscheme="ldaps" ldapserver=domain ldapbasedn="OU=Users,DC=domain,DC=com" ldapbinddn="CN=bindaccount,OU=SA,OU=Users,DC=domain,DC=com" ldapbindpasswd="***" ldapsearchattribute="sAMAccountName" ldapgroupbasedn="OU=Groups,DC=domain,DC=com" ldapgrouprdnattribute="sAMAccountName" ldapgroupattribute="member" ldapgrouppattern="DBA"
参数说明:
ldapgroupbasedn:替换为AD组所在的基础DN(组所在OU)ldapgrouprdnattribute="sAMAccountName":组的名称属性,对应AD中组的sAMAccountNameldapgrouppattern="DBA":要匹配的目标组名ldapgroupattribute="member":同方案1,组存储成员的属性
关键注意事项
- 确保
bindaccount拥有读取AD用户和组信息的权限,包括读取用户的memberOf属性或组的member属性 - 可通过
ldapsearch命令验证AD数据准确性:# 验证用户的memberOf属性 ldapsearch -H ldaps://domain -D "CN=bindaccount,OU=SA,OU=Users,DC=domain,DC=com" -w "***" -b "OU=Users,DC=domain,DC=com" "(sAMAccountName=testuser)" memberOf# 验证组的成员列表 ldapsearch -H ldaps://domain -D "CN=bindaccount,OU=SA,OU=Users,DC=domain,DC=com" -w "***" -b "CN=DBA,OU=Groups,DC=domain,DC=com" "(objectClass=group)" member - 修改
pg_hba.conf后,需重载PostgreSQL配置生效:pg_ctl reload - 测试时使用组内用户登录,确认是否能正常访问数据库
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

