Manual MyTable

PostgreSQL • Permissões (Roles & Grants)

Nesta seção você gerencia acessos no PostgreSQL: criação/edição de roles (usuários/grupos), e permissões em schemas, tabelas, sequências, views e funções. O fluxo é guiado para GRANT (conceder), REVOKE (revogar) e membership (papéis dentro de papéis), sem escrever SQL manual.


Abrir “Permissões”

  1. Conecte-se à sua conexão PostgreSQL e selecione o banco.
  2. No menu principal, toque em Permissões (ou abra pelo atalho dentro de um schema/tabela/view).
  3. Escolha o alvo (Schema, Tabela/View, Sequência, Função) e o papel (role) a configurar.

Dica: Papéis (roles) podem representar usuários e/ou grupos. Conceda ao grupo e inclua usuários como membros.


Conceitos rápidos

  • Role: identidade que pode logar (LOGIN) ou ser apenas grupo (NOLOGIN).
  • Ownership: dono do objeto. O owner pode GRANT/REVOKE e alterar o objeto.
  • USAGE (schema): permite usar o schema (resolver objetos). Sem isso, SELECT falha mesmo com privilégio na tabela.
  • SELECT/INSERT/UPDATE/DELETE (tabela/view): leitura e escrita de dados.
  • USAGE/SELECT/UPDATE (sequência): gerar/ler valores de nextval/currval/setval.
  • EXECUTE (função): permissão para chamar uma função.
  • DEFAULT PRIVILEGES: privilégios padrão para objetos futuros de um owner num schema.

Criar/Editar papéis (roles)

  1. Abra a aba Papéis e toque em Novo Papel ou selecione um existente para Editar.
  2. Defina:
    • Nome (ex.: app_leitura, app_escrita).
    • LOGIN (usuário) e senha — ou NOLOGIN (grupo).
    • (Opcional) INHERIT (herda permissões dos papéis dos quais é membro — recomendado).
    • (Opcional e raro) SUPERUSER, CREATEDB, CREATEROLE (use com cautela).
  3. Confirme em Salvar.

Boa prática: crie papéis de grupos por função (ex.: leitura, escrita, administração) e adicione usuários como membros.


Conceder permissões por objeto

Schema

  1. Alvo: Schema (ex.: public).
  2. Marque USAGE (necessário para enxergar objetos) e, se o papel vai criar objetos, CREATE.
  3. Confirme em Conceder.

Tabela / View

  1. Alvo: Tabela/View (ex.: public.clientes).
  2. Marque SELECT, INSERT, UPDATE, DELETE conforme a necessidade.
  3. (Opcional) REFERENCES para permitir criar FKs apontando para essa tabela.
  4. Confirme com Conceder.

Sequência

  1. Alvo: Sequência (ex.: public.clientes_id_seq).
  2. Marque USAGE (usar com nextval) e SELECT/UPDATE quando aplicável.
  3. Conceda e salve.

Função

  1. Alvo: Função (ex.: public.fn_total_pedidos(int)).
  2. Marque EXECUTE para o papel desejado.
  3. Conceda e salve.

Privilégios padrão (Default Privileges)

Ao ativar Default Privileges, novos objetos criados por um owner herdam automaticamente permissões para um papel (ex.: toda tabela nova criada pelo owner X no schema Y concede SELECT a app_leitura).

  1. Selecione o owner e o schema de referência.
  2. Escolha o tipo de objeto (tabelas, sequências, funções).
  3. Defina os privilégios padrão para o papel e Salvar.

Ownership (Transferir dono)

Para padronizar a administração, você pode transferir o dono de objetos para um papel técnico (ex.: ddl_owner). O dono controla GRANT/REVOKE e alterações.

  1. Abra o objeto (tabela/view/seq/função) e toque em Alterar Owner.
  2. Escolha o novo owner e confirme.

Atenção: mudar owner pode impactar integrações. Faça em janela e registre a mudança.


Membership (papéis dentro de papéis)

  1. Na aba Membership, selecione o papel membro e adicione-o ao papel grupo (ex.: alice → app_leitura).
  2. Mantenha INHERIT ativo nos usuários para herdarem privilégios do grupo.

Search Path (encontrar objetos)

O search_path define a ordem de schemas que o usuário “enxerga” sem qualificar (tabela vs schema.tabela). Se o usuário não encontra a tabela, ajuste o search_path ou use o nome qualificado.


Erros comuns (e soluções)

“Permissão negada para relação X”

  • Conceda USAGE no schema e SELECT (ou outras) na tabela/view.
  • Confirme se o usuário herda do grupo correto (INHERIT e membership ativos).

“Sem permissão na sequência” (erro em INSERT com PK serial/identity)

  • Conceda USAGE (e SELECT/UPDATE quando necessário) na sequência relacionada.

“Função não executável”

  • Conceda EXECUTE na função ao papel do usuário.

“Tabela existe, mas SELECT falha”

  • Falta USAGE no schema, ou o search_path não inclui o schema correto.

“Novo objeto sem acesso para o time”

  • Configure Default Privileges para o owner que cria objetos no schema.

Boas práticas

  • Conceda a grupos (roles NOLOGIN) e faça usuários pertencerem a esses grupos.
  • Separe papéis por perfil: app_leitura, app_escrita, etl, monitoring.
  • Evite SUPERUSER em rotina; use privilégios mínimos.
  • Padronize owner (ex.: ddl_owner) e Default Privileges.
  • Registre mudanças em Logs & Auditoria.

Ferramentas relacionadas

Voltar: PostgreSQL • Health/Diagnóstico