Trilha de auditoria no .NET com o Entity Framework Core

Esta é uma postagem rápida sobre como implementar trilha de auditoria no .NET 6 utilizando o Entity Framework Core.

Uma trilha de auditoria é um registro de todas as ações, eventos ou atividades que um usuário ou sistema realizou com seus dados. Assim, pode estar relacionado à criação, modificação, exclusão de registros ou pode ser uma sequência de ações automatizadas do sistema.

No Entity Framework Core, a auditoria de entidade pode ser facilmente configurada substituindo o método SaveChanges. O rastreamento dessas alterações de dados é crucial para a segurança e integridade de qualquer aplicação.

Pré-requisitos

API

O primeiro passo é criar a entidade de auditoria responsável por coletar todas as modificações realizadas no banco de dados.

A classe Audit é a representação da tabela de auditoria no banco de dados e a classe AuditEntry é responsável por criar e padronizar o objeto de auditoria.

Por questões de performance, é importante configurar todos os campos textos como varchar no banco de dados. Veja aqui as dicas de performance no blog do Dirceu Resende.

Em seguida, é hora de configurar o contexto da aplicação.

  • A interface IHttpContextAccessor é responsável por obter o usuário credenciado na aplicação.
  • Audits, Companies, Users e Roles são as entidades do banco de dados. Em Audits serão gravadas todas as auditorias das entidades.
  • O método OnModelCreating() é responsável por configurar o schema e aplicar as configurações das tabelas no banco de dados.
  • Os métodos SaveChanges() e SaveChangesAsync() são responsáveis por persistirem todas as modificações no banco de dados.
  • O método BeforeSaveChanges() é responsável por coletar todas as modificações nas entidades referentes à criação, alteração e exclusão de registros na base.

Na classe Program.cs da API, é necessário criar a conexão com o banco SQL e iniciar as migrations do projeto para criação das tabelas. Configure a chave de conexão com o banco SQL no arquivo appsettings.json, neste exemplo é utilizado o SQL Express:

  • "Data Source=.\SQLEXPRESS;Database=sample-audit;Integrated Security=True;MultipleActiveResultSets=true;"

E finalizando, vamos criar a controller CompanyController realizando a inclusão e alteração de registros.

Testando

Para realizar os testes, execute o endpoint POST /company PUT /company no Swagger para a criação e alteração de um registro.

A tabela AuditLogs registra todas as auditorias em formato JSON.

Dicas

Para não demandar muita escrita do banco de dados transacional salvando logs de auditorias, é uma boa prática trabalhar com eventos utilizando um Message Broker. Neste caminho, é necessário apenas modificar o método BeforeSaveChanges do contexto configurando o envio de eventos de auditoria ao invés de gravar no banco de dados.

Para saber mais sobre envio de eventos, acesse este artigo que criei utilizando o Azure Service Bus.

Finalizando

Neste artigo, aprendemos como implementar a trilha de auditoria com o Entity Framework Core utilizando o .NET 6. Essa prática é bastante útil quando você começa a trabalhar com aplicações que são utilizados ​​por vários usuários, onde é necessário inspecionar e controlar todas as alterações realizadas no banco de dados.

Os detalhes completos deste exemplo você encontra no meu GitHub: https://github.com/hgmauri/sample-audit-entityframework

Deixe uma resposta