Hibernate Envers: Auditoria de dados em Java

Aprenda como implementar a auditoria de dados com o Hibernate Envers, um requisito tão solicitado pelas corporações.

Fique por dentro
Este artigo é útil por mostrar como rastrear em um banco de dados o histórico de mudanças de entidades para saber quem, quando e o que foi alterado. Aprenderemos de forma básica e simples os principais conceitos relativos ao Envers, fazendo uma análise geral sobre seu funcionamento, mostrando como configurar um ambiente de desenvolvimento com Maven, Eclipse e MySQL para uso desta tecnologia e, em seguida, como implementar um sistema de auditoria.

Auditoria pode ser considerada como umexame sistemático das atividades desenvolvidas em determinada empresa ou setor, tendo como objetivo averiguar se essas atividades estão de acordo com as diretrizes planejadas e/ou estabelecidas previamente, se foram implementadas com eficácia e se estão adequadas.

Com o surgimento dos sistemas computacionais, as empresas passaram a confiar seus dados à área de Tecnologia da Informação (TI), que se tornou responsável pela proteção e garantia da consistência desses dados.

Como essas informações, na maioria das vezes, ficam armazenadas em bancos de dados, ele é o ponto de partida para iniciar uma auditoria ou conferência, tendo como insumos os dados recebidos e enviados pelas aplicações e sistemas corporativos. Dessa forma, auditar a persistência requer uma análise direta de operações que envolvem o acesso a bancos de dados.

Uma das funções da auditoria é monitorar quando e como o dado foi inserido, com o intuito de prevenir e detectar problemas no cumprimento das regras de negócio. Outra função tem relação com questões de segurança, objetivando garantir que usuários não autorizados não estejam acessando o banco de dados.

Uma boa auditoria de persistência deve fornecer informações sobre as operações realizadas nas tabelas envolvidas, como: quem inseriu, editou, excluiu ou até mesmo consultou informações; que informações foram essas; como estavam antes e como ficaram depois; quando foi feito, etc.

Com estas informações e caso algum dado seja inserido/alterado incorretamente, o analista terá meios para que possa recuperar a versão antiga da informação que deseja ou mesmo identificar o autor daquela alteração.

Um tipo de auditoria muito usado nos sistemas atuais é o baseado em Stored Procedures e Triggers, realizado diretamente no SGBD. O inconveniente desse método está na necessidade de se desenvolver uma estrutura específica para as auditorias diretamente no banco de dados, gerando assim uma alta dependência desse componente.

Independentemente do porte da aplicação, é cada vez mais comum a necessidade real de monitorar as ações do usuário frente ao sistema, de modo a prover controle sobre seu uso, assim como resguardar a integridade das informações administradas pela mesma.

Em torno desta necessidade, hoje, grande parte das aplicações desenvolvidas sobre a plataforma Java faz uso de frameworks ORM, sendo o Hibernate o mais adotado. E foi através dessa necessidade que foi criado o Envers.

Portanto, ao longo desse artigo abordaremos os principais conceitos e características do Hibernate Envers, e veremos como desenvolver um sistema de cadastro de projetos considerando como um dos seus principais requisitos não funcionais a realização de auditoria sobre seus dados.

Para tanto, serão empregados, além do Envers, a linguagem de programação Java, o ambiente de desenvolvimento Eclipse integrado ao Maven e o sistema de gerenciamento de banco de dados MySQL. O Hibernate será usado como solução integrante da camada de persistência, viabilizando a interface entre a aplicação e o MySQL.

Hibernate Envers

O Hibernate é um framework de mapeamento objeto relacional muito popular entre os desenvolvedores Java. Distribuído com a licença LGPL, foi criado por Gavin King em 2001, sendo, sem dúvida, o framework de persistência de dados mais utilizado, sobretudo por dar suporte a classes codificadas com agregações (aquelas que usam outras classes em suas operações), herança, polimorfismo, composições e coleções, por implementar a especificação Java Persistense API, por não restringir a arquitetura da aplicação e por ser amplamente documentado.

Segundo a documentação oficial: “o Hibernate pretende retirar do desenvolvedor cerca de 95% das tarefas mais comuns de persistência de dados”.

Sua principal característica é o mapeamento de classes Java em tabelas da base de dados (e dos tipos de dados Java para os da SQL). Além disso, o Hibernate gera os comandos SQL e libera o desenvolvedor do trabalho manual de transformação, mantendo o programa portável para quaisquer bancos de dados SQL.

O Envers é um projeto open source criado pelo engenheiro de software Adam Warski e hoje é conduzido pela empresa JBoss. Essa biblioteca permite a auditoria de classes persistentes (ORM) de forma simples e fácil, utilizando-se do conceito de revisões, de modo similar ao Subversion, onde cada transação é uma revisão.

A motivação para a utilização desse recurso é poder auditar completamente os dados, ou seja, rastrear o histórico de mudanças e ter as informações de quem, quando e o que foi modificado.

A grande inovação dessa ferramenta é a geração e alimentação automática de tabelas idênticas às tabelas originais, permitindo o controle de versões do conteúdo das tabelas mapeadas. Essas tabelas geradas podem ser chamadas de versionadas ou de histórico.

Cada vez que uma tabela auditável sofre uma alteração em seus registros é criada uma revisão, que por sua vez representa um registro na tabela versionada contendo um atributo de revisão como chave primária, o tipo de operação realizada e todos os campos auditáveis da tabela que sofre auditoria. Em suma, para cada UPDATE realizado em uma tabela, um INSERT é feito na tabela versionada.

Como vantagens da utilização do Hibernate Envers podemos citar: poucas alterações no código fonte da aplicação, sendo necessário apenas a inclusão de algumas anotações; independência de fornecedor para o banco de dados; agregação de valor ao produto entregue ao cliente; ganho de produtividade; e pode ser adotado em qualquer ambiente computacional em que o Hibernate Core funcione.

Como veremos, o uso do Envers é simples e basicamente resume-se a incluir a anotação @Audited no código da classe mapeada.

Feito isso, o framework criará uma tabela com o histórico das mudanças dos dados da entidade. Caso o desenvolvedor necessite que algum dos campos não seja incluído no histórico, basta anotá-lo com @NotAudited. Feito isso, se um campo não auditado sofrer uma mudança, nenhuma entrada será inserida na tabela de auditoria.

Nota: Devido a sua importância, a partir da versão 3.5 do Hibernate o Envers passou a fazer parte do projeto core do Hibernate.

Configuração

Após conhecer as principais informações relacionadas ao Envers, vamos partir para a parte prática e desenvolver uma aplicação que possibilite ao leitor visualizar como o framework funciona e sua utilidade.

No entanto, antes de começarmos a codificar, é importante instalar os softwares que nos auxiliarão nesse trabalho e também preparar o ambiente de desenvolvimento para utilização do Hibernate Envers." [...] continue lendo...

Artigos relacionados