Mapa da aula
Aula 09 publicada. Mapa, exemplo, EX025.
flowchart TD
N0["9.1 Acesso ao banco com menor privilégio"]
N1["9.2 Injeção e parâmetros"]
N2["9.3 Backups e cópias de teste"]
N3["Síntese"]
N0 --> N1 --> N2 --> N3
N3 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX025"]
Desenho lógico
flowchart LR
N0["9.1 Acesso ao banco com menor privilégio"]
N1["9.2 Injeção e parâmetros"]
N2["9.3 Backups e cópias de teste"]
N3["Síntese"]
N0 --> N1 --> N2 --> N3 --> Q["EX025"]
[9.1 Acesso ao banco com menor privilégio]
|
v
[9.2 Injeção e parâmetros]
|
v
[9.3 Backups e cópias de teste]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX025]
Objetivos de aprendizagem
Você vai (1) projetar o acesso ao banco de dados segundo o menor privilégio; (2) prevenir injeção por meio de consultas parametrizadas; (3) proteger backups e cópias de teste.
9.1 Acesso ao banco com menor privilégio
O banco de dados da loja da Fernway guarda associados, pedidos e estoque. Lucas revisa como as aplicações se conectam. A loja usa uma única conta de banco de dados com todos os direitos sobre tudo, inclusive apagar tabelas. Ele propõe contas separadas: a loja pode ler produtos e gravar pedidos; os relatórios podem ler visões agregadas; só uma conta de administrador, usada raramente e com registro, pode mudar o esquema. Cada conta recebe apenas os direitos de que sua função precisa. Se a loja for comprometida, o atacante herda só os direitos da loja, e não o poder de apagar ou exportar todas as tabelas.
9.2 Injeção e parâmetros
Lucas revisa o código de busca da loja e encontra uma consulta montada concatenando strings com a entrada do cliente. Ele demonstra, num banco sintético com o sqlite3 do Python, como um termo de busca forjado devolve todos os registros de associados. A correção é passar a entrada como parâmetros, que o banco trata estritamente como dados. Ele também verifica as demais consultas e encontra mais duas montadas do mesmo jeito. As consultas parametrizadas são um controle simples e consagrado, e mesmo assim a injeção continua comum porque desenvolvedores sob pressão de prazo copiam padrões antigos. Os checklists de revisão de código devem incluí-la explicitamente.
9.3 Backups e cópias de teste
O inventário do capítulo 2 encontrou uma cópia de teste do banco de dados no armazenamento em nuvem. Lucas investiga: ela continha dados reais de associados e podia ser lida por qualquer pessoa com o link. Ele recomenda que os ambientes de teste usem dados sintéticos ou mascarados, que os backups sejam criptografados com chaves guardadas separadamente e que as permissões de armazenamento sejam revisadas automaticamente. A ISO/IEC 27002:2022 inclui controles sobre informações de teste e mascaramento de dados. As cópias de dados multiplicam o risco, e a arquitetura precisa tratar cada cópia com o mesmo cuidado que o original, ou evitar criá-la.
Exemplo resolvido
Lucas divide uma conta de banco de dados todo-poderosa em três contas de menor privilégio, encontra três consultas injetáveis e recomenda dados de teste sintéticos e backups criptografados.
Caso sintético. O conteúdo do banco e as consultas são sintéticos; a ISO/IEC 27002:2022 é real.
Erros e limites
Dividir as contas exige mudanças e testes na aplicação. Dados mascarados ainda podem ser reidentificáveis se o mascaramento for malfeito.
Exercícios
-
EX025 — Impacto do comprometimento. Como contas de banco separadas limitam um comprometimento da loja?
Mostrar critérios de avaliação
Rubrica: 3 = o atacante obtém apenas os direitos limitados da conta da loja;; 2 = limitado;; 1 = vago;; 0 = nenhuma. -
EX026 — Contagem de injeções. Quantas consultas injetáveis Lucas encontrou no total?
Mostrar critérios de avaliação
Rubrica: 3 = três: a consulta de busca e outras duas montadas do mesmo jeito;; 2 = três, sem dizer quais;; 1 = uma;; 0 = nenhuma. -
EX027 — Regra dos dados de teste. Que dados os ambientes de teste devem usar?
Mostrar critérios de avaliação
Rubrica: 3 = dados sintéticos ou mascarados;; 2 = sintéticos;; 1 = reais;; 0 = nenhuma.
Síntese
A arquitetura de bancos de dados limita o poder de cada conta, mantém a entrada como dado e controla cada cópia dos dados.