Pergunta

A nossa solução empresarial atual é uma aplicação ASP.NET MVC impulsionado pelo Entity Framework. Há um par de links sobre como ligar para os eventos de alteração para auditoria. Eu realmente não estou interessado nisso.

Estou interessado em arquitetura auditoria nível empresarial. Aqueles de vocês com as feridas da batalha nível empresarial, o que tem sido suas soluções de auditoria? Você serializar objetos em bancos de dados em um quadro. Você está a criação de gatilhos de banco de dados de tabelas de auditoria? Você usa um banco de dados separado todos juntos para que o seu crescimento auditoria não afeta seu banco de dados aplicativo? Estou interessado nas soluções testadas e verdadeiras aqui. Eu sei que há opções em nossa escolha de tecnologia (EF), mas eu estou interessado na fundação em primeiro lugar.

Ligações seria muito apreciado.

Foi útil?

Solução

Já vi várias soluções, mas o meu favorito era a própria simplicidade:

  • Criar tabelas de auditoria que espelham cada tabela de origem, adicionando algumas colunas extras para acompanhar a data e tipo de alteração (inserção, atualização ou excluir se você apoiá-lo) e o usuário fazer a mudança. Remover todas as restrições e índices (a menos que você espera estar fazendo um monte de pesquisas).

  • Dentro da lógica de actualização da tabela (usamos procedimentos, mas não há nenhuma razão que não poderia ser feito com um OR / M ou outra camada de persistência, dado os ganchos apropriados), escrita para a tabela de origem e tabela de auditoria.

Isto tem inúmeros benefícios, mas o maior deles (em minha opinião) é não ter que se preocupar com ou escrever todo o código para gerenciar a integridade transacional das operações de gravação emparelhado no cliente.

Outras dicas

Eu não tenho quaisquer ligações, mas no sistema que tenho a alegria de manter aqui no trabalho do dia. Temos uma tabela de auditoria única, que basicamente armazena as seguintes informações.

TableName, PrimaryKeyValue, ModifiedColumn, OldValue, NewValue, ChangeUser, Mudança de data

Agora, isso funciona muito bem para a velocidade de auditoria, no nosso código, temos uma interface comum para-implementação automática do log de auditoria, mas de uma "avaliação" ponto de vista, não é o caminho "mais rápido" para obter as informações voltar. (Concedida não temos realmente feito nada para necessidade de olhar para o log de auditoria ...)

Recentemente tivemos de resolver este mesmo problema em nossa empresa. Fomos obrigados a ser capaz de reverter para versões anteriores também.

Nós acabamos auditoria das entidades empresariais, em vez das tabelas em sql. Nós basicamente seriar os registros no banco de dados e acompanhar as mudanças que são feitas de uma versão para a próxima. Essa abordagem nos permite versões anteriores retreive para as entidades empresariais e de volta, então revert chamando o mesmo save operações. Esta funcionalidade para trás revert será deslocado a responsabilidade aplicações porque ele deve ser resolvido aqui de outra forma o nosso serviço pode precisar de saber sobre muitos detalhes sobre as aplicações participantes. Operações trocar para recuperar registros de versões, por datas, vista histórico, e, claro, a mudanças de auditoria são fornecidos. Sua um opt-in abordagem para diferentes grupos de aplicações e entidades diferentes dentro (nem tudo no DB precisa ser auditted então por que fazer isso).

Em seguida, construir um site leve, que fala com o serviço e pode exibir todas as versões. Nós construímos um mecanismo para mostrar as adições / atualizações / exclusões para comparar entre as versões (muito legal representação ui), este permite aos usuários ver quem alterou o quê e quando. O serviço pode enviar de volta um link para o URL para visualizar as versões de uma entidade. Isto permite que nossos webaps + winform / WPF aplicativos para lançar um navegador que os usuários possam ver as alterações.

Talvez eu possa embalar isso e fornecer, se alguém estiver interessado ....

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top