No PostgreSQL 10 - ao usar um "usuário proprietário" (função de login que possui um esquema e todas as tabelas, não usado pelo aplicativo em tempo de execução) e um usuário "tempo de execução", posso GRANT
selecionar/atualizar/excluir permissões em todas as tabelas existentes no esquema para o usuário de tempo de execução:
GRANT SELECT ON ALL TABLES IN SCHEMA owner TO runtime;
Mas isso se aplica apenas a objetos existentes e não a novas tabelas que podem ser criadas posteriormente.
Existe uma maneira de evitar a concessão de todos os novos objetos por meio da herança de funções ou permissões de esquema ou similares?
Sim. A palavra chave é
DEFAULT PRIVILEGES
.Concede os privilégios especificados para todos os objetos especificados criados no futuro , pela função especificada para a outra função especificada.
Eu especifiquei o target_role (
owner_user
) explicitamente para evitar ambiguidade. Senão, citando o manual :Relacionado:
E não se esqueça de acessar as sequências se você tiver alguma
serial
coluna. A primeira resposta vinculada tem instruções.