Como vocês costumam fazer o log para auditoria de uma aplicação? Por exemplo para saber qual usuário fez a operação x no dia y? Considerando em se tratar um aplicação web com um pool de conexões com um usuário único?
Estou usando o log4j logando as execuções do métodos de negócio para um arquivo, mas não acho que seja uma forma legal de se fazer isso.
Eu faço quase a mesma coisa, mas gravo em banco de dados.
Como eu uso struts dividindo as funcionalidades em modulos, eu posso pela URL pegar(no filtro) qual funcionalidade o usuario esta acessando, com essa associação de URL x Funcionalidade x Usuario logado eu consigo rastrear quem fez o que.
P
psevestre
A aplicação fazer sua própria auditoria é algo que funciona para situações menos formais.
O problema conceitual é que a auditoria deveria, em princípio, usar um mecanismo independente da aplicação uma vez que não se pode partir do princípio que o código é confiável (intencional ou não incencionalmente).
Recentemente participei de um projeto deste tipo, e a melhor solução encontrada foi combinar um analisador de rede, para capturar as queries indo para o banco, em conjunto com um agente na JVM implementado com o uso do AspectWerkz para injetar informações complementares tais como a URL acessada, usuário autenticado e IP remoto.
mutano
psevestre:
A aplicação fazer sua própria auditoria é algo que funciona para situações menos formais.
Eu também acho isso. Normalmente utilizávamos mecanismos do próprio banco de dados para auditoria, mas utilizando um pool de conexões isso não adianta muito. A não ser que se fizesse uma “gambiarra” de colocar o usuário logado em todas as tabelas do banco, o que eu também não gostaria de fazer.
P
psevestre
mutano:
psevestre:
A aplicação fazer sua própria auditoria é algo que funciona para situações menos formais.
Eu também acho isso. Normalmente utilizávamos mecanismos do próprio banco de dados para auditoria, mas utilizando um pool de conexões isso não adianta muito. A não ser que se fizesse uma “gambiarra” de colocar o usuário logado em todas as tabelas do banco, o que eu também não gostaria de fazer.
Mesmo os mecanismos do banco devem ser considerado suspeitos, pois vc. não pode confiar no DBA - ao menos não do ponto de vista de um auditor.
Para o caso do pool, o esquema do agente funciona em sintonia com o mecanismo de teste de conexão que está presente na maioria dos de servidores de aplicação. O agente intercepta o código que vai executar a query e injeta o usuário corrente. Desta forma, o trace da conexão, mantido no apliance que faz a captura dos pacotes na rede, passa a ter uma query “marcadora” indicando o início de acessos por determinado usuário.
mutano
Ainda a respeito do log vocês acham conveniente que se jogue isso num arquivo com o log4j, já considerando que fosse um mecanismo separado da aplicação e do bd? Isso não poderia acarretar uma perda de performance do app. server?
P
psevestre
Pode e acarreta, dependendo das informações que vc. decidir logar.
Conheço produtos especializados em log de banco de dados, que funcionam como um “sniffer” de rede, capturando pacotes do tráfego entre o AppServer e/ou clientes do tipo SQLPlus e armazenando tudo em um apliance externo.