Recuperar Acesso ao WordPress: Reset de Password Admin via phpMyAdmin

WordPress · phpMyAdmin · MySQL · Segurança · Recuperação | ✎ Duarte Spínola | 10 de Julho de 2026

Perder o acesso ao painel administrativo do WordPress é um problema comum — esquecimento da password, conta de administrador comprometida, plugin de segurança que bloqueou o acesso, ou actualização que corrompeu a base de dados. Quando o formulário “Esqueceu-se da password?” não funciona (email não chega, servidor SMTP indisponível, ou a conta de admin foi apagada), o reset directo na base de dados via phpMyAdmin é a solução. Este guia cobre cinco métodos de recuperação, desde o mais simples ao mais avançado, todos testados em WordPress 6.5+ com MySQL/MariaDB.

Conteúdos

1. Cenários em que se Perde o Acesso ao wp-admin

Cenário Sintoma Método recomendado
Password esquecida, email não chega Formulário “Esqueceu-se?” não envia email Método 1 ou 2 (reset directo na BD)
Conta admin apagada ou despromovida Login funciona mas sem acesso ao wp-admin Método 3 (criar nova conta admin via SQL)
Plugin de segurança bloqueou IP/login “Access denied” ou redirect após login Método 5 + desactivar plugin via BD
Site hackeado, password alterada Credenciais correctas mas não autenticam Método 1 + auditoria de segurança
Acesso SSH/CLI disponível Sem phpMyAdmin mas com terminal Método 4 (WP-CLI)
Sem phpMyAdmin nem CLI Apenas acesso FTP/SFTP Método 5 (functions.php)

2. Pré-requisitos e Acesso ao phpMyAdmin

Antes de começar, precisa de:

  • Acesso ao painel de controlo do hosting (cPanel, Plesk, DirectAdmin) onde o phpMyAdmin está disponível, ou acesso SSH com cliente MySQL (mysql command-line)
  • Nome da base de dados do WordPress — pode ser encontrado em wp-config.php na raiz da instalação
  • Prefixo das tabelas — por defeito é wp_, mas pode ser diferente (ex: wp_kbase_)

Encontrar a base de dados no wp-config.php

# Aceder via FTP/SFTP ao ficheiro wp-config.php na raiz do WordPress
# Procurar estas linhas:

/** Nome da base de dados do WordPress */
define('DB_NAME', 'kbase_wp');

/** Utilizador da base de dados MySQL */
define('DB_USER', 'kbase_user');

/** Password da base de dados MySQL */
define('DB_PASSWORD', 'password_aqui');

/** Prefixo das tabelas */
$table_prefix = 'wp_';

Abrir phpMyAdmin

No cPanel: Databases → phpMyAdmin. No Plesk: Databases → phpMyAdmin. Selecionar a base de dados do WordPress na coluna esquerda. Deve ver as tabelas: wp_users, wp_usermeta, wp_posts, etc.

FAÇA BACKUP DA BASE DE DADOS ANTES DE ALTERAR QUALQUER COISA. No phpMyAdmin: selecionar a BD → Export → Quick → Go. Guarda o ficheiro .sql. Se algo correr mal, pode restaurar com Import.

3. Método 1 — Reset de Password via phpMyAdmin (MD5)

O método mais rápido. O WordPress armazena passwords na tabela wp_users, no campo user_pass. O WordPress usa o algoritmo PHP password_hash() (bcrypt/phpass), mas aceita MD5 para reset — após o primeiro login, o WordPress converte automaticamente o hash MD5 para o formato moderno.

Passo a passo

1. No phpMyAdmin, seleccionar a base de dados do WordPress na coluna esquerda.

2. Clicar na tabela wp_users (ou o prefixo correcto, ex: wp_kbase_users).

3. Clicar em Browse (ou “Procurar”) para ver os utilizadores.

4. Encontrar o utilizador admin — procurar na coluna user_login o nome de utilizador (ex: admin).

5. Clicar em Edit (lápis) nessa linha.

6. No campo user_pass, seleccionar a função MD5 no dropdown ao lado.

7. Escrever a nova password no campo de valor.

# No campo user_pass:
# Função: MD5 (seleccionar no dropdown)
# Valor: NovaPassword2026!

# Clicar em "Go" (Executar)

8. Clicar em Go (Executar). A password é actualizada.

9. Fazer login em https://oseusite.pt/wp-admin com a nova password.

Como funciona: O WordPress detecta que o hash em MD5 não corresponde ao formato phpass moderno. Após o primeiro login bem-sucedido com a password MD5, o WordPress re-hashea automaticamente para bcrypt/phpass. O utilizador não precisa de fazer nada — a conversão é transparente.

Via SQL directo (sem interface phpMyAdmin)

-- Gerar hash MD5 da nova password
-- Substitua 'NovaPassword2026!' pela password desejada
UPDATE wp_users 
SET user_pass = MD5('NovaPassword2026!') 
WHERE user_login = 'admin';

-- Para verificar:
SELECT ID, user_login, user_email FROM wp_users WHERE user_login = 'admin';

4. Método 2 — Reset de Password via phpMyAdmin (PHP password_hash)

Se preferir gerar o hash no formato moderno directamente (sem depender da conversão automática de MD5), pode criar o hash com PHP e inseri-lo na base de dados.

Gerar hash com PHP

# Via terminal (se tiver PHP instalado)
php -r "echo password_hash('NovaPassword2026!', PASSWORD_DEFAULT);"

# Output (exemplo — o hash muda a cada execução):
# $P$BVj3KL8s7Nn8xN3j9L2k7R5sN8xN3j

# Ou criar um ficheiro temporário PHP:
# <?php
# require_once('/caminho/para/wordpress/wp-includes/class-phpass.php');
# $wp_hasher = new PasswordHash(8, true);
# echo $wp_hasher->HashPassword('NovaPassword2026!');
# ?>

Inserir no phpMyAdmin

-- Substituir pelo hash gerado
UPDATE wp_users 
SET user_pass = '$P$BVj3KL8s7Nn8xN3j9L2k7R5sN8xN3j' 
WHERE user_login = 'admin';

Documentação: WordPress.org — wp_hash_password(), PHP.net — password_hash().

5. Método 3 — Criar Nova Conta de Administrador via SQL

Se a conta de administrador foi apagada, despromovida, ou comprometida e não pode ser recuperada, criar uma nova conta admin directamente na base de dados. São necessários dois comandos SQL — um para wp_users e outro para wp_usermeta.

Passo a passo via SQL

-- PASSO 1: Inserir novo utilizador na tabela wp_users
-- Substituir os valores conforme necessário
INSERT INTO wp_users 
(user_login, user_pass, user_nicename, user_email, user_registered, user_status, display_name) 
VALUES 
('admin_novo', MD5('NovaPassword2026!'), 'Admin Novo', '[email protected]', NOW(), 0, 'Admin Novo');

-- PASSO 2: Obter o ID do utilizador criado
SELECT ID FROM wp_users WHERE user_login = 'admin_novo';
-- Anotar o ID (ex: 15)

-- PASSO 3: Atribuir a role de administrador
-- Substituir 15 pelo ID obtido no passo anterior
INSERT INTO wp_usermeta 
(user_id, meta_key, meta_value) 
VALUES 
(15, 'wp_capabilities', 'a:1:{s:13:"administrator";b:1;}');

-- PASSO 4: Atribuir nível de utilizador
INSERT INTO wp_usermeta 
(user_id, meta_key, meta_value) 
VALUES 
(15, 'wp_user_level', '10');

Atenção ao prefixo das tabelas. Se o seu WordPress usa um prefixo diferente de wp_ (ex: wp_kbase_), substitua wp_users, wp_usermeta e wp_capabilities pelo prefixo correcto. O meta_key wp_capabilities também usa o prefixo — se o prefixo for wp_kbase_, o meta_key será wp_kbase_capabilities.

Versão simplificada (para copy-paste)

-- Tudo num só comando (substituir PREFIX pelo prefixo real)
-- Executar no phpMyAdmin > SQL
SET @prefix = 'wp_';
SET @user_id = (SELECT MAX(ID) + 1 FROM wp_users);
SET @pass = MD5('NovaPassword2026!');

INSERT INTO wp_users (ID, user_login, user_pass, user_nicename, user_email, user_registered, user_status, display_name) 
VALUES (@user_id, 'admin_novo', @pass, 'Admin Novo', '[email protected]', NOW(), 0, 'Admin Novo');

INSERT INTO wp_usermeta (user_id, meta_key, meta_value) 
VALUES (@user_id, CONCAT(@prefix, 'capabilities'), 'a:1:{s:13:"administrator";b:1;}');

INSERT INTO wp_usermeta (user_id, meta_key, meta_value) 
VALUES (@user_id, CONCAT(@prefix, 'user_level'), '10');

6. Método 4 — Reset via WP-CLI

Se tem acesso SSH ao servidor e o WP-CLI está instalado, é o método mais limpo e seguro — não precisa de aceder à base de dados directamente.

# Listar utilizadores
wp user list

# Output:
# ID  user_login    display_name    user_email     roles
# 1   admin         Admin           [email protected] administrator
# 2   editor        Editor          [email protected]    editor

# Actualizar password de um utilizador
wp user update 1 --user_pass='NovaPassword2026!'

# Criar novo utilizador admin
wp user create admin_novo [email protected] --role=administrator --user_pass='NovaPassword2026!'

# Output:
# Success: Created user 15.
# Username: admin_novo
# Password: NovaPassword2026!

# Promover utilizador existente a admin
wp user update 2 --role=administrator

Documentação: WordPress.org — REST API Users reference.

7. Método 5 — Reset via functions.php do Tema

Se não tem phpMyAdmin nem WP-CLI, mas tem acesso FTP/SFTP, pode adicionar código temporário ao ficheiro functions.php do tema para criar um utilizador admin. Este método deve ser removido imediatamente após uso.

Passo a passo

# 1. Aceder via FTP/SFTP a:
/wp-content/themes/oseutema/functions.php

# 2. Adicionar no final do ficheiro:

// --- REMOVER DEPOIS DE USAR ---
function kbase_create_temp_admin() {
    if (!username_exists('admin_temp')) {
        $user_id = wp_create_user(
            'admin_temp', 
            'TempPass2026!', 
            '[email protected]'
        );
        $user = new WP_User($user_id);
        $user->set_role('administrator');
    }
}
add_action('init', 'kbase_create_temp_admin');
// --- FIM ---
# 3. Guardar o ficheiro
# 4. Visitar o site (qualquer página) para activar o hook
# 5. Fazer login em /wp-admin com:
#    Utilizador: admin_temp
#    Password: TempPass2026!
# 6. IMEDIATAMENTE: remover o código do functions.php
# 7. Após recuperar acesso: apagar a conta admin_temp

CRÍTICO: Remova este código do functions.php IMEDIATAMENTE após recuperar o acesso. Deixar o código no ficheiro permite que qualquer pessoa que visite o site crie uma conta de administrador. Nunca deixe este snippet em produção.

8. Verificar e Reparar Permissões e Funções de Utilizador

Após recuperar o acesso, pode descobrir que o utilizador não tem o papel (role) correcto, ou que as capacidades (capabilities) estão corrompidas. Verificar na base de dados:

Verificar a role do utilizador

-- Ver capabilities do utilizador
SELECT * FROM wp_usermeta 
WHERE user_id = 1 
AND meta_key = 'wp_capabilities';

-- Output esperado para admin:
-- a:1:{s:13:"administrator";b:1;}

-- Se estiver vazio ou incorrecto, corrigir:
UPDATE wp_usermeta 
SET meta_value = 'a:1:{s:13:"administrator";b:1;}' 
WHERE user_id = 1 
AND meta_key = 'wp_capabilities';

-- Verificar nível
SELECT * FROM wp_usermeta 
WHERE user_id = 1 
AND meta_key = 'wp_user_level';

-- Deve ser 10 para admin
UPDATE wp_usermeta 
SET meta_value = '10' 
WHERE user_id = 1 
AND meta_key = 'wp_user_level';

Verificar se a conta está activa

-- Verificar estado do utilizador
SELECT ID, user_login, user_email, user_status, user_registered 
FROM wp_users 
WHERE user_login = 'admin';

-- user_status = 0 significa activo
-- Se user_status != 0, activar:
UPDATE wp_users SET user_status = 0 WHERE user_login = 'admin';

9. Causas Comuns de Perda de Acesso e Prevenção

Causa Como prevenir
Password esquecida sem email de recuperação Configurar SMTP funcional (SendGrid, Brevo) para emails do WordPress
Conta admin comprometida Password forte + 2FA (Wordfence Login Security, Two Factor)
Plugin de segurança bloqueou acesso Configurar IP whitelist e ter conta admin de backup
Atualização corrompeu base de dados Backup automático antes de cada actualização (UpdraftPlus)
Tema corrompido bloqueia wp-admin Manter tema default (Twenty Twenty-Four) como fallback
Múltiplos admins sem coordenação Mínimo de contas admin; usar editor/author para conteúdo
Ataque de força bruta a wp-login.php WAF (Cloudflare) + limit login attempts + renomear wp-login

10. Segurança Pós-Recuperação — Checklist

Após recuperar o acesso, executar esta checklist para garantir que o site está seguro:

Imediato (primeira hora)

☐ Alterar password de TODOS os utilizadores admin
☐ Remover conta temporária criada (admin_temp / admin_novo)
☐ Remover código temporário do functions.php
☐ Verificar se não existem contas admin desconhecidas:
   SELECT ID, user_login, user_email FROM wp_users 
   INNER JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id 
   WHERE wp_usermeta.meta_key = 'wp_capabilities' 
   AND wp_usermeta.meta_value LIKE '%administrator%';

Nas primeiras 24 horas

☐ Instalar/verificar plugin de 2FA (Two Factor, Wordfence 2FA)
☐ Actualizar WordPress core, temas, e plugins
☐ Verificar ficheiros do site contra malware (Wordfence Scan, Sucuri)
☐ Verificar .htaccess — garantir que não foi alterado
☐ Verificar wp-config.php — garantir que não tem código injectado
☐ Activar backups automáticos (UpdraftPlus, BackWPup)
☐ Registar IP de acesso admin (para auditoria futura)

Semana 1

☐ Configurar SMTP funcional para emails de recuperação
☐ Renomear URL de login (wp-login.php → /acesso-privado/)
☐ Limitar tentativas de login (Limit Login Attempts Reloaded)
☐ Verificar logs de acesso (access.log) em busca de tentativas
☐ Considerar WAF (Cloudflare, Wordfence Firewall)
☐ Documentar processo de recuperação para o futuro

11. FAQ

1. MD5 é seguro? Porque é que o WordPress aceita MD5?

MD5 não é seguro para armazenamento permanente de passwords. O WordPress aceita MD5 apenas para reset de emergência — após o primeiro login, converte automaticamente para o formato phpass/bcrypt (PHP password_hash()). Nunca deixe a password em MD5 — faça login uma vez para que a conversão aconteça.

2. Qual é o prefixo das minhas tabelas?

Veja em wp-config.php, na linha $table_prefix = 'wp_';. Se for diferente (ex: wp_kbase_), substitua todos os wp_ nos comandos SQL pelo prefixo correcto. O meta_key de capabilities também usa o prefixo: wp_kbase_capabilities em vez de wp_capabilities.

3. E se não tiver phpMyAdmin?

Use WP-CLI (Método 4) se tiver acesso SSH. Se não tem SSH nem phpMyAdmin, use o Método 5 (functions.php via FTP). Se não tem FTP, contacte o hosting — todos os painéis de controlo (cPanel, Plesk, DirectAdmin) incluem phpMyAdmin ou equivalente.

4. Após o reset, o login continua a falhar. O que fazer?

Verifique: (1) está a usar o user_login correcto (não o email); (2) o prefixo das tabelas está correcto; (3) não há plugins de cache a servir a página de login em cache — limpe a cache; (4) não há plugins de segurança (Wordfence, iThemes Security) a bloquear o login — desactive via BD renomeando a pasta do plugin em wp-content/plugins/.

5. Como desactivar um plugin que está a bloquear o acesso?

# Via FTP: renomear a pasta do plugin
/wp-content/plugins/wordfence/ → /wp-content/plugins/wordfence.disabled/

# Via SQL: desactivar todos os plugins
UPDATE wp_options SET option_value = '' 
WHERE option_name = 'active_plugins';

# Via WP-CLI:
wp plugin deactivate wordfence

6. A página de login aparece em branco. O que fazer?

Provavelmente um erro PHP fatal. Active o debug no wp-config.php: define('WP_DEBUG', true); define('WP_DEBUG_LOG', true);. Verifique o ficheiro wp-content/debug.log. Se um plugin causou o erro, desactive via FTP (renomear a pasta).

7. Posso recuperar sem acesso à base de dados?

O Método 5 (functions.php) só precisa de FTP. Se não tem FTP, o formulário “Esqueceu-se da password?” é a única opção — precisa de ter SMTP funcional. Se o SMTP não está configurado, o email de recuperação não chega e precisa de aceder à BD.

8. Quantas contas admin devo ter?

No mínimo 1, idealmente 2 (para redundância). Mais contas admin = maior superfície de ataque. Para gestão de conteúdo, use roles inferiores (Editor, Author). Reserve admin apenas para gestão técnica (actualizações, plugins, configuração).

12. Erros Comuns e Resoluções

Sintoma Causa Solução
Login redirecciona para a mesma página URL do site incorrecto em wp_options UPDATE wp_options SET option_value='https://site.pt' WHERE option_name IN('siteurl','home');
“ERROR: Invalid username or password” Password não foi alterada correctamente Verificar se o user_login está correcto e re-executar o UPDATE
Login funciona mas sem acesso ao dashboard Role incorrecta em wp_usermeta Verificar wp_capabilities = a:1:{s:13:"administrator";b:1;}
“You do not have sufficient permissions” wp_user_level não é 10 UPDATE wp_usermeta SET meta_value='10' WHERE user_id=ID AND meta_key='wp_user_level'
Página de login em branco (white screen) Erro PHP fatal em plugin ou tema Desactivar plugins via FTP (renomear pasta) e activar WP_DEBUG
“Too many redirected” ao aceder wp-admin Conflito de URL (http vs https) em wp_options Corrigir siteurl e home para HTTPS na BD
Email de recuperação não chega SMTP não configurado Usar reset via BD (Método 1) e depois configurar SMTP
phpMyAdmin: “#1146 – Table doesn’t exist” Prefixo de tabela errado Verificar $table_prefix em wp-config.php
Conta admin desapareceu após update Update corrompeu wp_users ou wp_usermeta Método 3 (criar nova conta admin via SQL)
functions.php não cria a conta Tema child ou cache a interferir Limpar cache, visitar /wp-login.php directamente

Artigos Relacionados

Voltar ao Índice

Este artigo foi útil?

Duarte Spínola

Comentários estão desativos.