Capítulo 13 — Sistemas de dados
Mapa da aula
Aula 13 publicada. Mapa, exemplo, EX037.
flowchart TD
N0["13.1 Bancos de dados de aplicações"]
N1["13.2 Exclusão em bancos de dados"]
N2["13.3 Esquema de gestão de casos"]
N3["13.4 Integridade dos registros"]
N4["13.5 Consultas como método"]
N5["13.6 Armazenamento do tempo"]
N6["13.7 Controle de acesso"]
N7["Exportando dados"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
N7 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX037"]
Desenho lógico
flowchart LR
N0["13.1 Bancos de dados de aplicações"]
N1["13.2 Exclusão em bancos de dados"]
N2["13.3 Esquema de gestão de casos"]
N3["13.4 Integridade dos registros"]
N4["13.5 Consultas como método"]
N5["13.6 Armazenamento do tempo"]
N6["13.7 Controle de acesso"]
N7["Exportando dados"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX037"]
[13.1 Bancos de dados de aplicações]
|
v
[13.2 Exclusão em bancos de dados]
|
v
[13.3 Esquema de gestão de casos]
|
v
[13.4 Integridade dos registros]
|
v
[13.5 Consultas como método]
|
v
[13.6 Armazenamento do tempo]
|
v
[13.7 Controle de acesso]
|
v
[Exportando dados]
|
v
[Exemplo resolvido] --> [Exercício EX037]
Objetivos de aprendizagem
Você vai (1) explicar como os bancos de dados armazenam e apagam registros; (2) recuperar evidências de bancos de dados de aplicações; (3) projetar um esquema de dados de casos; (4) proteger a integridade dos achados armazenados.
13.1 Bancos de dados de aplicações
Muitos aplicativos — navegadores, mensageiros, aplicativos de celular — armazenam dados em bancos SQLite. As tabelas guardam mensagens, visitas e contatos com carimbos de tempo. O SQLite armazena um banco de dados inteiro num único arquivo, com um log de escrita antecipada (WAL) ao lado, e as mudanças recentes podem estar apenas nesse log até que um checkpoint as copie para o arquivo principal. Copiar só o arquivo principal pode, portanto, deixar de fora as mensagens mais recentes. Priya preserva juntos o banco de dados, seu WAL e seu arquivo de memória compartilhada, e abre as cópias em modo somente leitura, porque simplesmente abrir um banco de dados ativo num visualizador pode disparar um checkpoint que altera a evidência.
13.2 Exclusão em bancos de dados
Apagar uma linha muitas vezes marca o espaço como livre em vez de apagá-lo. Até serem sobrescritos ou eliminados por um vacuum, fragmentos podem permanecer em páginas livres ou nos logs de escrita antecipada. Os peritos usam ferramentas validadas para vê-los e os relatam como recuperados, não como atuais. Uma página da lista de páginas livres pode ainda conter a maior parte de uma mensagem apagada, enquanto o registro que a ligava a uma conversa desapareceu. Os fragmentos recuperados, portanto, muitas vezes não têm contexto, como a qual conversa pertenciam ou quando foram enviados. Os relatórios de Priya separam os registros totalmente recuperados dos fragmentos parciais e dizem o que cada um pode e não pode estabelecer, para que um fragmento não seja apresentado com mais certeza do que tem.
13.3 Esquema de gestão de casos
Priya projeta tabelas para Northfield: casos, itens, aquisições (item, ferramenta, hash, perito, horário), achados (item, descrição, artefato de origem). As chaves estrangeiras garantem que cada achado esteja ligado a um item adquirido. Cada linha de aquisição armazena o algoritmo e o valor do hash, o nome e a versão da ferramenta, o perito e os horários de início e de fim. Uma linha de achado não pode ser inserida a menos que seu item tenha pelo menos uma aquisição, o que a chave estrangeira e uma restrição de verificação garantem em conjunto. Priya desenha o esquema e percorre com Hugo um caso sintético da entrada até o achado, verificando se existe cada ligação de que o relatório precisa.
13.4 Integridade dos registros
Os registros são apenas de acréscimo: as correções acrescentam uma nova linha que referencia a antiga. Nada é sobrescrito em silêncio. Se um horário de aquisição foi lançado errado, a linha de correção guarda o novo horário, o motivo, a pessoa que fez a correção e quando. As consultas normalmente mostram os valores mais recentes, mas o histórico completo está sempre disponível. As permissões do banco de dados impedem instruções de atualização e exclusão nessas tabelas para usuários comuns, e um administrador que mude essas permissões fica registrado num log de auditoria separado. Os relatórios citam a versão que estava vigente quando foram emitidos.
13.5 Consultas como método
As consultas usadas para produzir achados são salvas com o caso, para que outro perito possa executá-las de novo. Uma consulta salva registra o SQL exato, o banco de dados contra o qual foi executada e o horário da execução. Se um achado diz 'quarenta e duas mensagens entre as contas A e B em março', outro perito pode executar a mesma consulta contra a cópia preservada e deve obter quarenta e duas. Se obtiver um número diferente, a diferença aponta para uma cópia alterada, uma ferramenta diferente ou um erro na consulta original, e vale a pena saber qualquer um desses.
13.6 Armazenamento do tempo
Armazene os carimbos de tempo em UTC com o valor original e seu formato de origem, para que as conversões possam ser conferidas. Armazenar o valor original e seu formato, por exemplo 'Unix seconds, 1692576949' ou 'Windows FILETIME, 133370505499107328', permite que qualquer pessoa refaça a conversão. A coluna em UTC torna simples a ordenação e a comparação. Se um bug de conversão for encontrado mais tarde, os valores originais permitem recalcular todos os registros afetados, em vez de tentar reverter um erro a partir de números já convertidos. Uma coluna de fuso de origem registra se o original estava em UTC, em hora local com deslocamento conhecido ou em hora local sem fuso algum, de modo que os valores ambíguos permanecem visivelmente sinalizados e nunca são tratados em silêncio como UTC.
13.7 Controle de acesso
Os peritos veem apenas os seus casos; as ações dos administradores também são registradas em log. O acesso aos casos segue a designação: um perito vê os itens dos casos para os quais foi designado, e um revisor recebe acesso somente leitura durante a revisão. Os administradores podem mudar as designações, mas não podem ler o conteúdo dos casos sem uma solicitação registrada e aprovada. Um supervisor revisa o log de acesso todo mês, e um acesso sem explicação é investigado como qualquer outro incidente. Existe um acesso de emergência (break-glass), mas cada uso dispara um alerta para dois supervisores e exige uma justificativa escrita em até um dia. Os estudantes em estágio nunca recebem contas de produção; trabalham numa cópia sintética separada do sistema.
Exportando dados
Quando os achados saem do sistema de casos, as exportações incluem um manifesto: quais consultas foram executadas, quando, por quem e o hash de cada arquivo de saída. O destinatário pode confirmar que a exportação corresponde ao registro, e o laboratório pode responder a perguntas posteriores sobre exatamente o que foi divulgado. Priya testa a exportação num caso sintético e pede que um colega de turma verifique cada hash de forma independente antes de aceitar o recurso como concluído.
Exemplo resolvido
Um banco de dados sintético de mensageiro tem 120 mensagens ativas e fragmentos de mais 14 no log de escrita antecipada. O relatório de Priya lista as 14 separadamente como "recuperadas do WAL; podem não representar o estado final da conversa".
Caso sintético. O banco de dados é inventado.
Erros e limites
Os fragmentos recuperados podem estar incompletos ou fora de ordem; eles sustentam os registros ativos, não os substituem.
Exercícios
- EX037 — Linhas apagadas. Por que linhas apagadas de um banco de dados às vezes podem ser recuperadas? Rubrica: 3 = espaço marcado como livre; permanece até ser sobrescrito/passar por vacuum, também no WAL; 2 = parcial; 1 = backups; 0 = nada.
- EX038 — Apenas acréscimo. Como as correções são tratadas no esquema de casos? Rubrica: 3 = nova linha que referencia a antiga, sem sobrescrever; 2 = parcial; 1 = editar no lugar; 0 = nada.
- EX039 — Redação sobre o WAL. Como as 14 mensagens recuperadas devem ser relatadas? Rubrica: 3 = separadamente, rotuladas como recuperadas, podem não ser finais; 2 = parcial; 1 = misturadas; 0 = nada.
Síntese
Os bancos de dados guardam vestígios após a exclusão; os sistemas de casos devem manter os achados ligados, apenas de acréscimo e reprodutíveis.
Continue estudando — capítulo 13 de 50
← Capítulo 12 (rascunho) · Índice de capítulos do curso · Capítulo 14 (rascunho) →