Estou usando o Postgres 9.4 no Debian Linux. Criei um banco de dados com um usuário, cindex
com acesso ao banco de dados. No entanto, quando tento fazer login na linha de comando, nem sequer sou solicitado a fornecer uma senha:
myuser@myuserserver:~ $ psql -Ucindex cindex
psql: FATAL: Peer authentication failed for user "cindex"
O que mais preciso fazer para habilitar o usuário? Abaixo você pode ver os privilégios que já configurei:
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 | {}
Isso significa que está usando uma conexão de soquete unix e as conexões para soquetes unix estão definidas para usar
peer
autenticação em arquivospg_hba.conf
. Ele apenas verifica se o nome de usuário unix é o mesmo que o nome de usuário postgres solicitado e não se importa com senhas.Se você quiser autenticação de senha, use
md5
auth inpg_hba.conf
.Veja o manual .
A forma como o PostgreSQL divide a autenticação entre a configuração SQL e um arquivo de configuração é definitivamente confusa, então você não está sozinho. Ser capaz de definir uma senha para um usuário, mas ter essa senha ignorada em alguns contextos e usada em outros, leva algum tempo para se acostumar. Depois de entender o sistema, faz sentido, mas definitivamente não é detectável e intuitivo.
Eu tive problemas semelhantes, a resposta foi ordem de regras incorretas em
pg_hba.conf
. Antes da:já que para conexões locais as regras "all-all" foram as primeiras, e
myuser
comomydb
fazia parte de tudo isso, o psql assumiu que o tipo de conexão épeer
e me negou acesso.Depois
Dessa forma, para um usuário específico, a autenticação de senha é usada, exatamente como eu quero que seja.