Alterar Senha de Usuário MySQL: Comandos ALTER USER (MySQL 5.7 / 8.0) + Recuperação de Root

目次

1. [Quick Answer] Lista de Comandos para Alteração de Senha de Usuário MySQL (Solução Mais Rápida)

O comando básico para alterar a senha de um usuário no MySQL é ALTER USER.
Este método é recomendado no MySQL 5.7 e posteriores, e é usado da mesma forma no MySQL 8.0.

1.1 Sintaxe básica (mais usada)

ALTER USER 'username'@'localhost' IDENTIFIED BY 'newpassword';
  • username : o nome de usuário alvo a ser atualizado
  • localhost : o host cliente (uma conta MySQL é identificada por “nome de usuário + host”)
  • newpassword : a nova senha

Após a execução, a alteração tem efeito imediato. Na maioria dos casos, FLUSH PRIVILEGES; não é necessário (ALTER USER atualiza automaticamente as tabelas de privilégios).

Armadilhas comuns

  • Mesmo com o mesmo nome de usuário, @'localhost' e @'%' são tratados como contas diferentes
  • Símbolos nas senhas devem ser colocados entre aspas simples

1.2 Alterando um usuário de acesso remoto (%)

ALTER USER 'username'@'%' IDENTIFIED BY 'newpassword';

% significa “qualquer host”.
É comumente usado em ambientes de nuvem ou para usuários que podem se conectar de fora.

Observações

  • É mais seguro verificar antecipadamente com SELECT User, Host FROM mysql.user;
  • Se você alterar a senha para o Host errado, não conseguirá fazer login

1.3 Alterar senha especificando o plugin de autenticação (importante no 8.0)

No MySQL 8.0, o plugin de autenticação padrão é caching_sha2_password.
Se você não conseguir conectar com clientes mais antigos, defina explicitamente o plugin.

ALTER USER 'username'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'newpassword';
  • mysql_native_password : método legado (prioriza compatibilidade)
  • caching_sha2_password : padrão do MySQL 8.0 (recomendado)

Erros típicos

  • PHP ou clientes mais antigos podem não suportar o plugin padrão do MySQL 8.0
  • Decidir “não consigo fazer login” sem verificar o plugin de autenticação

1.4 Se você receber um erro de privilégio

Exemplo de erro:

ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_USER privilege(s)

Neste caso, o usuário atualmente conectado não tem permissão para fazer a alteração.

Verifique:

SHOW GRANTS FOR CURRENT_USER();

Execute o comando como root ou como um usuário com privilégios suficientes.

1.5 Como verificar após a alteração

SELECT User, Host, plugin FROM mysql.user WHERE User='username';
  • Verifique o plugin de autenticação através da coluna plugin
  • A verificação mais confiável é realmente fazer login e confirmar a conectividade

1.6 O que acontece com sessões existentes

Após alterar uma senha:

  • Novas conexões devem usar a nova senha
  • Sessões existentes podem ser encerradas imediatamente, dependendo do ambiente
  • Em produção, recomenda‑se fazer alterações fora do horário comercial

2. Conceitos Básicos de Usuários e Hosts no MySQL (Prevenir Problemas “Travados” Comuns)

No MySQL, um usuário não é identificado apenas por um “nome de usuário”. Em vez disso, ele é identificado pela combinação de “nome de usuário + host cliente (Host)”.
Se você não entender isso, pode se deparar com o problema clássico: “Mudei a senha, mas ainda não consigo fazer login.”

2.1 Um usuário é um par “user@host”

Exemplos:

  • 'appuser'@'localhost'
  • 'appuser'@'%'
  • 'appuser'@'192.168.1.%'

Todos são tratados como contas diferentes.
Portanto, mesmo que você altere a senha para localhost, isso não afeta a conta %.

Comando de verificação:

SELECT User, Host FROM mysql.user ORDER BY User, Host;

Armadilhas comuns

  • Não perceber que existem várias contas com o mesmo nome de usuário
  • Você alterou a senha para localhost, mas está realmente fazendo login via TCP (127.0.0.1)

2.2 localhost e 127.0.0.1 são tratados de forma diferente

No MySQL:

  • localhost → conexão por socket UNIX (conexão interna local)
  • 127.0.0.1 → conexão TCP/IP

Dependendo do ambiente, uma conta diferente pode ser correspondida.

Verifique:

mysql -u username -p -h 127.0.0.1

Se você não conseguir fazer login com o acima, a conta @'127.0.0.1' pode não existir.

2.3 Verificar o usuário autenticado atualmente

É importante entender “qual conta você está autenticado”.

SELECT CURRENT_USER();

Isso exibe o “user@host” que foi realmente autenticado.

SELECT USER(); mostra as informações da solicitação de conexão, portanto pode não coincidir.

2.4 Verificar privilégios (SHOW GRANTS)

Se você não puder alterar uma senha, privilégios insuficientes podem ser a causa.

SHOW GRANTS FOR 'username'@'host';

Ou para o usuário atualmente conectado:

SHOW GRANTS FOR CURRENT_USER();

Privilégios mínimos necessários

  • ALTER USER
  • Ou SYSTEM_USER (MySQL 8.0 e posteriores)

2.5 Padrões típicos de falha

  1. Você alterou a senha para o Host errado
  2. O plugin de autenticação difere (muito comum no 8.0)
  3. A conta de destino não existe inicialmente

Verifique se o usuário existe:

SELECT User, Host FROM mysql.user WHERE User='username';

Depois de entender este modelo, você pode evitar a maioria dos problemas relacionados à alteração de senha.

3. Procedimento recomendado: Alterar com segurança usando ALTER USER (Funciona para MySQL 8.0 / 5.7)

No MySQL 5.7 e posteriores, alterar senhas com ALTER USER é a abordagem padrão e recomendada.
Atualizações diretas como UPDATE mysql.user podem se comportar de forma diferente dependendo da versão e acarretar riscos de compatibilidade futura, portanto é melhor evitá-las.

3.1 Pré-verificações (Sempre confirmar antes de alterar)

Antes de alterar uma senha, confirme estes três itens.

① Confirmar o usuário e Host de destino

SELECT User, Host FROM mysql.user WHERE User='username';
  • Verifique se existem várias contas com o mesmo nome de usuário
  • Não confunda localhost com %

② Confirmar o plugin de autenticação atual (importante no 8.0)

SELECT User, Host, plugin
FROM mysql.user
WHERE User='username';
  • caching_sha2_password (padrão do MySQL 8.0)
  • mysql_native_password (plugin legado)

Algumas falhas de conexão são causadas pelo plugin de autenticação.

③ Confirmar o usuário autenticado atualmente

SELECT CURRENT_USER();

Para evitar erros de privilégio, execute os comandos como root ou como um usuário com privilégios adequados.

3.2 Executar ALTER USER (forma padrão)

ALTER USER 'username'@'localhost'
IDENTIFIED BY 'NewStrongPassword123!';

A alteração tem efeito imediato.
Na maioria dos casos, FLUSH PRIVILEGES; não é necessário.

Observações

  • Se a política de senha ( validate_password ) for violada, pode ocorrer ERROR 1819
  • Se a senha incluir caracteres especiais, sempre coloque-a entre aspas simples

3.3 Alterar especificando o plugin de autenticação (somente se necessário)

Se você estiver usando clientes mais antigos em um ambiente MySQL 8.0:

ALTER USER 'username'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'NewStrongPassword123!';

Casos em que você deve alterá-lo:

  • Não é possível conectar com clientes PHP antigos / MySQL antigos
  • Um ambiente que não suporta caching_sha2_password

Casos em que você NÃO deve alterá-lo:

  • Se você já pode conectar sem problemas em um ambiente moderno (o plugin padrão é mais seguro)

3.4 Verificação pós-alteração

① Verificar o plugin de autenticação

SELECT User, Host, plugin
FROM mysql.user
WHERE User='username';

② Verificar realmente fazendo login

mysql -u username -p

Sempre teste se você pode fazer login.

3.5 Impacto nas sessões existentes

Após alterar uma senha:

  • Novas conexões → devem usar a nova senha
  • Conexões existentes → podem permanecer dependendo do ambiente
  • Produção → pode ser necessário reiniciar as conexões da aplicação

Erros comuns

  • Não atualizar as credenciais de conexão da aplicação
  • Senhas antigas ainda permanecendo em arquivos de configuração

3.6 Dicas operacionais seguras para produção

  • Realize alterações fora do horário comercial
  • Verifique os arquivos de configuração da aplicação com antecedência
  • Execute o trabalho sem desconectar sua sessão SSH
  • Ao mudar o root, assegure que você tem um método de recuperação pronto

4. Diferenças entre MySQL 8.0 e 5.7

A maior causa de problemas ao mudar senhas do MySQL é a diferença nos métodos de autenticação entre MySQL 8.0 e 5.7.
Em particular, muitos casos de “Eu mudei, mas não consigo fazer login” são causados por diferenças no plugin de autenticação.

Diagram showing the difference between MySQL 5.7 mysql_native_password and MySQL 8.0 caching_sha2_password authentication methods

Diferença de autenticação entre MySQL 5.7 e MySQL 8.0

4.1 Diferenças no plugin de autenticação padrão

VersionDefault authentication plugin
MySQL 5.7mysql_native_password
MySQL 8.0caching_sha2_password

No MySQL 8.0, caching_sha2_password tornou‑se o padrão para maior segurança.
Entretanto, clientes mais antigos (versões antigas do PHP, conectores MySQL antigos, etc.) podem não suportá‑lo.

Como verificar:

SELECT User, Host, plugin
FROM mysql.user
WHERE User='username';

Problemas comuns

  • Clientes antigos não conseguem conectar a usuários criados no MySQL 8.0
  • Mesmo que ocorra um erro, você não percebe que a causa raiz é o plugin de autenticação

4.2 Como mudar o plugin de autenticação para compatibilidade

Somente quando for necessário conectar a partir de um ambiente mais antigo, altere da seguinte forma:

ALTER USER 'username'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'NewStrongPassword123!';

Depois de alterá‑lo, sempre execute um teste de conexão.

Observações

  • Do ponto de vista de segurança, caching_sha2_password é mais seguro
  • Não troque para o plugin legado desnecessariamente
  • Se possível, atualizar o lado do cliente é preferível

4.3 UPDATE direto não é recomendado

No MySQL 5.7 e versões anteriores, métodos como o seguinte eram usados:

UPDATE mysql.user
SET authentication_string=PASSWORD('newpassword')
WHERE User='username';
FLUSH PRIVILEGES;

Entretanto, esta abordagem é:

  • Altamente dependente da versão
  • Sujeita a mudanças de especificação no 8.0
  • Provavelmente será descontinuada no futuro

Regra geral: use ALTER USER

4.4 Diferenças de comportamento do plugin validate_password

No MySQL 5.7 e 8.0, recursos de política de senha (verificação de força) estão disponíveis por padrão.

Verifique:

SHOW VARIABLES LIKE 'validate_password%';

Se violar a política, você pode receber:

ERROR 1819 (HY000)

.

Como muitos ambientes 8.0 impõem linhas de base de segurança mais rígidas,
após atualizar do 5.7, você pode descobrir que alterações de senha não são mais aceitas devido a requisitos de política mais fortes.

4.5 Como verificar sua versão

Se você não tem certeza de qual versão está executando:

SELECT VERSION();

Se aplicar correções sem confirmar a versão, pode acabar usando o método errado

5. Recuperando uma senha root esquecida (Procedimento Focado em Segurança)

Se você esquecer a senha do usuário root do MySQL (administrador), não poderá fazer login normalmente.
Nesse caso, você deve desativar temporariamente as tabelas de privilégios e redefinir a senha. Contudo, esse procedimento traz riscos de segurança, portanto siga os passos cuidadosamente.

5.1 Confirme se você realmente precisa da senha root

Primeiro, verifique o seguinte:

  • Se você tem privilégios sudo ao nível do SO
  • Se a autenticação auth_socket está habilitada (comum em sistemas baseados em Ubuntu)

Exemplo de verificação:

SELECT User, Host, plugin
FROM mysql.user
WHERE User='root';

Se o plugin for auth_socket, você pode conseguir fazer login como usuário root do SO.

sudo mysql

Se isso funcionar, você só precisa redefinir a senha.

5.2 Fluxo de recuperação (procedimento geral)

① Parar o servidor MySQL

sudo systemctl stop mysql

② Iniciar com tabelas de privilégios desativadas

sudo mysqld_safe --skip-grant-tables &

--skip-grant-tables desativa a autenticação.
Nesse estado, qualquer pessoa pode conectar, portanto conclua o procedimento rapidamente.

③ Conectar ao MySQL

mysql -u root

Você pode conectar sem senha.

④ Redefinir a senha root (método recomendado)

ALTER USER 'root'@'localhost'
IDENTIFIED BY 'NewStrongPassword123!';

Importante

  • NÃO use diretamente UPDATE mysql.user
  • Use ALTER USER (para compatibilidade de versão)

⑤ Reativar as tabelas de concessão

FLUSH PRIVILEGES;

⑥ Reiniciar o MySQL em modo normal

sudo systemctl restart mysql

Em seguida, verifique o login normal:

mysql -u root -p

5.3 Erros comuns

  • Deixar --skip-grant-tables habilitado (risco grave de segurança)
  • Alterar acidentalmente o Host root
  • Alterar o plugin de autenticação incorretamente e bloquear o acesso

5.4 Notas para ambientes de produção

  • Sempre execute isso durante uma janela de manutenção em servidores públicos
  • Mantenha sua sessão SSH ativa enquanto trabalha
  • Crie um backup antecipadamente, se possível

A recuperação da senha root pode ser feita com segurança se executada cuidadosamente.

6. Erros Comuns e Soluções (Captura de Tráfego por Mensagem de Erro)

Vários erros típicos ocorrem ao alterar senhas do MySQL. A seguir, organizamos causas comuns e soluções por códigos de erro frequentemente pesquisados.

6.1 ERRO 1819 (A senha não atende aos requisitos da política)

Exemplo de erro:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

Causa

A senha falhou na validação de força imposta pelo plugin validate_password.

Verificar política atual

SHOW VARIABLES LIKE 'validate_password%';

Configurações importantes:

  • validate_password.length
  • validate_password.policy
  • validate_password.mixed_case_count
  • validate_password.number_count
  • validate_password.special_char_count

Solução ① (Recomendado): Use uma senha mais forte

  • Pelo menos 12 caracteres
  • Inclua letras maiúsculas, minúsculas, números e símbolos
  • Evite palavras de dicionário

Solução ② (Relaxar a política temporariamente)

SET GLOBAL validate_password.policy = LOW;

Após concluir sua tarefa, recomenda-se restaurar a configuração original.

Erros comuns

  • Deixar a política relaxada em produção
  • Não perceber que alterar essa configuração requer privilégios SUPER

6.2 ERRO 1227 (Privilégios insuficientes)

Exemplo de erro:

ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_USER privilege(s)

Causa

O usuário atual não possui o privilégio ALTER USER ou SYSTEM_USER.

Verificar privilégios

SHOW GRANTS FOR CURRENT_USER();

Solução

Execute o comando como root ou como um usuário com privilégios suficientes.

Se necessário:

GRANT ALTER USER ON *.* TO 'username'@'host';
FLUSH PRIVILEGES;

Nota

  • No MySQL 8.0, o privilégio SYSTEM_USER também pode ser necessário
  • Siga o princípio do menor privilégio em produção

6.3 Não é possível fazer login após alterar a senha

Principais causas

  1. Host incorreto
  2. Incompatibilidade do plugin de autenticação
  3. Incompatibilidade do cliente
  4. Configuração da aplicação não atualizada

① Verificar Host

SELECT User, Host FROM mysql.user WHERE User='username';

② Verificar plugin de autenticação

SELECT plugin FROM mysql.user WHERE User='username';

③ Alterar plugin de autenticação (se necessário)

ALTER USER 'username'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'NewStrongPassword123!';

④ Verificar configuração da aplicação

  • .env
  • config.php
  • String de conexão (DSN)

Erros comuns

  • Alterar o MySQL mas não atualizar a aplicação
  • Não reiniciar contêineres em ambientes Docker

6.4 Ainda é possível fazer login com a senha antiga após a alteração

Normalmente, alterações feitas com ALTER USER entram em vigor imediatamente.

Causas possíveis:

  • Você realmente alterou uma conta de Host diferente
  • A conexão está apontando para outro servidor (réplica)
  • Cache de sessão

Verifique:

SELECT CURRENT_USER();

É crítico confirmar com precisão tanto o servidor conectado quanto o usuário autenticado.

7. Operações de Segurança: Políticas de Senha e Melhores Práticas

Alterar uma senha não é uma tarefa única.
Nas operações do mundo real, você mantém a segurança combinando aplicação de força, design de privilégios e regras operacionais.

7.1 Usando o plugin validate_password

O MySQL fornece funcionalidade incorporada para impor a força da senha.

Verificar configurações atuais

SHOW VARIABLES LIKE 'validate_password%';

Principais parâmetros de configuração

  • validate_password.length (comprimento mínimo)
  • validate_password.policy (LOW / MEDIUM / STRONG)
  • validate_password.mixed_case_count
  • validate_password.number_count
  • validate_password.special_char_count

Exemplo de configuração (mínimo 12 caracteres, política MEDIUM)

SET GLOBAL validate_password.length = 12;
SET GLOBAL validate_password.policy = MEDIUM;

Nota

  • Alterações GLOBAL podem ser redefinidas após uma reinicialização
  • Para persistir as configurações, configure-as no arquivo de configuração ( my.cnf / my.ini )

7.2 Requisitos mínimos para senhas fortes

Padrões recomendados na prática:

  • Pelo menos 12 caracteres
  • Incluir maiúsculas, minúsculas, números e símbolos
  • Evitar palavras de dicionário
  • Não reutilizar em outros serviços

Exemplo:

X9v!pQ4z#Lm2

Exemplos a evitar

password123
mysql2025
companyname!

7.3 Mais importante que mudanças periódicas

Mais importante que “alterar a cada seis meses” é projetar sob a suposição de possível vazamento de credenciais.

① Separar usuários de aplicação

  • Não use root em aplicações
  • Crie usuários com o menor privilégio

Exemplo:

GRANT SELECT, INSERT, UPDATE ON dbname.* TO 'appuser'@'localhost';

② Minimizar privilégios (Princípio do Menor Privilégio)

Permita apenas as operações necessárias para limitar danos potenciais.

③ Usar auditoria e logs

Exemplo de verificação de log:

tail -f /var/log/mysql/mysql.log

O MySQL Enterprise também suporta plugins de auditoria.

7.4 Dicas operacionais para ambientes de produção

  • Teste em staging antes de fazer alterações em produção
  • Acompanhe o histórico de mudanças (Git ou documentação)
  • Sempre execute um teste de conexão após alterações
  • Mantenha sua sessão SSH ativa enquanto trabalha

7.5 Coisas que você nunca deve fazer

  • Use a conta root em aplicações
  • Codifique senhas diretamente no código fonte
  • Desative validate_password e deixe assim
  • Deixe o servidor em execução com --skip-grant-tables

Gerenciamento de senhas não é uma tarefa única, mas parte de um design operacional contínuo.

8. FAQ (Perguntas Frequentes)

8.1 Q. O que acontece com sessões ativas após mudar a senha?

A. Em princípio, novas conexões exigem a nova senha.
Para sessões existentes, elas podem ser terminadas imediatamente ou permanecer ativas, dependendo do ambiente e da configuração.

Na prática:

  • Realize alterações fora do horário comercial em produção
  • Reinicie a aplicação para atualizar as conexões

é recomendado.

8.2 Q. Mudei a senha mas ainda não consigo fazer login

As três causas mais comuns são:

  1. Host incorreto ( localhost vs % , etc.)
  2. Incompatibilidade de plugin de autenticação (muito comum no 8.0)
  3. Configuração da aplicação não atualizada

Verifique com:

SELECT User, Host, plugin
FROM mysql.user
WHERE User='username';

Preste atenção especial à coluna plugin.

8.3 Q. Posso permitir que apenas um usuário específico altere senhas?

Sim.

GRANT ALTER USER ON *.* TO 'username'@'host';
FLUSH PRIVILEGES;

No MySQL 8.0, o privilégio SYSTEM_USER também pode ser necessário.

SHOW GRANTS FOR 'username'@'host';

Use isso para verificar privilégios.

8.4 Q. O método é o mesmo no MariaDB?

Basicamente, ALTER USER está disponível, mas:

  • Plugins de autenticação
  • Comportamento da política de senha
  • Diferenças específicas de versão

podem diferir dependendo do ambiente.

Verifique com:

SELECT VERSION();

A edição Community do MySQL não fornece rastreamento de histórico de senhas integrado por padrão.

8.5 P. Posso verificar o histórico de alterações de senha?

Abordagens possíveis:

  • Ativar log de auditoria
  • Usar gerenciamento de log externo
  • Rastrear histórico na documentação operacional

Exemplo:

tail -f /var/log/mysql/mysql.log

8.6 P. Posso recuperar usuários não-root com –skip-grant-tables?

Sim, mas isso cria um estado altamente perigoso.
Sempre retorne ao modo normal imediatamente após concluir o procedimento.

9. Resumo

Alterar uma senha do MySQL pode parecer simples, mas sem entender o modelo user@host, plugins de autenticação e design de privilégios, pode facilmente levar a problemas.

Os pontos principais deste artigo são:

9.1 Use ALTER USER como o método padrão

ALTER USER 'username'@'localhost'
IDENTIFIED BY 'NewStrongPassword123!';
  • Método padrão no MySQL 5.7 e posterior
  • UPDATE mysql.user direto não é recomendado
  • FLUSH PRIVILEGES geralmente é desnecessário

9.2 Os usuários são gerenciados como “user@host”

  • localhost e % são contas diferentes
  • Múltiplas contas com o mesmo nome de usuário podem existir
  • Verifique com SELECT User, Host FROM mysql.user;

9.3 Preste atenção aos plugins de autenticação no 8.0

  • Padrão 8.0: caching_sha2_password
  • Compatibilidade legacy: mysql_native_password
  • Se não puder conectar, verifique a coluna plugin
    SELECT plugin FROM mysql.user WHERE User='username';
    

9.4 Seja cuidadoso ao recuperar a senha root

  • --skip-grant-tables é uma medida temporária apenas
  • Sempre retorne ao modo normal após terminar
  • Realize durante uma janela de manutenção em produção

9.5 A maioria dos erros tem causas claras

  • ERROR 1819 → Violação de política de senha
  • ERROR 1227 → Privilégios insuficientes
  • Não pode fazer login → Incompatibilidade de host ou plugin de autenticação

9.6 Na prática, o menor privilégio e o design operacional importam mais

  • Não use root em aplicações
  • Crie usuários dedicados
  • Imponga políticas de senhas fortes
  • Sempre teste conexões após alterações

O gerenciamento de senhas do MySQL não é apenas sobre alterar um valor—é a base das operações seguras de banco de dados.
Escolha o método apropriado para seu ambiente e execute-o com cuidado.