Minha empresa está mudando de um modelo de banco de dados Access distribuído para um banco de dados SQL centralizado. As tabelas de dados foram projetadas de forma que todas as tabelas tenham uma data modificada. Na discussão, foi sugerido que, como criaremos um gatilho em cada tabela para lidar com a data modificada, talvez devêssemos fazer com que o gatilho também registrasse algumas informações em uma tabela de auditoria.
Esta é a melhor maneira de configurar a auditoria para que possamos rastrear quem está alterando as informações ou existe uma maneira melhor? Links para artigos sobre o assunto são bem-vindos.
Para a auditoria, estou procurando capturar o nome da tabela, o nome da coluna, a data de modificação, o ID da linha e o nome de usuário da pessoa que está fazendo a alteração. Existe alguma informação em que não estou pensando que deveria estar capturando que possa me ajudar a evitar futuras quedas?
Não se preocupe em rastrear dados de auditoria por campo. É muito mais fácil ter uma tabela de auditoria com a mesma estrutura da tabela principal e registro de data e hora e informações do usuário rastreadas na tabela.
Essa arquitetura tem algumas vantagens:
As informações de auditoria devem incluir pelo menos: usuário que criou/alterou o registro, data/hora da criação/alteração, natureza da alteração (inserir, atualizar, excluir). Você pode querer usar a exclusão lógica (ou seja, um sinalizador 'Excluído') se tiver a opção de fazê-lo. Caso contrário, você precisa capturar o usuário e a data/hora da sessão e colocá-los no registro de exclusão, provavelmente junto com o último estado do registro. Se isso não estiver disponível na conexão (geralmente o caso em aplicativos de N camadas em que o usuário não está sendo representado no nível do banco de dados), você precisará encontrar outra maneira de obtê-lo.
Se estiver usando o SQL Server 2008 Enterprise Edition ou mais recente, você também pode considerar o uso do Change Data Capture , que:
Infelizmente, o CDC não funcionará como um substituto.
O CDC não inclui a OMS ao capturar alterações de dados; apenas o quê e o quando. Se você não precisa saber quem fez a alteração, o CDC funcionará, mas se a OMS for tão importante quanto o quê e quando, infelizmente, o CDC ficará aquém; muito curto.
Você pode fazer isso por meio de gatilhos de auditoria que fornecem alterações de dados de auditoria como respostas para as seguintes perguntas:
Isso significa que quando um gatilho é disparado, todas essas informações devem ser coletadas de um banco de dados ou instância do SQL Server e armazenadas em um repositório de auditoria. Por exemplo, um gatilho disparado quando um registro é inserido na tabela Currency.Sales é criado usando o método seguinte SQL
Em seguida, a trigger deve inserir o nome do computador onde INSERT foi executado, o nome do usuário da pessoa que inseriu o registro e o nome do aplicativo utilizado para inserir o registro. Os gatilhos aproveitam as funções integradas do SQL Server para obter estes valores:
Esses valores são armazenados em uma tabela predefinida usada como um repositório de dados de auditoria