Pergunta

Preciso auditar todas as atividades do banco de dados, independentemente de ter vindo do aplicativo ou de alguém emitindo algum sql por outros meios.Portanto, a auditoria deve ser feita no nível do banco de dados.O banco de dados em questão é Oracle.Pensei em fazer isso por meio de Triggers e também por meio de algo chamado Fine Grained Auditing que a Oracle fornece.Em ambos os casos, ativamos a auditoria em tabelas e colunas específicas.No entanto, descobrimos que o desempenho é realmente ruim quando usamos qualquer um desses métodos.

Como a auditoria é uma necessidade absoluta devido às regulamentações relativas à privacidade de dados, estou me perguntando qual é a melhor maneira de fazer isso sem degradações significativas no desempenho.Se alguém tiver experiência específica da Oracle com isso, será útil, mas se não, apenas as práticas gerais em torno da auditoria de atividades de banco de dados também serão aceitáveis.

Foi útil?

Solução

Não tenho certeza se é uma abordagem madura o suficiente para um sistema de produção, mas tive muito sucesso com o monitoramento do tráfego de banco de dados usando um sniffer de tráfego de rede.

Envie os dados brutos entre o aplicativo e o banco de dados para outra máquina e decodifique e analise -os lá.

Usei o PostgreSQL e a decodificação do tráfego e transformá -lo em um fluxo de operações de banco de dados que pudessem ser registradas era relativamente direto.Eu imagino que funcionaria em qualquer banco de dados em que o formato do pacote esteja documentado.

O ponto principal era que isso não colocava carga extra no próprio banco de dados.

Além disso, era um monitoramento passivo, registrou todas as atividades, mas não conseguiu bloquear nenhuma operação, por isso pode não ser exatamente o que você está procurando.

Outras dicas

Não há necessidade de "rolar o seu próprio".Basta ativar a auditoria:

  1. Defina o parâmetro do banco de dados AUDIT_TRAIL = DB.
  2. Inicie a instância.
  3. Faça login com SQLPlus.
  4. Insira o extrato
    audit all;
    Isso ativa a auditoria para muitas operações DDL críticas, mas o DML e algumas outras instruções DDL ainda não são auditadas.
  5. Para permitir a auditoria nessas outras atividades, tente declarações como estas:
    audit alter table; -- DDL audit
    audit select table, update table, insert table, delete table; -- DML audit

Observação:Todas as atividades "como sysdba" são SEMPRE auditadas no sistema operacional.No Windows, isso significa o log de eventos do Windows.No UNIX, geralmente é $ORACLE_HOME/rdbms/audit.

Confira a Capítulo de Auditoria do Oracle 10g R2 da Referência SQL do Banco de Dados.

A trilha de auditoria do banco de dados pode ser visualizada na visualização SYS.DBA_AUDIT_TRAIL.

Deve-se ressaltar que a auditoria interna da Oracle será de alto desempenho por definição.Ele foi projetado para ser exatamente isso e é muito difícil imaginar qualquer outra coisa que rivalize com ele em desempenho.Além disso, há um alto grau de controle "fino" da auditoria Oracle.Você pode obtê-lo com a precisão que desejar.Finalmente, a tabela SYS.AUD$ junto com seus índices podem ser movidos para um espaço de tabela separado para evitar o preenchimento do espaço de tabela SYSTEM.

Atenciosamente, Opus

Se você deseja registrar cópias de registros alterados em um sistema de destino, você pode fazer isso com o Golden Gate Software e não incorrer em muito consumo de recursos no lado da origem.Além disso, você não precisa fazer alterações no banco de dados de origem para implementar esta solução.

Golden Gate raspa os logs de redo em busca de transações referentes a uma lista de tabelas nas quais você está interessado.Essas alterações são gravadas em um 'Arquivo de trilha' e podem ser aplicadas a um esquema diferente no mesmo banco de dados ou enviadas para um sistema de destino e aplicadas lá (ideal para reduzir a carga no seu sistema de origem).

Depois de obter o arquivo de trilha para o sistema de destino, há alguns ajustes de configuração, você pode definir uma opção para realizar auditoria e, se necessário, pode invocar 2 funções Golden Gate para obter informações sobre a transação:

1) Defina o parâmetro INSERTALLRECORDS Replicação para inserir um novo registro na tabela de destino para cada operação de alteração feita na tabela de origem.Cuidado, isso pode ocupar muito espaço, mas se você precisar de uma auditoria abrangente, isso provavelmente será esperado.

2) Se você ainda não possui CHANGED_BY_USERID e CHANGED_DATE anexados aos seus registros, você pode usar as funções Golden Gate no lado do destino para obter essas informações para a transação atual.Confira as seguintes funções no Guia de Referência do GG:Ggheader ("userID") ggheader ("timestamp")

Portanto, não, não é gratuito (requer licenciamento através da Oracle) e exigirá algum esforço para acelerar, mas provavelmente muito menos esforço/custo do que implementar e manter uma solução personalizada rodando por conta própria, e você tem o benefício adicional de enviar os dados para um sistema remoto para que você possa garantir um impacto mínimo no seu banco de dados de origem.

se você estiver usando o Oracle, existe um recurso chamado CDC (Capture data change), que é uma solução com desempenho mais eficiente para requisitos de tipo de auditoria.

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