A maneira mais fácil de fazer isso é exigir que o usuário tenha o mesmo nome do banco de dados e configurar pg_hba.conf
para que todos os usuários fiquem limitados ao banco de dados sameuser
. Por exemplo, algo como:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host sameuser all 0.0.0.0/0 md5
Você precisará adicionar isso além de listar todas as contas administrativas que tenham acesso a todos os bancos de dados separadamente. Se você souber o endereço IP do qual os usuários se conectarão, altere 0.0.0.0/0
para corresponder. Se os usuários estiverem se conectando por meio do soquete local em vez de TCPIP, altere TYPE para local
e remova a coluna de endereço. O método md5
significa que as senhas são necessárias. Você também precisará ter uma linha para o banco de dados template1
que dá acesso a todos os usuários.
Quanto a não permitir que eles vejam os bancos de dados de outros usuários , não tenho certeza do que você pode fazer a respeito, pois estão listados no esquema pg_catalog e listados por psql -l