UC2 · Implementar Banco de Dados

Usuários e Permissões

Aula 16 — Quem pode ver e mudar o quê

Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

O mapa de hoje

  • Bloco 1 — por que ninguém deveria usar o postgres no dia a dia
  • Bloco 2 — CREATE ROLE, GRANT e REVOKE
  • Bloco 3 — privilégio mínimo, views como proteção e LGPD
  • Bloco 4 — mão na massa: criar uma role restrita e testar que ela é restrita
Este é o Indicador 6 da competência: operacionalizar permissões de acesso. Não basta saber o conceito — hoje vocês configuram de verdade.
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

Retomando a Aula 15

  • Quais funções do CRUD precisam de commit()?
  • A view guarda os dados ou a consulta?
  • Qual dos três usos de view tem a ver com segurança?
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

Bloco 1

Por que não usar o postgres para tudo

Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

icone O que vocês vêm fazendo até agora

Desde a Aula 10, todo mundo conecta como postgres — o superusuário.

  • Pode criar e apagar qualquer banco
  • Pode apagar qualquer tabela
  • Pode ler qualquer dado, de qualquer cliente
  • Não existe nada que ele não possa fazer
Isso é aceitável num banco de estudo, na sua máquina. Em qualquer outro lugar, é um problema sério.
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

icone O que dá errado

  • O atendente apaga sem querer a tabela de clientes — e podia
  • O estagiário vê o telefone e o CPF de todo mundo — e não precisava
  • Um sistema invadido vira acesso total, não acesso parcial
  • Ninguém sabe quem fez o quê: todo mundo é o mesmo usuário
Lembram do Problema 4 da Aula 01 — "quem apagou a linha 200?". Com um login só para todo mundo, a resposta continua sendo "não dá para saber".
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

icone Role — usuário e grupo na mesma palavra

EN PT
role papel — um usuário ou um grupo de permissões
LOGIN pode se conectar ao banco
superuser superusuário — pode tudo
privilege privilégio — uma permissão específica
No PostgreSQL, usuário e grupo são a mesma coisa: uma role. Uma role com LOGIN funciona como usuário; sem LOGIN, funciona como grupo.
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

Checagem do Bloco 1

Na locadora trabalham a dona, duas atendentes e um estagiário de estoque. Hoje
os quatro entram como postgres.

  • Quem precisa poder apagar um empréstimo? E quem não pode?
  • O estagiário roda DROP TABLE emprestimo por engano. O que o banco faz hoje?
  • Depois do estrago, o que você não consegue descobrir?
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

Intervalo

10 minutos

Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

Bloco 2

CREATE ROLE, GRANT e REVOKE

Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

icone Criar a role

CREATE ROLE atendente WITH LOGIN PASSWORD 'senha_atendente';
EN PT
CREATE ROLE criar papel
WITH LOGIN com permissão de conectar
PASSWORD senha
Uma role recém-criada não pode fazer nada — nem ver uma tabela. Tudo o que ela puder fazer, você vai conceder explicitamente.
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

icone GRANT — conceder

GRANT CONNECT ON DATABASE locadora TO atendente;
GRANT USAGE   ON SCHEMA public     TO atendente;

GRANT SELECT          ON jogo, cliente, plataforma TO atendente;
GRANT SELECT, INSERT  ON emprestimo                TO atendente;
EN PT
GRANT conceder
ON sobre (qual objeto)
TO para (qual role)
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

icone Os privilégios que existem

Privilégio Permite
SELECT ler as linhas
INSERT inserir linhas novas
UPDATE alterar linhas existentes
DELETE apagar linhas
ALL PRIVILEGES todos os acima
Repare que são exatamente as 4 letras do CRUD da Aula 15. Permissão é definida por verbo e por tabela — o atendente pode inserir empréstimo, mas não pode apagar jogo.
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

icone REVOKE — retirar

REVOKE INSERT ON emprestimo FROM atendente;
Conceder é fácil; lembrar de retirar é o que falha na vida real. Pessoa muda de função, sai da empresa — e a permissão continua lá. É assim que vazamento acontece.
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

icone Role de grupo — concedendo para vários de uma vez

CREATE ROLE equipe_balcao;                    -- sem LOGIN: é um grupo
GRANT SELECT ON jogo, plataforma TO equipe_balcao;

CREATE ROLE ana   WITH LOGIN PASSWORD '...';
CREATE ROLE bruno WITH LOGIN PASSWORD '...';

GRANT equipe_balcao TO ana, bruno;            -- os dois herdam as permissões
Contrata mais um atendente? Um GRANT equipe_balcao TO fulano resolve. Mudou a regra do balcão? Muda no grupo, e todos mudam junto.
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

icone Onde ver as permissões no pgAdmin

  1. Clique com o botão direito na tabela → Properties…
  2. Abra a aba Security
  3. A lista mostra quem tem qual privilégio
  4. Dá para conceder e revogar por aqui também, sem escrever SQL
Use a tela para conferir. Para configurar, prefira o SQL — ele fica no arquivo .sql do grupo, versionado e repetível.
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

Checagem do Bloco 2

Escreva os comandos:

  • Criar a role estagiario, que pode conectar
  • Deixar ela só ler a tabela jogo
  • Tirar dela a permissão de ler cliente
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

Intervalo

10 minutos

Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

Bloco 3

Privilégio mínimo, views e dados pessoais

Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

icone O princípio do privilégio mínimo

O caminho do privilegio minimo: comecar sem permissao nenhuma e conceder so o que a pessoa precisa para trabalhar

Comece com nenhuma permissão e conceda só o que a pessoa precisa para trabalhar. Nunca o contrário.
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

icone Desenhando as permissões do negócio

A matriz de permissoes: o que admin, atendente e estagiario podem fazer em cada tabela e na view do catalogo

Antes de escrever GRANT, responda: quem precisa fazer o quê em qual tabela?

Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

icone View como proteção

CREATE VIEW catalogo_publico AS
SELECT titulo, genero, ano_lancamento FROM jogo;

GRANT SELECT ON catalogo_publico TO estagiario;
-- e NENHUM grant na tabela jogo
O estagiário consulta o catálogo e nunca enxerga o preço de custo, nem o dado de cliente nenhum. É o nível de visões da Aula 02 — prometido lá, entregue aqui.
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

icone Dados pessoais — não é só boa prática

  • Nome, telefone, CPF e e-mail de cliente são dados pessoais
  • A LGPD (Lei 13.709/2018) exige que o acesso seja limitado ao necessário
  • Vazamento gera multa para a empresa e dano para a pessoa
Privilégio mínimo deixou de ser "caprichoso" e virou exigência legal. Quem trabalha com banco de dados responde por isso.
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

icone Erro comum — testar a permissão com o próprio postgres

Conceder GRANT e continuar conectado como postgres não prova nada: o superusuário passa por cima de qualquer restrição. É preciso desconectar e conectar como a role nova.

No pgAdmin: crie uma segunda conexão de servidor, com o usuário da role e a senha dela. Assim dá para alternar entre as duas.

Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

Checagem do Bloco 3

O estagiário precisa ver título e gênero dos jogos. Nada mais.

  • Escreva os comandos: a view e o GRANT
  • Ele consegue rodar SELECT preco_diaria FROM jogo? Por quê?
  • Como você prova que ele não consegue?
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

Intervalo

10 minutos

Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

Permissões no banco do projeto

  1. No papel, desenhem a matriz: quem precisa fazer o quê em qual tabela
  2. Criem uma role atendente (ou equivalente do tema de vocês)
  3. Concedam CONNECT, USAGE e só os privilégios necessários
  4. Criem uma view sem dados pessoais e uma role que só enxerga ela
  5. Abram uma segunda conexão no pgAdmin com a role nova
  6. Testem: o que ela deve poder, funciona? O que ela não deve, é recusado?
  7. Anotem a mensagem de erro do acesso negado
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

Lembrete de entrega

Padrão Hoje
grupoNN-aulaNN-artefato.<ext> grupo03-aula16-permissoes.sql
grupo03-aula16-matriz.pdf
No .sql, incluam um comentário com a mensagem de erro que apareceu quando a role tentou o que não podia. É a prova de que funcionou.
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

Enquanto vocês configuram

O que eu vou conferir:

  • A matriz foi desenhada antes dos comandos?
  • CONNECT e USAGE foram concedidos? (o esquecimento nº 1)
  • Os privilégios são os mínimos necessários, ou foi ALL PRIVILEGES?
  • Existe uma view protegendo dado pessoal?
  • Vocês conectaram com a role nova e viram o acesso negado?
Terminou? Usem REVOKE para tirar uma permissão e confirmem que a role perdeu o acesso.
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

Devolutiva — passo de mesa em mesa

Eu passo em cada grupo. Deixem na tela:

  • A role restrita fazendo o que pode
  • A mesma role sendo recusada no que não pode, com a mensagem lida em voz alta
A recusa é a evidência do indicador. Todo grupo precisa me mostrar as duas coisas, mesmo que rápido.
Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

Antes da próxima aula

Testar em casa: crie uma role no seu banco pessoal que só possa ler uma tabela. Conecte com ela e tente um INSERT.

Tarefa opcional: revisem a matriz de permissões do grupo e perguntem, para cada GRANT: "alguém consegue trabalhar sem isso?". Se a resposta for sim, façam REVOKE.

Para treinar: locadora-exercicios-16-permissoes.sql, na página da aula — testa tudo com SET ROLE, sem precisar de outra conexão.

Aula 16 · 29/10/2026 · Indicador 6
UC2 · Implementar Banco de Dados

Para a próxima aula

As permissões protegem contra quem não deveria mexer. E contra o disco que queima? E contra o DELETE sem WHERE do administrador?

Aula 16 · 29/10/2026 · Indicador 6
← todas as aulas