You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Dovecot读取PostgreSQL中bcrypt哈希密码的用户

配置Dovecot读取PostgreSQL中的bcrypt哈希密码

我来帮你搞定这个问题!其实Dovecot本身就支持bcrypt密码验证,只要把SQL查询和认证配置调整到位就行,下面是一步步的操作指南:

1. 确保Dovecot的bcrypt支持已启用

大部分现代Dovecot版本(2.2+)默认已经包含bcrypt的密码验证模块,你可以先检查一下dovecot.conf里的核心配置,确保没有禁用相关组件:

# 确保auth_mechanisms包含你需要的登录方式(比如plain、login)
auth_mechanisms = plain login

2. 配置Dovecot的SQL认证文件

主要修改/etc/dovecot/dovecot-sql.conf.ext这个文件,这是Dovecot连接PostgreSQL的核心配置:

2.1 设置数据库连接参数

先填写你的PostgreSQL连接信息,替换成自己的实际值:

driver = pgsql
# 格式:host=数据库地址 dbname=库名 user=数据库用户名 password=数据库密码
connect = host=localhost dbname=mail_server_db user=mail_db_user password=your_db_password_here

2.2 配置密码查询语句

这是最关键的部分!Dovecot需要知道如何从数据库获取bcrypt哈希,并且识别它的格式:

  • 如果你的数据库users表中,password字段存储的是不带前缀的bcrypt哈希(比如$2a$10$xxxxxxxxxxxxxx...),那查询语句要加上{bcrypt}前缀,告诉Dovecot这是bcrypt格式:
    password_query = SELECT email AS user, '{bcrypt}' || password AS password FROM users WHERE email = '%u'
    
  • 如果你的数据库里已经存储了带{bcrypt}前缀的哈希(比如{bcrypt}$2a$10$xxxxxxxxxxxxxx...),直接查询返回即可:
    password_query = SELECT email AS user, password FROM users WHERE email = '%u'
    

2.3 指定默认密码方案

在同一个文件里加上这一行,明确告诉Dovecot默认使用bcrypt进行密码验证:

default_pass_scheme = bcrypt

3. 启用SQL认证模块

打开/etc/dovecot/conf.d/10-auth.conf,确保启用了SQL认证,同时注释掉其他不需要的认证配置:

# 注释掉类似auth-system.conf.ext这类不需要的配置,保留SQL认证
!include auth-sql.conf.ext

# 如果需要允许明文登录(建议配合SSL/TLS使用),确保这一行是no
disable_plaintext_auth = no

4. 测试配置和验证

先重启Dovecot服务让配置生效:

systemctl restart dovecot

然后用doveadm工具测试用户认证是否成功:

doveadm auth test your_user@example.com

输入用户的明文密码,如果返回passdb: your_user@example.com auth succeeded,就说明配置完全生效了!

注意事项

  • 确保PostgreSQL的users表中,password字段的类型是TEXT或者VARCHAR(255),bcrypt哈希固定为60字符,留足空间即可。
  • 数据库用户需要拥有users表的读取权限,避免连接或查询失败。
  • 强烈建议启用SSL/TLS加密(配置10-ssl.conf),避免明文密码在传输过程中泄露。

内容的提问来源于stack exchange,提问作者Hauke Schnau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:35:28