Estou tentando conceder todos os privilégios em todas as tabelas de um determinado banco de dados para um novo usuário do postgres (não o proprietário). Parece que GRANT ALL PRIVILEGES ON DATABASE my_db TO new_user;
não faz isso. Depois de executar o comando com êxito (como usuário do postgres), recebo o seguinte como new_user:
$ psql -d my_db
my_db => SELECT * FROM a_table_in_my_db;
ERROR: permission denied for relation a_table_in_my_db
Duas questões:
1) O que o comando acima faz, se não concede todas as permissões em todas as tabelas em my_db?
2) Qual é a maneira correta de conceder todas as permissões em todas as tabelas a um usuário? (inclusive em todas as tabelas criadas no futuro)
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO your_user;
ou não poderá inserir nenhum registro.É possível configurar vários logins para atuar como o proprietário do banco de dados:
create role dbowner nologin
alter database mydb owner dbowner
grant dbowner to user1, user2
Agora, se o usuário1 ou o usuário2 fizerem login, eles terão todas as permissões no "mydb", sem a necessidade de outras concessões.
No entanto, eu consideraria esta solução com cuidado. É tentador fazer com que seu aplicativo Web use um desses logons para evitar a criação de concessões adicionais sempre que o esquema for atualizado, mas você está removendo dessa forma uma forma muito útil de proteção. Use a solução acima se você realmente deseja vários "administradores", mas mantenha o padrão "conceder todos os privilégios em todas as tabelas no esquema ..." acima para o login para o aplicativo "uso normal".
fonte