内容提要
本文介绍了使用pgBouncer时如何设置PAM-LDAP进行身份验证,包括OpenLDAP-slapd设置示例、PostgreSQL和pgBouncer的配置示例以及使用pamtester工具测试PAM身份验证。文章强调了在生产系统中使用外部连接池器需要谨慎,并提供了一个链接以下载有关优化PostgreSQL数据库性能的电子书。
延伸解读
LDAP认证与数据库用户分离
文章强调,LDAP/AD认证发生在PostgreSQL之外,DBA控制有限。在pgBouncer中使用PAM-LDAP时,认证由LDAP完成,但授权和访问控制仍需数据库中的真实用户。示例中,LDAP用户jobin在数据库中也创建了同名用户,但密码不同,以确保认证确实使用LDAP密码。这提醒读者,外部认证只解决“你是谁”,不解决“你能做什么”,数据库用户和权限管理仍需独立维护。
PAM配置的灵活性与测试
文章展示了两种PAM配置方式:使用系统默认的common-auth,或为pgBouncer创建专用配置文件/etc/pam.d/pgbouncer。专用配置更清晰,避免影响其他服务。配置后,建议先用pamtester工具测试PAM认证是否正常工作,再配置pgBouncer。这能提前发现LDAP连接或密码问题,减少后续排查成本。测试时需验证正确密码成功、错误密码失败。
编译支持与日志排查
pgBouncer需编译时支持PAM,可通过ldd检查是否链接libpam.so.0。从源码编译时容易遗漏此支持,导致认证失败。配置auth_type = pam后,认证失败会在pgBouncer日志中记录,如“pam_authenticate() failed: Authentication failure”和“PAM authentication failed”。这些日志有助于快速定位问题,例如LDAP服务器不可达或密码错误。
生产环境使用需谨慎
文章明确说明,演示仅为最小功能验证,不推荐生产配置。外部连接池器如pgBouncer应仅在应用缺乏良好连接池或不可避免时考虑,并需谨慎控制使用。引入pgBouncer会增加复杂性和成本,且LDAP认证依赖外部服务,可能引入额外故障点。读者应评估实际需求,避免盲目部署。
Q&A
pgBouncer如何支持PAM进行身份验证?
pgBouncer通过配置PAM-LDAP来支持身份验证,允许在PostgreSQL之外进行LDAP/AD身份验证。
如何在OpenLDAP中创建用户?
可以使用ldapadd工具和LDIF文件创建用户,例如使用命令'ldapadd -x -W -D "cn=admin,dc=percona,dc=com" -f jobin.ldif'。
如何测试PAM身份验证是否正常工作?
可以使用pamtester工具进行测试,命令格式为'pamtester login 用户名 authenticate',并检查是否成功认证。
在pgBouncer中配置PAM时需要注意什么?
确保pgBouncer在编译时支持PAM,并在配置文件中设置auth_type为pam。
使用pgBouncer时,LDAP身份验证的失败会有什么表现?
如果LDAP身份验证失败,pgBouncer日志中会记录'PAM authentication failed'的错误信息。
在生产环境中使用pgBouncer时需要考虑哪些风险?
在生产环境中使用pgBouncer需要谨慎,特别是要考虑外部连接池器的复杂性和潜在的性能影响。