Audit Log Filter Component no MySQL/Percona Server 8.4

Com o audit log plugin se tornando deprecated na versão 8.4 do Percona Server e a possibilidade de ser removido nas próximas versões, a alteração para o Audit Log Filter Component pode ser um processo para evitar novas dores de cabeça no futuro.
Neste blog, vou mostrar como instalar o Audit Log Filter Component e apresentar alguns exemplos práticos para demonstrar o funcionamento desse novo formato.

Como o Audit Log Filter funciona

O Audit Log Filter trabalha com regras JSON (filtros) e com associação por usuário.
Filtros são salvos na tabela mysql.audit_log_filter e os mapeamentos para cada usuário em mysql.audit_log_user.

Instalação e uso

O pacote traz um script SQL no diretório share/. Execute o load no banco mysql:

Esse script cria as tabelas mysql.audit_log_filter e mysql.audit_log_user e funções (ex.: audit_log_filter_set_filter, audit_log_filter_set_user) e instala o audit_log component.

Confirme component ativo:

Instalado. Porém, você ainda não está salvando nenhuma informação. Para salvar as informações, precisamos criar os filtros.

Exemplo 1: logar tudo

Vamos iniciar os exemplos logando tudo, para isso vamos criar o filtro log_tudo que ativa o log para qualquer evento:

Depois de criar o filtro, associe-o a todos os usuários usando o wildcard %:

Note que no primeiro comando do filter, utilizamos o nome log_tudo para o filtro e esse valor para associá-lo ao usuário.

Realizando um select qualquer, temos a seguinte saída:

Antes do exemplo 2, vamos limpar esse filtro criado no exemplo 1:

Exemplo 2: logar somente comandos SELECT

Para o objetivo de logar os SELECTS, podemos usar o seguinte filtro no campo query_data.sql_command com valor "select", e podemos utilizar o exemplo acima pra criar o filtro que gostaríamos de receber no audit:

Para criar o filtro acima, retirei os nomes das classes e dos eventos do output exibido anteriormente. Abaixo, vou deixar mais claro de qual local:

Agora que temos o filtro criado, associe aos usuários novamente:

Teste rápido:

Checando as informações contidas no arquivo audit.log com este novo filtro:

Como é possível ver acima, com o segundo filtro, apenas as informações dos SELECTs e da Connection foram escritas no arquivo de audit; as demais foram filtradas com base no JSON criado.

Exemplo 3: Logar comandos de DDL

Novamente utilizando o exemplo 1 onde loga tudo no audit, vamos utilizá-lo para criar um log de comandos de DDL:

Com as informações acima, podemos agora criar um filtro que apenas cheque os campos esperados:

Após utilizamos os valores filtrados,

Com base nos outputs recebidos anteriormente, conseguimos criar o filtro, correlacionando os valores que queremos salvar com cada key. Por exemplo, para os valores de sql_command podemos utilizar a seguinte lista:
https://github.com/percona/percona-server/blob/Percona-Server-8.4.8-8/sql/command_mapping.cc#L51

E adicionar mais fields no filtro acima. Exemplo:

Recomendação: verifique todas as informações que você gostaria de ter após a execução de um audit completo. Assim, você terá os campos e os valores de forma mais prática para futuros filtros.
É possível criar diferentes regras para serem aplicadas a diferentes usuários, o que proporciona maior flexibilidade para salvar apenas o que é necessário, sem ocupar uma grande quantidade de espaço em disco.

Conclusão

Com o Audit Log Plugin se tornando deprecated, o Audit Log Filter Component será o melhor caminho para auditoria no Percona Server e no MySQL, visto que ambos seguem o mesmo padrão.
Como vimos, o Audit Log Filter Component permite migrar do modelo de logar tudo para um modelo muito mais direcionado, criando filtros personalizados por usuário ou por comando. Com isso, é possível ajustar a auditoria para registrar apenas os eventos realmente importantes, reduzindo o volume de logs e tornando a análise de auditoria muito mais objetiva e eficiente.

Referências
COMPARTILHE:
Picture of Roberto de Bem

Roberto de Bem

Roberto de Bem é Database Engineer na Percona e entusiasta de Open Source. Sempre que possível, contribuo com pull requests, principalmente para projetos e produtos da Percona. Formado em Sistemas de Informação, trabalha com bancos de dados desde 2017, com foco em MySQL. Oracle Certified Professional – MySQL 8.0. Oracle ACE Apprentice.
Picture of Roberto de Bem

Roberto de Bem

Roberto de Bem é Database Engineer na Percona e entusiasta de Open Source. Sempre que possível, contribuo com pull requests, principalmente para projetos e produtos da Percona. Formado em Sistemas de Informação, trabalha com bancos de dados desde 2017, com foco em MySQL. Oracle Certified Professional – MySQL 8.0. Oracle ACE Apprentice.

PARTICIPE

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

POSTADO POR
Picture of Roberto de Bem

Roberto de Bem

Roberto de Bem é Database Engineer na Percona e entusiasta de Open Source. Sempre que possível, contribuo com pull requests, principalmente para projetos e produtos da Percona. Formado em Sistemas de Informação, trabalha com bancos de dados desde 2017, com foco em MySQL. Oracle Certified Professional – MySQL 8.0. Oracle ACE Apprentice.
PARCEIROS