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.