web-dev-qa-db-ja.com

Postgresはローカルホストを許可していませんが127.0.0.1で動作します

-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
12
Satish

Pg_hba.confでは、最初の一致がカウントされます。 ドキュメントごと:

接続タイプ、クライアントアドレス、要求されたデータベース、およびユーザー名が一致する最初のレコードは、認証を実行するために使用されます。 「フォールスルー」または「バックアップ」はありません。1つのレコードが選択され、認証が失敗した場合、後続のレコードは考慮されません。一致するレコードがない場合、アクセスは拒否されます。

逆順に注意してください:

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認証メソッドを取得します。 ドキュメントごと:

PostgreSQLは、サーバーに接続できるすべてのユーザーが、指定したデータベースユーザー名(スーパーユーザー名も含む)でデータベースにアクセスすることを許可されていることを前提としています。

ただし、2番目のケースでは、 ident認証メソッド を取得します。これを機能させるには、適切に設定する必要があります。

実際に古いバージョン8.4を使用している場合は、 8.4の古いマニュアル に進んでください。 8.4は2014年にEOLに達しました そしてもうサポートされていないことをご存知ですか?現在のバージョンへのアップグレードを検討してください。

もっと:

6

問題

Postgresは-h localhostを指定するときにIPv6を使用する可能性があります。上記のpg_hba.confidentを指定すると、パスワードプロンプトが返されます。

ただし、-h 127.0.0.1が指定されている場合、PostgresはIPv4を使用するように強制されます。これは、上記の構成でtrustに設定され、パスワードなしでアクセスできます。


答え

したがって、答えは、pg_hba.confのIPv6ホスト行を変更してtrustを使用することです。

# IPv6 local connections:
Host    all         all         ::1/128               trust

構成を変更した後、Postgresサービスを再起動することを忘れないでください。

6
Cas