Evite gerenciar privilégios por tabela no PostgreSQL

Ao criar um banco de dados, alguns preferem separar a função administrativa da função de serviço do dia a dia que utiliza o banco de dados. Isso significa que a função de serviço não tem permissões por padrão. Para evitar o gerenciamento de privilégios para a função de serviço tabela por tabela, definimos os privilégios no nível do esquema. Aqui está um exemplo de como implementar isso.

CREATE ROLE admin_role;
CREATE ROLE service_role
;

CREATE DATABASE blah OWNER admin_role
;

connect blah


GRANT USAGE
, SELECT, UPDATE, INSERT ON ALL TABLES in SCHEMA public TO service_role;
GRANT SELECT
, USAGE ON ALL SEQUENCES in SCHEMA public TO service_role;

CREATE ROLE admin_user LOGIN CONNECTION LIMIT
50 PASSWORD 'xx' IN ROLE admin_role;
CREATE ROLE service_user LOGIN CONNECTION LIMIT
50 PASSWORD 'xx' IN ROLE service_role;

O esquema público é específico para o banco de dados específico, portanto, essas concessões não afetariam outros bancos de dados no cluster de servidor. Você notará que todas as propriedades e privilégios são concedidos às funções. Os usuários são então atribuídos a funções e acesso de login concedido.