Eu tenho o que penso ser um requisito simples de autenticação do Postgres, mas não consigo descobrir o pg_hba.conf
encantamento para fazê-lo funcionar.
Eu tenho um usuário de banco de dados (função) chamado dbuser
que é o proprietário de um banco de dados protegido por senha adb
. Existe um usuário Unix correspondente chamado dbuser
. O usuário do Unix dbuser
deve poder se conectar adb
sem uma senha, todos os outros usuários do Unix devem ser capazes de se conectar usando a dbuser
função e fornecendo a senha do banco de dados. ou seja
sudo -u dbuser psql -U dbuser adb
não deve exigir uma senha de banco de dados, mas
sudo -u any_other_user psql -U dbuser adb
deve exigir a senha do banco de dados.
A pg_hba.conf
entrada:
local adb dbuser peer
funciona para o primeiro caso, mas falha para o segundo (psql: FATAL: Peer authentication failed for user "dbuser"). Eu entendo o porquê, mas não consigo descobrir as regras certas para fazer o que eu quero. Somente conexões de soquete Unix (local). Postgres 9.2 se fizer diferença.
O que você deseja não é possível com o esquema de autenticação atual do PostgreSQL. Quando
peer
a autenticação falha, o PostgreSQL não passa para a próxima entrada empg_hba.conf
. Somente a primeira entrada é usada e, se falhar, a conexão é rejeitada. Opeer
modo não oferece a opção de retornar à autenticação de senha se o ID do usuário não corresponder.Então você não pode fazer isso. Desculpe. O mais próximo que você pode chegar é usar
local
conexões (soquete unix) com autenticação e exigir que outros clientes se conectem através de soquetespeer
TCP/IP ( ) com autenticação. Usar um protocolo diferente permite escolher um método de autenticação diferente para cada um.host
md5
Recentemente, propus uma alteração no comportamento de autenticação em pgsql-hackers que pode permitir o que você deseja em uma versão posterior, se eu puder convencer as pessoas de que é uma boa ideia. Basicamente, o
peer
modo teria umamd5_fallback
opção que permitiria solicitar uma senha do cliente se apeer
autenticação falhasse.