DBAtlas · Atlas de operações de banco de dados

Hardening de segurança do MySQL (auditoria de estado, rede, TLS, autenticação, privilégios, audit, criptografia)

MySQLNível: IntermediárioDuração: 5 min (auditoria) – 3 horas (hardening completo)

Não é um guia de instalação: encontra e fecha as brechas de um servidor MySQL 8.4 / 8.0 em execução. Primeiro a Auditoria de estado, somente leitura, lista as brechas por ordem de gravidade e indica para qual cartão cada achado leva; depois você fecha as áreas uma a uma ou todas em sequência: bind_address, firewall e restrição de host das contas; TLS, require_secure_transport e VERIFY_IDENTITY no cliente; caching_sha2_password, política de senhas, root remoto e contas anônimas; roles e conta de aplicação sem DDL; audit; InnoDB tablespace encryption (keyring component); backup criptografado; sistema operacional; acompanhamento de versões. O audit não existe no Community: é necessário o MySQL Enterprise (assinatura paga) ou o Percona Server (gratuito); o TDE também existe no Community. No final a auditoria é executada de novo.

Topologia: Um servidor MySQL + servidor de aplicação (verificação no cliente); replica/InnoDB Cluster nas notas

Cenários

  • Auditoria de estado: quais são minhas brechas? (somente leitura) — A primeira varredura a executar: contas anônimas/sem senha/root remoto, acesso de qualquer lugar (%), plugin de autenticação fraco, privilégios globais, TLS, audit, criptografia, permissões de arquivos e firewall; não altera nada.
  • Hardening completo (tudo em sequência) — Servidor recém-instalado ou nunca endurecido: todas as áreas são aplicadas em ordem segura; o MySQL é reiniciado algumas vezes (é necessária janela de manutenção).
  • Rede e conexão: quem pode se conectar de onde? (bind_address, firewall, restrição de host) — O MySQL escuta em todas as interfaces, as contas têm host '%', a porta está aberta para todos. Mudar o bind_address exige reinicialização.
  • Criptografar a conexão (TLS, require_secure_transport, VERIFY_IDENTITY) — Está em uso o certificado autoassinado gerado automaticamente, conexões sem criptografia são aceitas ou os clientes não verificam o certificado. Sem interrupção com ALTER INSTANCE RELOAD TLS.
  • Autenticação e senha (caching_sha2, política de senhas, root) — Contas mysql_native_password, sem política de senhas, root remoto, contas anônimas e banco de teste. Sem interrupção.
  • Privilégio mínimo: roles e conta de aplicação sem DDL — Privilégios CREATE/ALTER/DROP ou . na conta da aplicação, contas com FILE/SUPER; roles de leitura/escrita/DDL e relatório de privilégios. Sem interrupção.
  • Audit: quem fez o quê? — O auditor pede registro de sessões e consultas. O MySQL Community não tem audit embutido: Enterprise Audit, Audit Log Filter do Percona Server ou opções limitadas para o Community. Licença: o Enterprise Audit vem somente com a assinatura MySQL Enterprise; o Audit Log Filter do Percona é gratuito.
  • Criptografar os dados em disco (InnoDB tablespace encryption, keyring) — Criptografia de tabelas, redo, undo e binlog contra roubo do disco ou de uma cópia de backup; uma reinicialização para instalar o keyring component e tempo de ALTER em tabelas grandes. Também é sem licença no Community; os keyrings criptografados/KMS são Enterprise.
  • Segurança dos backups (backup criptografado, login-path, permissões) — Backups sem criptografia ou em diretório legível por todos, senha em texto puro no script; mysqldump + GPG ou XtraBackup --encrypt, conta de backup e login-path.
  • Lado do sistema operacional (conta de serviço, permissões, core dump, SELinux) — Diretório de dados ou arquivos de certificado acessíveis a outros, secure_file_priv vazio, local_infile ativado, SELinux desativado. Algumas configurações valem após a reinicialização.
  • Patch e versão: estou em uma versão suportada? — Versão, fim do suporte (o 8.0 terminou em abril de 2026) e atualizações pendentes; para aplicar, leva ao guia de upgrade. Somente leitura.

Antes de começar

  • O MySQL … está em execução e, no servidor, o comando mysql entra como root sem senha (root@localhost com auth_socket ou login-path client via mysql_config_editor). Se a instalação foi feita com o guia de instalação do MySQL, isso já está pronto. Os SQLs dos passos rodam como root via mysql -t.
  • Há duas sessões SSH separadas abertas no servidor; em uma delas o cliente mysql fica aberto. Depois de mudanças no host das contas, no require_secure_transport e no firewall, teste uma nova conexão em outra sessão; não feche as sessões antigas até ver o sucesso. O login de root@localhost via socket não muda em nada neste guia: continua sempre como caminho de volta.
  • Janela de manutenção: nas áreas escolhidas o MySQL será reiniciado (bind_address, keyring component, plugin de audit, limite de core dump). Em ambiente com replicas, aplique primeiro nas replicas.
  • Lista de todas as aplicações que se conectam ao MySQL (IPs dos servidores, contas, versões dos drivers). O passo de auditoria mostra as conexões atuais; um cliente fora da lista não conseguirá se conectar após a restrição.
  • Existe um backup atual com restauração testada (lógico ou XtraBackup). O passo de criptografia (TDE) torna os dados ilegíveis se o arquivo de keyring for perdido: faça o backup ANTES do keyring.

Fases do guia

  • Auditoria de estado (somente leitura) — Listar os achados dentro do banco de dados · Auditar o lado do sistema operacional
  • Antes de começar: ponto de retorno — Copiar as configurações, contas e privilégios atuais · Habilitar o diretório de configuração adicional
  • Privilégios — 1. Diagnóstico — Mostrar os privilégios das contas
  • Privilégios — 3. Aplicação — Criar as roles e conceder privilégios · Criar as contas e vinculá-las às roles · Remover os privilégios diretos da conta da aplicação · Relatório de privilégios
  • Privilégios — 4. Verificação — Verificar que não há DDL nos privilégios efetivos · Tentativa de DDL a partir do servidor de aplicação
  • Privilégios — 5. Depois — Manter a conta de migration bloqueada fora de uso
  • Autenticação — 1. Diagnóstico — Mostrar os plugins de autenticação, as configurações de senha e as contas padrão
  • Autenticação — 2. Rede de segurança — Verificar a compatibilidade dos drivers
  • Autenticação — 3. Aplicação — Remover contas anônimas, root remoto e o banco test · Configurar a política de senhas (validate_password, histórico) · Migrar as contas mysql_native_password para caching_sha2_password · Criar a conta pessoal de DBA
  • Autenticação — 4. Verificação — Verificar o estado das contas · Tentar o login de root a partir do servidor de aplicação
  • TLS — 1. Diagnóstico — Mostrar as configurações TLS atuais e os clientes sem criptografia
  • TLS — 3. Aplicação — Criar a CA de teste e o certificado do servidor · Criar a chave e a solicitação de assinatura (CSR) · Instalar o certificado assinado · Verificar o certificado e a chave · Aplicar o rótulo SELinux · Passar o servidor para o novo certificado (sem interrupção) …
  • TLS — 4. Verificação — Verificar que a conexão sem criptografia é recusada
  • TLS — 5. Depois: renovação do certificado — Procedimento de renovação do certificado
  • Rede — 1. Diagnóstico: quem se conecta de onde? — Mostrar o endereço de escuta, os hosts das contas e os clientes ativos
  • Rede — 3. Aplicação — Restringir as contas com host '%' à rede da aplicação · Restringir o endereço de escuta (vale após a reinicialização) · Abrir a porta no firewall somente para as redes permitidas · Reiniciar o MySQL para o endereço de escuta
  • Rede — 4. Verificação — Testar a conexão a partir do servidor de aplicação (nova sessão)
  • Audit — 1. Diagnóstico — Mostrar os plugins de audit e as configurações de log
  • Audit — 3. Aplicação — Community: registrar logins com falha e o texto das consultas DML · Instalar o plugin Enterprise Audit · Definir os filtros do Enterprise Audit · Instalar o componente Percona Audit Log Filter · Definir os filtros de audit do Percona · Encaminhar o log de audit para o servidor central (rsyslog imfile) …
  • Audit — 4. Verificação — Fazer uma mudança e ver o rastro
  • Backup — 1. Diagnóstico — Mostrar o estado de criptografia dos backups e os arquivos de senha
  • Backup — 3. Aplicação — Criar a conta de backup com privilégio mínimo · Gravar a senha no login-path · Importar a chave pública GPG · Script de backup criptografado · Script de backup criptografado com XtraBackup · Arquivo de chave, diretório de backup e teste manual …
  • Backup — 4. Verificação — Testar se o backup criptografado pode ser aberto
  • Sistema operacional — 1. Diagnóstico — Conta de serviço, permissões, privilégios de arquivo e SELinux
  • Sistema operacional — 3. Aplicação — Restringir importação/exportação de arquivos · Corrigir as permissões do diretório de dados e dos arquivos de chave · Desativar o core dump · Recarregar o systemd e reiniciar o MySQL · Impedir que senhas caiam no histórico de comandos · Manter o SELinux em Enforcing
  • Sistema operacional — 4. Verificação — Verificar as mudanças
  • Criptografia — 1. Diagnóstico — Mostrar o estado do keyring e da criptografia
  • Criptografia — 2. Rede de segurança — Backup completo antes da criptografia
  • Criptografia — 3. Aplicação — Gravar o manifest do keyring component · Preparar o diretório e a configuração do keyring · Reiniciar para carregar o keyring · Ativar a criptografia de redo, undo, binlog e das novas tabelas · Criptografar as tabelas do banco da aplicação · Fazer backup do arquivo de keyring
  • Criptografia — 4. Verificação — Verificar a criptografia e o keyring
Abrir o plano passo a passo para o seu ambiente →