psql: FATAL: ユーザ"hogehoge"の ○○認証に失敗しました

PostgreSQL 触ってる人なら一度は経験したであろう、あのメッセージです。

自分が意図したとおりに設定するためにも、誰かの設定をマネしてハマるよりは、少なくとも、どんな感じで認証が行われるかくらいは把握しておいた方が良いでしょう。

まず、PostgreSQL のクライアント認証には、Ident、LDAP、Password、MD5、PAM、Peer、Trust 等、様々な認証方式が存在します。

その中でも比較的に使いやすく、好んで使われるのが以下の方式ではないかと。

  • Ident : DB の所有者がシェルを実行している OS のユーザ名と一致するかで認証
  • MD5 : PW 認証 (MD5-hashed)
  • Trust : 認証せず、DB への接続許可 (PW スルー)

改めて、実際のエラーメッセージを見てみましょう。

Ident ユーザ認証に失敗した場合
1
2
# psql -h localhost -d redmine -U redmine
psql: FATAL:  ユーザ"redmine"のIdent認証に失敗しました
サーバ接続に失敗した場合
1
2
3
4
# psql -h 10.10.10.10 -d redmine -U redmine
psql: サーバに接続できませんでした: 接続を拒否されました
            サーバはホスト"10.10.10.10"で稼動していますか?
            また、ポート5432でTCP/IP接続を受け付けていますか?

それぞれ、ユーザ認証に失敗した場合サーバ接続に失敗した場合 の例ですが、ほとんどの原因は、

  • psql -h オプションに指定した FQDN が名前解決できていない
  • psql -h オプションに「postgresql.conf」に設定した listen_addresses が指定されていない
  • または、その listen_addresses のポートが LISTEN 状態ではない
  • DB 所有者ではないユーザで接続しようとしたり、「pg_hba.conf」の認証設定 (DB・USER・CIDR・METHOD) に誤りがある

色々あるので、PostgreSQL 認証にハマらないために、これだけは最低限 押さえておきたい PostgresSQL の基本的な認証方式についてご紹介します。

psql コマンドの基本オプション

psql コマンドの詳細オプションは省略しまが、気になる方は、# psql --help をご確認ください。

その中でも一番基本的なオプションが以下の 4つ。

オプション省略時のデフォルト値
-h <IP | HOST NAME>
優先 1. 環境変数 PGHOST
優先 2. Unix ドメインソケット (ツールを実行したホストが接続先となる)
 ※ Unix ドメインソケットを持たない環境のデフォルト値は、localhost
-d <DB NAME>
優先 1. 環境変数 PGDATABASE
優先 2. シェルを実行している OS のユーザ名と一致する DB へ接続される
-U <DB USER NAME>
優先 1. 環境変数 PGUSER
優先 2. シェルを実行している OS のユーザ名
-p <PORT>
優先 1. 環境変数 PGPORT
優先 2. 5432

直接オプション値を指定しなかった場合には、基本的に 環境変数に指定した 優先 1 の値が採用されますが、そうでないときは、優先 2 の値がデフォルト値として使われます。

また、これらのオプションは、DB 接続に限らず、PostgreSQL 認証が通ってるか確認する際にも有効に使えるので、軽く目を通してください。

-h オプションについて

特に、-h <HOST NAME> オプションを指定する際には、必ず、LISTEN 状態の IP アドレス、もしくは ホスト名を指定してください。

  • -h <LISTEN IP>
  • -h <LISTEN HOST NAME>

Unix ドメインソケットとは

Unix ドメインソケットとは、同一ホスト内での接続において、プロセス間 通信・接続を行うためのソケットのことです。

OS ユーザ情報、及び PostgreSQL の DB・所有者情報

本題に入る前に、以下は テストする際に利用した OS のユーザ情報PostgreSQL の DB と 所有者情報 です。

ちなみに、この例は、Redmine を動かしている環境でテストを行ったため、今現在 Redmine 構築中の方にとっては、ちょうど良いサンプルになるのではないかと思います。

OS のユーザ情報
1
2
3
4
5
# cat /etc/passwd
・・・
hoge:x:500:500::/home/hoge:/bin/bash
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
redmine:x:501:501::/home/redmine:/bin/bash
PostgreSQL の DB 一覧 / DB 所有者情報
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
# su - postgres
-bash-4.1$
-bash-4.1$ psql -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 redmine   | redmine  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
(4 行)
-bash-4.1$
-bash-4.1$ exit
#

Local タイプ : Ident・MD5・Trust 認証例

Local タイプでの Ident 認証

まず最初に、一番基本とも言える Local タイプを理解するために、Local の Ident 認証を行います。

Local 接続での Ident 認証は、推奨される認証方法の一つです。

以下の例では、ローカル接続に限って (local)、PostgreSQL に登録されている 全ての DB (all)全ての DB ユーザ (all) に対し、DB 所有者と 接続を試みる OS のユーザ名が一致すれば、PW 無しで接続を許可 (ident) します。

この条件に合致すれば、認証自体が不要になるので、PostgreSQL が動いている OS に直接ログインして DB を操作する際に、例えば、DB の中身を確認したり、メンテナンスする際には有効に使えます。

/var/lib/pgsql/data/postgresql.conf
1
2
3
・・・
#listen_addresses = 'localhost'         # what IP address(es) to listen on;
・・・
/var/lib/pgsql/data/pg_hba.conf
1
2
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     ident
設定反映
1
# systemctl restart postgresql    #### または、service restart postgresql
Ident : postgres DB へ postgres DB ユーザでローカル接続
01
02
03
04
05
06
07
08
09
10
11
12
# su - postgres

-bash-4.1$ psql -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 redmine   | redmine  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
・・・
-bash-4.1$
-bash-4.1$ exit
#
Ident : redmine DB へ redmine DB ユーザでローカル接続
01
02
03
04
05
06
07
08
09
10
11
12
13
# su - redmine

[redmine ~]$ psql -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 redmine   | redmine  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
・・・

[redmine ~]$ exit
logout
#
Ident : hoge DB へ hoge DB ユーザでローカル接続
1
2
3
4
5
6
7
8
# su - hoge

[hoge ~]$ psql -l
psql: FATAL:  ユーザ"hoge"のIdent認証に失敗しました

[hoge ~]$ exit
logout
#

一番最後の hoge ユーザは、DB 所有者として登録されている DB が存在しないため、Ident 認証に失敗します。

Local タイプでの MD5 認証

パスワード認証方式には、以下の 2種類があります。

  • Password (平文)
  • MD5 (MD5-hashed 暗号化)

見ての通り、Password は平分でパスワードが丸見えなので、パスワード認証を使うなら、MD5 が無難です。

METHOD フィールドの値に md5 を指定すれば、MD5 認証 (パスワード認証) になります。

そのため、MD5 は、DB 接続時にパスワードを求められます。

以下の例では、ローカル接続に限って (local)、PostgreSQL に登録されている 全ての DB (all)全ての DB ユーザ (all) に対し、PW が通れば接続を許可 (md5) します。

/var/lib/pgsql/data/postgresql.conf
1
2
3
・・・
#listen_addresses = 'localhost'         # what IP address(es) to listen on;
・・・
/var/lib/pgsql/data/pg_hba.conf
1
2
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     md5
設定反映
1
# systemctl restart postgresql    #### または、service restart postgresql
MD5 : postgres DB へ postgres DB ユーザでローカル接続
01
02
03
04
05
06
07
08
09
10
11
12
13
# su - postgres

-bash-4.1$ psql -l
パスワード:
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 redmine   | redmine  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
・・・
-bash-4.1$
-bash-4.1$ exit
#

Local タイプでの Trust 認証

自由自在に、接続したい DB に 認証なし・パススルーで接続したい場合には、METHOD フィールドに trust を指定します。

そうするとローカルマシンからの接続なら PW 無しで (無条件で) DB 接続が許可されます。

以下の例では、ローカル接続に限って (local)、PostgreSQL に登録されている 全ての DB (all)全ての DB ユーザ (all) に対し、PW 無しで接続を許可 (trust) します。

/var/lib/pgsql/data/postgresql.conf
1
2
3
・・・
#listen_addresses = 'localhost'         # what IP address(es) to listen on;
・・・
/var/lib/pgsql/data/pg_hba.conf
1
2
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     trust
設定反映
1
# systemctl restart postgresql    #### または、service restart postgresql
この例では hoge シェルで接続テスト
1
2
3
4
# su - hoge

[hoge ~]$ whoami
hoge
Trust : postgres DB へ postgres DB ユーザでローカル接続
1
2
3
4
5
6
7
8
[hoge ~]$ psql -d postgres -U postgres -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.utf8  | ja_JP.utf8        |
 redmine   | redmine  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
・・・
(4 行)
Trust : redmine DB へ redmine DB ユーザでローカル接続
1
2
3
4
5
6
7
8
[hoge ~]$ psql -d redmine -U redmine -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.utf8  | ja_JP.utf8        |
 redmine   | redmine  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
・・・
(4 行)
Trust : postgres DB へ redmine DB ユーザでローカル接続
1
2
3
4
5
6
7
8
[hoge ~]$ psql -d postgres -U redmine -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.utf8  | ja_JP.utf8        |
 redmine   | redmine  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
・・・
(4 行)
Trust : redmine DB へ postgres DB ユーザでローカル接続
1
2
3
4
5
6
7
8
[hoge ~]$ psql -d redmine -U postgres -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.utf8  | ja_JP.utf8        |
 redmine   | redmine  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
・・・
(4 行)

ただ、Trust とは言え、DB 上にありもしないユーザが指定された場合には、以下のように、認証に失敗します。

Trust : postgres DB へ hoge ユーザでローカル接続
1
2
[hoge ~]$ psql -d postgres -l
psql: FATAL:  ロール"hoge"は存在しません
Trust : postgres DB へ root ユーザでローカル接続
1
2
[hoge ~]$ psql -d postgres -U root -l
psql: FATAL:  ロール"root"は存在しません

やっぱり一番楽なのは、all all trust ですが、DB と DB ユーザを指定すれば、全ての DB へ誰でも行けてしまうので、セキュリティ的には良くないですが、以下の場合においては使っても良いかもしれません。

  • OS レベルでのセキュリティが確保されている場合
  • 使う人が限られてる環境
  • 自分しか触らない環境
  • 開発環境

また、all all ではなく、DATABASE と USER を絞って指定すると より安全に利用できます。

Host タイプ : もう少し実践的な認証例 その1. Redmine DB への内部接続

ここまで理解できたら Host タイプでの Ident・MD5・Trust 認証については説明するまでもないですが。

Local タイプHost タイプ の大きな違いとしては、Host タイプは、-h オプション指定で DB 接続が可能になることです。

すなわち、Host タイプでは 設定によっては、psql コマンドに -h localhost 指定はもちろんのこと、-h aaa.bbb.ccc.ddd のように外部から PostgreSQL DB へ IP アドレス指定で接続することが可能になります。

もちろん、psql コマンドの -h オプションにしてする FQDN / IP アドレス は、LISTEN 状態でなければなりません

また、Host タイプの場合には、Local タイプに比べて 設定箇所が少し増えるので、そこだけ補足しますと。

  • 「postgresql.conf」に外部からの接続を受け付けるための IP アドレスを設定する (listen_addresses)
  • 「pg_hba.conf」の「ADDRESS」フィールドに接続を許可する CIDR を入力する (IP アドレス/サブネット 形式)

ということで、ここからは もう少し実践的な例として、Redmine 構築時の DB 認証方法についてご紹介します。

Redmine を構築する際には、Redmine が利用する DB を用意する必要があります。

DB サーバは、PostgreSQL でも良いし、MySQL・MariaDB でも構いませんが、Redmine が DB へ接続するためには、Redmine の DB 設定ファイルである database.yml にその認証情報を予め設定しておく必要があります。

特に、database.yml に設定した DB 接続情報については、設定通りに認証が通ることを事前に確認しておくことが Redmine 構築時の大事なポイントの一つになります。

Redmine DB への接続テスト : ダメなパターン

以下の例は、database.yml に設定した localhost と pg_hba.conf に設定した local を混同したケースです。

/var/lib/redmine/config/database.yml
1
2
3
4
5
6
7
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "redmine123"
  encoding: utf8
/var/lib/pgsql/data/postgresql.conf
1
#listen_addresses = 'localhost'               # what IP address(es) to listen on;
/var/lib/pgsql/data/pg_hba.conf
1
2
# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     ident
設定反映
1
# systemctl restart postgresql    #### または、service restart postgresql
PostgreSQL LISTEN ポート確認
1
2
# ss -ltun | grep ":5432"         #### または、netstat -anp | grep ":5432"
tcp    LISTEN     0      128    127.0.0.1:5432      *:*
database.yml 接続テスト : localhost の redmine DB へ redmine DB ユーザで接続
1
2
# psql -h localhost -d redmine -U redmine
psql: FATAL:  pg_hba.conf にホスト"127.0.0.1"、ユーザ"redmine"、データベース"redmine, SSL無効用のエントリがありません

Local タイプでの認証例を示したときには、特に説明しなかったのですが、postgresql.conf の listen_addresses はコメントアウト状態でも デフォルトで localhost を LISTEN するので、127.0.0.1:5432 が LISTEN 状態になっています。

また、pg_hba.conf には Local タイプの設定しか入ってないので、Host タイプの認証が通るはずがありません。

Redmine DB への接続テスト : ダメなパターンの直し (正しい設定)

上記の設定のままじゃ、-h localhost 指定で Redmine DB へ接続することができないため、以下のように直します。

  • 「postgresql.conf」に localhost を明示的に LISTEN するように設定
  • 「pg_hba.con」に localhost からの接続に対し、redmine DB へ redmine DB ユーザのみ接続を許可するように設定 (Host タイプの MD5)
/var/lib/redmine/config/database.yml
1
2
3
4
5
6
7
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "redmine123"
  encoding: utf8
/var/lib/pgsql/data/postgresql.conf
1
listen_addresses = 'localhost'    #### -h localhsot 許可
/var/lib/pgsql/data/pg_hba.conf
1
2
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    redmine         redmine         127.0.0.1/32            md5    #### localhost からの接続許可
設定反映
1
# systemctl restart postgresql    #### または、service restart postgresql
PostgreSQL LISTEN ポート確認
1
2
# ss -ltun | grep ":5432"         #### または、netstat -anp | grep ":5432"
tcp    LISTEN     0      128    127.0.0.1:5432        *:*
database.yml 接続テスト : localhost の redmine DB へ redmine DB ユーザで接続
1
2
3
4
5
6
7
8
# psql -h localhost -d redmine -U redmine -l
ユーザ redmine のパスワード:
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.utf8  | ja_JP.utf8        |
 redmine   | redmine  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
・・・

Redmine DB への接続テスト : Localhost と IP 指定 両方行けるようにする

一方、-h localhost 指定、-h aaa.bbb.ccc.ddd (IP アドレス) 指定 両方接続できるようにするためには、以下のように設定します。

この例では、PostgreSQL が動いているサーバの IP アドレスを 10.10.10.10 とします。

  • 「postgresql.conf」に localhost と 10.10.10.10 を明示的に LISTEN するように設定
  • 「pg_hba.con」に localhost からの接続に対し、redmine DB へ redmine DB ユーザのみ接続を許可するように設定 (Host タイプの MD5)
  • 「pg_hba.con」に 10.10.10.10 からの接続に対し、redmine DB へ redmine DB ユーザのみ接続を許可するように設定 (Host タイプの MD5)
/var/lib/redmine/config/database.yml
1
2
3
4
5
6
7
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "redmine123"
  encoding: utf8
/var/lib/pgsql/data/postgresql.conf
1
listen_addresses = 'localhost,10.10.10.10'    #### -h localhost / -h 10.10.10.10 許可
/var/lib/pgsql/data/pg_hba.conf
1
2
3
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    redmine         redmine         127.0.0.1/32            md5    #### localhost からの接続許可
host    redmine         redmine         10.10.10.10/32          md5    #### 10.10.10.10/32 からの接続許可 (PostgreSQL が動いてるサーバの IP)
設定反映
1
# systemctl restart postgresql    #### または、service restart postgresql
PostgreSQL LISTEN ポート確認
1
2
3
# ss -ltun | grep ":5432"         #### または、netstat -anp | grep ":5432"
tcp    LISTEN     0      128    127.0.0.1:5432        *:*
tcp    LISTEN     0      128    10.10.10.10:5432        *:*
database.yml 接続テスト : localhost の redmine DB へ redmine DB ユーザで接続
1
2
3
4
5
6
7
8
# psql -h localhost -d redmine -U redmine -l
ユーザ redmine のパスワード:
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.utf8  | ja_JP.utf8        |
 redmine   | redmine  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
・・・
database.yml 接続テスト : 10.10.10.10 の redmine DB へ redmine DB ユーザで接続
1
2
3
4
5
6
7
8
# psql -h 10.10.10.10 -d redmine -U redmine -l
ユーザ redmine のパスワード:
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.utf8  | ja_JP.utf8        |
 redmine   | redmine  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
・・・

Host タイプ : もう少し実践的な認証例 その2. Redmine DB へ外部からの接続

場合によっては、DB サーバ (Postgres)ウェブサーバ (Redmine) が分かれて構成されている場合もあるでしょう。

この例では、内部接続 (DB サーバ側) に関しては、-h localhost 指定、外部 (DB クライアント側) からの接続に関しては、-h aaa.bbb.ccc.ddd (IP アドレス) 指定で接続できるようにします。

  • 10.10.10.10 : PostgreSQL が動いている DB サーバ側の IP アドレス
  • 10.10.20.10 : PostgreSQL (10.10.10.10) へ接続する DB クライアント側の IP アドレス

DB サーバ側 : Remote 先からの接続許可

DB サーバ側で必要な設定は以下の通りです。

もちろん、外部からの接続なので、DB 側の IP アドレスは LISTEN 状態でなければなりません。

  • 「postgresql.conf」に localhost と 10.10.10.10 を明示的に LISTEN するように設定
  • 「pg_hba.con」に localhost からの接続に対し、redmine DB へ redmine DB ユーザのみ接続を許可するように設定 (Host タイプの MD5)
  • 「pg_hba.con」に 10.10.20.10 (DB クライアント) からの接続に対し、redmine DB へ redmine DB ユーザのみ接続を許可するように設定 (Host タイプの MD5)
/var/lib/pgsql/data/postgresql.conf
1
listen_addresses = 'localhost,10.10.10.10'    #### -h localhost / -h 10.10.10.10 許可
/var/lib/pgsql/data/pg_hba.conf
1
2
3
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    redmine         redmine         127.0.0.1/32            md5    #### localhost からの接続許可
host    redmine         redmine         10.10.20.10/32          md5    #### Remote 先からの接続許可 (DB クライアントの IP)
設定反映
1
# systemctl restart postgresql    #### または、service restart postgresql
PostgreSQL LISTEN ポート確認
1
2
3
# ss -ltun | grep ":5432"         #### または、netstat -anp | grep ":5432"
tcp    LISTEN     0      128    127.0.0.1:5432      *:*
tcp    LISTEN     0      128    10.10.10.10:5432    *:*

DB クライアント側 : Redmine DB への接続テスト (Remote 先からの接続)

後は、DB クライアントから外部 DB へ接続できることを確認します。

DB クライアントが必要なので、入ってなければ事前にインストールします。

PostgreSQL クライアント インストール
1
# yum -y install postgresql

ちなみに、DB サーバ側とバージョンが合わないとクライアント側で接続した際に、以下のように警告が表示されます。

なので、psql のバージョンは、サーバ側に合わせておいた方が宜しいかと。

外部 DB の redmine DB へ redmine ユーザで接続 [その1]
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
# psql -h 10.10.10.10 -d redmine -U redmine
ユーザ redmine のパスワード:
psql (8.4.13, サーバ 9.2.23)
注意: psql バージョン 8.4, サーババージョン 9.2.
         psql の機能の中で、動作しないものがあるかもしれません。
"help" でヘルプを表示します.

redmine-# \l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.utf8  | ja_JP.utf8        |
 redmine   | redmine  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
・・・

redmine=# \q
#
外部 DB の redmine DB へ redmine ユーザで接続 [その2]
1
2
3
4
5
6
7
8
# psql -h 10.10.10.10 -d redmine -U redmine -l
ユーザ redmine のパスワード:
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.utf8  | ja_JP.utf8        |
 redmine   | redmine  | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
・・・

終わりに

これくらい理解しておけば、PostgreSQL 認証失敗に悩まされることはある程度解消されるのではないかと思います。

念のための補足を少々。

基本的には上記と同じように設定し、

  • DB サーバ側の「pg_hba.conf」に md5 の代わりに、ident を
  • 外部の DB クライアント側には「user add」で redmine ユーザを追加

すれば、Remote 先接続からの ident 認証も行けるのでは? と思わなくもないですが、基本的にはできません。

一応、やり方はありますが、下手すると完全にセキュリティホールになってしまう可能性があるので、やめた方が良いと思います。

また、PostgreSQL の公式ドキュメントによると、PostgreSQL では ユーザとグループの明確な区別がないためpg_hba.conf のユーザフィールドに +GroupName のように頭に + を付けてグループ名を指定することも出来るようなので、場合によっては便利に使えるかもしれません。 ご参考までに。

以上、PostgreSQL 認証に失敗しないための Ident、MD5、Trust 比較 でした。