Plug-in de Auditoria do MySQL Enterprise

O plug-in do MySQL Enterprise Audit permite que o MySQL Server produza um arquivo de log contendo um registro de auditoria da atividade do servidor. O conteúdo do log inclui quando os clientes se conectam e se desconectam, e quais ações eles executam enquanto conectados, como quais bancos de dados e tabelas eles acessam.

Você pode adicionar estatísticas para o tempo e o tamanho de cada consulta para detectar discrepâncias. Por padrão, os logs do plug-in de auditoria são desativados, e você precisa definir filtros de plug-in de auditoria para ativar eventos auditáveis de log para todos ou usuários específicos.

Tópicos Relacionados

Concedendo Privilégios de Administração de Auditoria

Por padrão, o usuário administrador HeatWave definido ao criar o sistema de banco de dados tem o privilégio AUDIT_ADMIN. Você pode conceder privilégios de administração de auditoria a mais usuários.

Usando um Cliente de Linha de Comando

Use um cliente de linha de comando, como Cliente MySQL ou Shell MySQL, para conceder privilégios de administração de auditoria a mais usuários.

  1. Conecte-se ao sistema de banco de dados usando o cliente de linha de comando escolhido.
  2. Execute o seguinte comando para conceder ao usuário, User001, o privilégio de administração de auditoria:
    GRANT AUDIT_ADMIN ON *.* TO <User001>;

Definindo Filtros de Plug-in de Auditoria

Você precisa definir filtros de plug-in de auditoria para ativar o registro em log de eventos auditáveis para todos ou usuários específicos. Por padrão, os logs do plug-in de auditoria são desativados.

Usando um Cliente de Linha de Comando

Use um cliente de linha de comando, como Cliente MySQL ou Shell MySQL, para definir filtros de plug-in de auditoria para ativar o registro em log de eventos auditáveis para todos ou usuários específicos.

Esta tarefa requer o seguinte:
  • MySQL versão 8.0.34-u2 ou mais recente.
  1. Conecte-se ao sistema de banco de dados usando o cliente de linha de comando escolhido.
  2. Defina filtros de auditoria para ativar o registro em log. Consulte Gravando Definições de Filtro de Log de Auditoria.
    1. Para auditar todos os eventos, execute o seguinte comando:
      SELECT audit_log_filter_set_filter('log_all', '{ "filter": { "log": true } }');
    2. Para auditar somente eventos de conexão, execute o seguinte comando:
      SELECT audit_log_filter_set_filter('log_conn_events','{ "filter": { "class": { "name": "connection" } } }');
    3. Para exibir filtros de auditoria, execute o seguinte comando:
      SELECT * FROM mysql_audit.audit_log_filter;
  3. Atribua os filtros criados na Etapa 2 aos usuários. Você pode atribuir os filtros de auditoria a todos os usuários ou a um usuário específico.
    1. Para designar o filtro de auditoria padrão para registrar todos os eventos de qualquer conta, use o caractere curinga %:
      SELECT audit_log_filter_set_user('%', 'log_all');
    2. Para designar o filtro de auditoria padrão para registrar todos os eventos de conexão de qualquer conta, use o caractere curinga %:
      SELECT audit_log_filter_set_user('%', 'log_conn_events');
    3. Para designar o filtro de auditoria padrão para registrar todos os eventos de um usuário específico, como user_dba, execute o seguinte comando:
      SELECT audit_log_filter_set_user('user_dba@%', 'log_all');
    4. Para exibir as regras atribuídas, execute o seguinte comando:
      SELECT * FROM mysql_audit.audit_log_user;
    5. Para cancelar a designação das regras do usuário, user_dba, execute o seguinte comando:
      SELECT audit_log_filter_remove_user('user_dba@%');
  4. (Opcional) Você pode inserir seus próprios dados de evento com o componente, audit_api_message_emit. Consulte Função de Mensagem de Auditoria. Por exemplo:
    SELECT audit_api_message_emit_udf('component_text', 'producer_text', 'message_text', 'key1', 'value1', 'key2', 123, 'key3', NULL) AS 'Message';

Acessando e Analisando Dados de Auditoria

Use os dados de auditoria para monitorar o sistema de banco de dados.

Usando um Cliente de Linha de Comando

Use um cliente de linha de comando, como MySQL Client ou MySQL Shell, para acessar e analisar dados de auditoria.

  1. Conecte-se ao sistema de banco de dados usando o cliente de linha de comando escolhido.
  2. Para exibir quaisquer novos logs desde a última verificação, execute o comando a seguir. Isso garante que você esteja sempre atualizado com os logs de auditoria mais recentes sem revisitar logs mais antigos.
    SELECT audit_log_read(audit_log_read_bookmark());
  3. Para extrair logs de auditoria começando de um timestamp específico, forneça parâmetros adicionais na função audit_log_read():
    SELECT audit_log_read('{ "start": { "timestamp": "2023-08-24 12:30:00" }, "max_array_length": 500 }');
  4. Para exibir os dados de auditoria em um formato de leitura mais fácil, use as funções JSON_PRETTY() e CONVERT():
    SELECT JSON_PRETTY(CONVERT(audit_log_read( ... ) USING UTF8MB4));
  5. Para transformar dados em formato tabular, use as funções JSON MySQL. Por exemplo, você pode transformar um subconjunto dos pares de nome/valor JSON em um formato de tabela estruturada, facilitando a interação e a análise de dados:
    SELECT @@server_uuid as server_uuid, ts, class, event, login_ip,login_user,connection_id,
     status,connection_type,_client_name,_client_version,
     command,sql_command,command_status
    FROM
    JSON_TABLE
    (
      AUDIT_LOG_READ( '{ "start": {\"timestamp\": \"2023-08-16 15:33:37\"}, \"max_array_length\": 10 }' ), 
      '$[*]'
      COLUMNS
      ( 
        ts TIMESTAMP PATH '$.timestamp',
        class VARCHAR(20) PATH '$.class',
        event VARCHAR(80) PATH '$.event',      
        login_ip VARCHAR(200) PATH '$.login.ip',
        login_user VARCHAR(200) PATH '$.login.user',
        connection_id VARCHAR(80) PATH '$.connection_id',
        status INT PATH '$.connection_data.status',
        connection_type VARCHAR(40) PATH '$.connection_data.connection_type',
        _client_name VARCHAR(80) PATH '$.connection_data.connection_attributes._client_name',
        _client_version VARCHAR(80) PATH '$.connection_data.connection_attributes._client_version',
        command VARCHAR(40) PATH '$.general_data.command',
        sql_command VARCHAR(40) PATH '$.general_data.sql_command',
        command_status VARCHAR(40) PATH '$.general_data.status'
       )) as audit_log;
  6. Para refinar ainda mais a extração de dados, use as cláusulas WHERE nas instruções SQL. Por exemplo, WHERE connection_type <> 'SSL'.