我们只希望 1 个角色拥有 1 个数据库、Domain-unix Socket、无密码
postgres@luciol-essai:~$ more /etc/postgresql/8.4/main/pg_hba.conf | grep jppstphp
local essais_php jppstphp trust
postgres@luciol-essai:~$
psql 成功:
envol@luciol-essai:~$ psql -U jppstphp essais_php
psql (8.4.15)
essais_php=>
pgadmin3 失败:
这就是错误。
Error connecting to the server: FATAL: authentification Ident ?chou?e pour l'utilisateur << jppstphp >>
答案1
看起来 PgAdmin-III 被告知要连接到localhost
或127.0.0.1
,因此它使用 TCP/IP,而 psql 没有被赋予主机规范,因此它使用 UNIX 套接字(local
)。
将 pgadmin3 中的主机名字段留空,或添加另一个pg_hba.conf
条目host essais_php jppstphp 127.0.0.1/32 trust
。
答案2
您应该检查整个pg_hba.conf
文件,指令的顺序很重要。我猜您保留了其中的默认行:
local all all ident
如果此行出现在您指定的关于 行之前jppstphp
,postgresql 服务器将首先尝试根据您的 UNIX 用户名(似乎是 )来识别您envol
。这将失败,因为您尝试以 postgres 用户/角色 的身份进行连接jppstphp
。
md5
如果我的假设是正确的,删除上面的行(并且可能还有带有密码验证的类似条目)或将您的jppstphp
行放在它前面应该允许您通过本地套接字进行连接。
要通过本地套接字进行连接,只需像您一样将主机字段留空即可。
答案3
通过命令行连接 psql 时遇到同样的问题,而 pgAdmin 无法通过 AWS 连接 RDS。我确实将 RDS 设置为可公开访问。我确保我的 ACL 和安全组完全开放,但问题仍然存在,因此我执行以下操作:
sudo find . -name *.conf
然后sudo nano ./data/pg_hba.conf
将其添加到 pg_hba.conf 文件中的指令顶部host all all 0.0.0.0/0 md5
,然后 pgAdmin 会自动让我登录。
顺便提一下,我的 RDS 位于我的默认 VPC 中。我的非默认 VPC 中有一个相同的 RDS 实例,其安全组、ACL 和安全组设置与我的默认 VPC 相同,但我无法让它工作。不知道为什么,但那是另一天的事了。