Eu tenho um requisito para auditar todas as consultas SELECT (por acesso) em tabelas especificadas por usuários especificados.
Tanto quanto eu posso dizer, isso não pode ser feito com a auditoria normal; ele suporta apenas a auditoria de todas as consultas por usuários especificados ou todas as consultas em tabelas especificadas (por qualquer usuário). Isso é um problema porque existem contas do sistema que gerariam muita auditoria e precisam ser excluídas da auditoria.
Isso deixa a auditoria refinada, onde é possível fazer isso especificando o predicado apropriado para o parâmetro audit_condition em dbms_fga.add_policy . No entanto, o FGA tem o efeito infeliz de gravar linhas duplicadas na trilha de auditoria quando a consulta paralela é usada; não é desejável quando o objetivo é minimizar as informações de auditoria.
Atualmente, estou planejando usar o FGA e remover com frequência as linhas duplicadas. Existe alguma maneira melhor de implementar essa estratégia de auditoria?
Eu encontrei uma maneira de evitar linhas duplicadas na trilha de auditoria FGA com consulta paralela
Primeiro crie uma função que retorne 1 se AUTHENTICATION_METHOD for PQ_SLAVE no contexto USERENV (o processo coordenador recebe 0)
Em seguida, adicione a política à tabela
Agora apenas o coordenador de consulta é auditado, portanto, não importa qual seja o grau paralelo, apenas uma linha é inserida na trilha de auditoria fga.
Não notei nenhum problema de desempenho com essa abordagem em comparação com a auditoria normal ou sem auditoria.