Eu gostaria de permitir que um (super) usuário do PostgreSQL seja autenticado com os métodos de autenticação "peer" ou "md5", de preferência usando sockets de domínio Unix locais em ambos os casos. O problema é que a ordem das entradas no pg_hba.conf é importante, e a primeira correspondência será aplicada.
O que eu tenho:
# TYPE DATABASE USER ADDRESS METHOD
local all harold peer
local all all md5
O que eu gostaria de ter (sintaxe inválida):
# TYPE DATABASE USER ADDRESS METHOD
local all harold peer-or-md5
local all all md5
Aqui estão mais alguns detalhes sobre o ambiente em que gostaríamos de usar:
Neste servidor em particular, todas as bases de dados são relativamente pequenas (< 10MB de dados cada) e meramente de leitura. Eles são descartados e recriados todas as noites pelo superusuário harold. harold também é uma conta do sistema, então "peer" funciona muito bem para cronjobs sem senha, etc. Há uma interface web acessando os bancos de dados: isso usa autenticação md5 (usuário do sistema é o servidor web, nome de usuário pg, senha e nome db são fornecidos por os visitantes). Agora, gostaria de permitir que o usuário harold efetue login na interface da Web também. Isso falha por causa da configuração "peer" para harold.
A solução atual é permitir que o webinterface se conecte via TCP, usando
# TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
além das entradas locais no primeiro exemplo. Isso funciona, mas eu prefiro usar soquetes locais aqui também - para desempenho e por causa de um pressentimento de que parece ser a coisa certa a se fazer.
Isso é possível? Existe alguma solução melhor para nós?