Minha resposta é semelhante a esta em ServerFault.com .
Para ser conservador
Se você quiser ser mais conservador do que conceder "todos os privilégios", pode tentar algo mais parecido com isso.
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO some_user_;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO some_user_;
O uso de public
lá se refere ao nome do esquema padrão criado para cada novo banco de dados / catálogo. Substitua pelo seu próprio nome se você criou um esquema.
Acesso ao Esquema
Para acessar um esquema, para qualquer ação, o usuário deve receber direitos de "uso". Antes que um usuário possa selecionar, inserir, atualizar ou excluir, ele deve primeiro ter o "uso" concedido a um esquema.
Você não perceberá este requisito ao usar o Postgres pela primeira vez. Por padrão, cada banco de dados possui um primeiro esquema denominado public
. E cada usuário, por padrão, recebeu automaticamente direitos de "uso" para esse esquema específico. Ao adicionar um esquema adicional, você deve conceder direitos de uso explicitamente.
GRANT USAGE ON SCHEMA some_schema_ TO some_user_ ;
Trecho do documento Postgres :
Para esquemas, permite o acesso a objetos contidos no esquema especificado (assumindo que os próprios requisitos de privilégio dos objetos também sejam atendidos). Essencialmente, isso permite que o donatário "procure" objetos dentro do esquema. Sem essa permissão, ainda é possível ver os nomes dos objetos, por exemplo, consultando as tabelas do sistema. Além disso, depois de revogar essa permissão, os back-ends existentes podem ter instruções que já executaram essa pesquisa, portanto, essa não é uma maneira totalmente segura de impedir o acesso ao objeto.
Para obter mais discussão, consulte a pergunta, o que exatamente o uso de concessão no esquema faz? . Preste atenção especial à resposta do especialista em Postgres Craig Ringer .
Objetos Existentes Versus Futuro
Esses comandos afetam apenas objetos existentes. As tabelas e outras que você criar no futuro terão privilégios padrão até que você execute novamente as linhas acima. Veja a outra resposta de Erwin Brandstetter para alterar os padrões que afetam os objetos futuros.