Debian LinuxでPostgres 9.4を使用しています。データベースへのアクセス権を持つユーザーcindex
を使用してデータベースを作成しました。それでも、コマンドラインでログインしようとすると、パスワードの入力さえ求められません。
myuser@myuserserver:~ $ psql -Ucindex cindex
psql: FATAL: Peer authentication failed for user "cindex"
ユーザーを有効にするために他に何をする必要がありますか?以下に、すでに設定した権限を示します。
postgres@myuserserver:~$ psql
psql (9.4.13)
Type "help" for help.
postgres=# GRANT SELECT ON ALL TABLES IN SCHEMA cindex TO cindex;
GRANT
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
cindex | postgres | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 | =T/postgres +
| | | | | postgres=CTc/postgres+
| | | | | cindex=c/postgres
postgres | postgres | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 |
template0 | postgres | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
cindex | | {}
postgres | Superuser, Create role, Create DB, Replication | {}
ピア認証
つまり、Unixソケット接続を使用しており、UNIXソケットの接続はpg_hba.conf
でpeer
認証を使用するように設定されています。 UNIXユーザー名が要求されたpostgresユーザー名と同じであることを確認するだけで、パスワードは関係ありません。
パスワード認証が必要な場合は、代わりにmd5
でpg_hba.conf
authを使用してください。
マニュアル を参照してください。
PostgreSQLがSQL設定と設定ファイルの間で認証を分割する方法は間違いなく混乱を招くので、あなただけではありません。ユーザーのパスワードを設定できるが、そのパスワードが一部のコンテキストで無視され、他のコンテキストで使用されるようにするには、慣れる必要があります。システムを理解すればそれは理にかなっていますが、間違いなく発見可能で直感的ではありません。