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

Postgres 9.6中使用MD5加密密码创建FDW时权限报错问题

Postgres 9.6 FDW使用MD5密码无法导入外部表的原因排查

先给你梳理几个最常见的原因,按优先级排查:

1. 用户映射(USER MAPPING)的密码格式填错了

这是最容易踩坑的点!很多人以为用MD5认证就得填加密后的MD5字符串,但Postgres FDW要求你在USER MAPPING里填明文密码——Postgres会自动把明文转换成MD5格式发送给远程服务器。

如果你手动填了md5xxxxxx这种加密后的密码串,FDW发送的内容和远程服务器预期的认证信息不匹配,直接就会报错。正确的写法应该是:

CREATE USER MAPPING FOR local_db_user SERVER foreign_db_server 
OPTIONS (user 'remote_db_user', password '你的明文密码');

2. 远程Postgres的pg_hba.conf认证方式不支持MD5

远程数据库的pg_hba.conf文件里,针对你的FDW服务器IP的连接规则,可能设置的是password(明文密码认证)而不是md5。当你用MD5方式连接时,远程端不接受这种认证方式,就会失败。

排查步骤:

  • 登录远程Postgres服务器,找到pg_hba.conf(通常在/var/lib/postgresql/9.6/main/目录下)
  • 找到对应你FDW服务器IP的条目,比如:
    host    all             all             192.168.1.100/32            password
    
  • 把password改成md5,然后重启Postgres服务:
    sudo systemctl restart postgresql-9.6
    

3. 远程数据库用户的密码不是MD5加密存储的

如果远程Postgres的用户密码是用UNENCRYPTED PASSWORD选项创建的,那么密码会以明文形式存储在pg_shadow表里,这时候远程端可能无法接受MD5认证的连接请求。

排查方法:

登录远程数据库,执行以下SQL查看用户密码的存储格式:

SELECT usename, passwd FROM pg_shadow WHERE usename = 'remote_db_user';

如果passwd字段不是以md5开头的,重新设置用户密码(默认就是MD5加密):

ALTER USER remote_db_user PASSWORD '你的新密码';

4. 本地FDW服务器的密码加密配置不匹配

Postgres 9.6默认的password_encryption配置是md5,但如果你的本地服务器被改成了其他加密方式,可能会影响FDW的认证流程。不过这个情况比较少见,你可以检查本地的postgresql.conf:

grep password_encryption /var/lib/postgresql/9.6/main/postgresql.conf

确保值是md5,如果不是改回来并重启服务。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:45:38