Postgres不允许localhost但与127.0.0.1一起使用

时间:2015-04-22 15:37:23

标签: sql linux postgresql connection

如果我说-h localhost,Postgres不接受连接,但如果我说-h 127.0.0.1

它就有效
[root@5d9ca0effd7f opensips]# psql -U postgres -h localhost -W
Password for user postgres:
psql: FATAL:  Ident authentication failed for user "postgres"
[root@5d9ca0effd7f opensips]# psql -U postgres -h 127.0.0.1 -W
Password for user postgres:
psql (8.4.20)
Type "help" for help.

postgres=#

我的/var/lib/pgsql/data/pg_hba.conf

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                              trust
local   all         all                              ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
host    all         all         127.0.0.1/32          ident
# IPv6 local connections:
host    all         all         ::1/128               ident

如果我添加以下行,则Postgres服务failed开始:

host    all         all        localhost             ident
host    all         all        localhost             trust

那里有什么问题?

更新

我的/etc/hosts文件:

[root@5d9ca0effd7f opensips]# cat /etc/hosts
172.17.0.2      5d9ca0effd7f
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

2 个答案:

答案 0 :(得分:5)

在pg_hba.conf中,第一次匹配计数。 Per documentation:

  

第一条记录具有匹配的连接类型,客户端地址,   请求的数据库,用户名用于执行身份验证。   没有"堕落"或"备份":如果选择了一条记录,   验证失败,不考虑后续记录。如果不   记录匹配,访问被拒绝。

请注意颠倒顺序

host    all         all         127.0.0.1/32          trust
host    all         all         127.0.0.1/32          ident

可是:

host    all         all        localhost             ident
host    all         all        localhost             trust

好吧,如果你真的"添加"像你写的那些线条,应该没有任何影响。但如果您替换这些行,则有。

在第一种情况下,您获得trust身份验证方法,这是一项开门政策。 Per documentation:

  

PostgreSQL假设任何可以连接到服务器的人都是   授权使用任何数据库用户名访问数据库   他们指定(甚至是超级用户名)

但在第二种情况下,你会得到ident authentication method,必须正确设置才能正常工作。

如果您实际使用的是过时的版本8.4,请转到old manual for 8.4。您知道8.4 has reached EOL in 2014并且不再受支持了吗?考虑升级到当前版本。

更多:

答案 1 :(得分:4)

问题

Postgres在指定上述-h localhost指定pg_hba.conf的{​​{1}}时可能会使用 IPv6 ,将会返回密码提示。

但是,如果指定了ident,则会强制Postgres使用 IPv4 ,在上面的配置中设置为-h 127.0.0.1并允许无密码访问。

答案

因此答案是修改trust中的IPv6主机行以使用pg_hba.conf

trust

记住在进行配置更改后重新启动Postgres服务。