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
- 2. Pré-requisitos e Acesso ao phpMyAdmin
- 3. Método 1 — Reset de Password via phpMyAdmin (MD5)
- 4. Método 2 — Reset de Password via phpMyAdmin (PHP password_hash)
- 5. Método 3 — Criar Nova Conta de Administrador via SQL
- 6. Método 4 — Reset via WP-CLI
- 7. Método 5 — Reset via functions.php do Tema
- 8. Verificar e Reparar Permissões e Funções de Utilizador
- 9. Causas Comuns de Perda de Acesso e Prevenção
- 10. Segurança Pós-Recuperação — Checklist
- 11. FAQ
- 12. Erros Comuns e Resoluções
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 (
mysqlcommand-line) - Nome da base de dados do WordPress — pode ser encontrado em
wp-config.phpna 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
- Alterar a Password do WordPress através do PHPMyAdmin
- Como Instalar o WordPress Manualmente no Plesk
- Alojamento Web — Redirecionamento via Frame
- Visualizar Definições do PHP no Alojamento
- Redirecionar HTTP para HTTPS: Apache, Nginx, IIS e Cloudflare
- Plano de Resposta a Ransomware para Empresas Portuguesas
