强制 postgres_fdw 使用密码?

Force postgres_fdw to use password?

我有两个数据库设置为同一个 Postgresql 9.4 数据库集群的一部分,我正在尝试使用 postgres_fdw 从另一个访问其中一个数据库中的 table。我已将其全部设置好并以超级用户身份工作,但是当我尝试以普通用户身份访问外部 table 时,出现以下错误:

ERROR:  password is required
DETAIL:  Non-superuser cannot connect if the server does not request a password.
HINT:  Target server's authentication method must be changed.

现在我明白了,这是因为我为服务器设置了对某些子网(包括它自己的子网)的信任身份验证。但是,在我创建的 1 USER MAPPING 中,我确实指定了一个密码,希望这样做会强制它使用密码身份验证。显然没有这样的运气。

因此,我的问题是是否有任何方法可以解决这个有点繁琐的要求?有没有办法强制这个连接,或者特定用户,或者类似的使用密码验证?或者以某种方式禁用该要求?或者我唯一的选择是更改配置以要求密码,并处理任何中断?

您不能强制 FDW 使用密码:另一端的服务器必须请求密码。本地套接字连接的通常默认值是没有密码。

尝试通过 TCP 连接而不是使用本地套接字:将 host=localhost 添加到连接参数,通常会修复它。

正如 Nick Barnes 在评论中指出的那样,pg_hba 允许针对特定用户使用不同的身份验证规则。因此,解决这个问题的方法是简单地为这些 FDW 连接创建一个用户,并在 pg_hba.conf 中将该用户设置为需要密码。这样我在可信网络上的可信网络应用程序可以像往常一样继续连接,但 FDW 可以获得它需要的密码请求。