Poupe até 53% em Servidores VPS, escolha agora. Oferta limitada.

Solucionar problemas de permissão no MySQL: exemplos reais no Ubuntu 22.04

13 min de leitura  ·  Guia técnico

Solucionar problemas de permissão no MySQL requer compreensão dos mecanismos de segurança do banco de dados. Erros de permissão são comuns e podem impedir o acesso a bancos, tabelas ou operações específicas. Neste guia, abordaremos as causas mais frequentes e apresentaremos soluções práticas para resolver problemas de permissão no MySQL no Ubuntu 22.04.

Pré-requisitos

  • Acesso SSH ao servidor Ubuntu 22.04
  • MySQL 8.0 ou MariaDB 10.6 instalado
  • Acesso ao usuário root ou usuário com privilégios administrativos
  • Conhecimentos básicos de linha de comando Linux
  • Conhecimentos básicos de comandos SQL

Entendendo o sistema de permissões do MySQL

O sistema de permissões do MySQL controla quais usuários podem acessar quais bancos de dados e executar determinadas operações. Cada usuário no MySQL é identificado por uma combinação de nome de usuário e host (por exemplo, 'usuario'@'localhost'). O host especifica de onde o usuário pode se conectar.

As permissões no MySQL são hierárquicas e podem ser concedidas em diferentes níveis:

  • Global: afeta todas as bases de dados no servidor
  • Base de dados: afeta todas as tabelas em uma base específica
  • Tabela: afeta apenas uma tabela específica
  • Coluna: afeta apenas colunas específicas em uma tabela
  • Rotina: afeta procedimentos armazenados e funções

Para verificar as permissões atuais de um usuário, conecte-se ao MySQL como administrador e execute:

SHOW GRANTS FOR 'usuario'@'host';

Substituindo 'usuario' e 'host' pelos valores apropriados.

Diagnosticando problemas comuns de permissão

Problemas de permissão no MySQL geralmente se manifestam através de mensagens de erro específicas. Vamos analisar os erros mais comuns e como diagnosticá-los corretamente.

Erro: Access denied for user

Este é o erro mais comum relacionado a permissões. Quando você vê uma mensagem como:

ERROR 1045 (28000): Access denied for user 'usuario'@'localhost' (using password: YES)

Isso pode indicar vários problemas:

  1. Senha incorreta
  2. O usuário não existe
  3. O usuário existe, mas não pode se conectar do host especificado
  4. O método de autenticação está incorreto

Para diagnosticar, verifique se o usuário existe e de quais hosts ele pode se conectar:

SELECT user, host FROM mysql.user WHERE user = 'usuario';

Se o usuário existir, verifique suas permissões:

SHOW GRANTS FOR 'usuario'@'host';

Erro: Database access denied

Se você consegue se conectar ao MySQL, mas não pode acessar um banco de dados específico:

ERROR 1044 (42000): Access denied for user 'usuario'@'host' to database 'nome_do_banco'

Isso indica que o usuário não tem permissões para acessar o banco de dados especificado. Verifique as permissões do usuário para confirmar.

Resolvendo problemas de autenticação do usuário root

No Ubuntu 22.04, o MySQL é configurado para usar o plugin auth_socket para o usuário root por padrão. Isso significa que você só pode se conectar como root se estiver logado como o usuário root do sistema operacional ou usando sudo.

Problema com autenticação do root

Se você estiver enfrentando o erro:

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Existem duas soluções principais:

  1. Conectar usando sudo:
sudo mysql

Ou:

sudo mysql -u root
  1. Alterar o método de autenticação para senha:
sudo mysql -u root

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'sua_senha_segura';
mysql> FLUSH PRIVILEGES;
mysql> exit

Agora você poderá se conectar usando:

mysql -u root -p

Atenção: Alterar o método de autenticação do root pode ter implicações de segurança. Certifique-se de usar uma senha forte e considere as políticas de segurança do seu ambiente.

Criando e gerenciando usuários com permissões adequadas

Uma prática recomendada de segurança é criar usuários específicos para cada aplicação ou finalidade, com apenas as permissões necessárias. Vamos ver como criar e gerenciar usuários no MySQL.

Criando um novo usuário

CREATE USER 'novo_usuario'@'localhost' IDENTIFIED BY 'senha_segura';

Para permitir conexões de qualquer host:

CREATE USER 'novo_usuario'@'%' IDENTIFIED BY 'senha_segura';

Atenção: Permitir conexões de qualquer host ('%') pode representar um risco de segurança. Use apenas quando necessário e certifique-se de que seu firewall está configurado adequadamente.

Concedendo permissões básicas

Para conceder todas as permissões em um banco de dados específico:

GRANT ALL PRIVILEGES ON nome_do_banco.* TO 'usuario'@'localhost';

Para permissões mais específicas:

GRANT SELECT, INSERT, UPDATE ON nome_do_banco.* TO 'usuario'@'localhost';

Para permissões em uma tabela específica:

GRANT SELECT, INSERT ON nome_do_banco.tabela TO 'usuario'@'localhost';

Após conceder permissões, sempre execute:

FLUSH PRIVILEGES;

Revogando permissões

Para revogar permissões específicas:

REVOKE INSERT ON nome_do_banco.* FROM 'usuario'@'localhost';

Para revogar todas as permissões:

REVOKE ALL PRIVILEGES ON *.* FROM 'usuario'@'localhost';

Não esqueça de aplicar as mudanças:

FLUSH PRIVILEGES;

Solucionando problemas específicos de permissão no MySQL

Vamos abordar alguns cenários comuns de problemas de permissão e como resolvê-los no Ubuntu 22.04.

Problema: Aplicação web não consegue conectar ao banco de dados

Se sua aplicação web (como WordPress, Joomla ou aplicação personalizada) não consegue conectar ao banco de dados, verifique:

  1. Se o usuário do banco de dados existe:
SELECT user, host FROM mysql.user WHERE user = 'usuario_app';
  1. Se o usuário tem permissão para se conectar do host correto:

Se sua aplicação está no mesmo servidor que o MySQL, o host deve ser 'localhost'. Se está em um servidor diferente, o host deve permitir conexões do IP do servidor da aplicação ou usar '%'.

  1. Se o usuário tem as permissões necessárias no banco de dados:
SHOW GRANTS FOR 'usuario_app'@'host';

Solução típica:

CREATE USER 'usuario_app'@'%' IDENTIFIED BY 'senha_segura';
GRANT SELECT, INSERT, UPDATE, DELETE ON nome_do_banco.* TO 'usuario_app'@'%';
FLUSH PRIVILEGES;

Problema: Erro ao importar ou exportar dados

Se você está tentando importar ou exportar dados usando ferramentas como mysqldump e recebe erros de permissão, verifique se o usuário tem os privilégios FILE e/ou SUPER:

GRANT FILE ON *.* TO 'usuario'@'localhost';
FLUSH PRIVILEGES;

Para mysqldump, você pode precisar de:

GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES ON nome_do_banco.* TO 'usuario'@'localhost';
FLUSH PRIVILEGES;

Problema: Erro ao criar ou modificar tabelas

Se você recebe erros ao tentar criar ou modificar tabelas:

ERROR 1142 (42000): CREATE command denied to user 'usuario'@'localhost' for table 'nova_tabela'

Conceda as permissões necessárias:

GRANT CREATE, ALTER ON nome_do_banco.* TO 'usuario'@'localhost';
FLUSH PRIVILEGES;

Problemas comuns e como resolver

Sintoma: Erro "Host is not allowed to connect"

Causa: O usuário existe, mas não está autorizado a se conectar do host atual. Isso acontece quando o usuário foi criado para um host específico (como 'localhost'), mas está tentando se conectar de outro host.
Solução: Crie uma entrada adicional para o usuário com o host correto ou modifique o host existente:

CREATE USER 'usuario'@'%' IDENTIFIED BY 'senha_atual';
GRANT ALL PRIVILEGES ON nome_do_banco.* TO 'usuario'@'%';
FLUSH PRIVILEGES;

Sintoma: Erro "Table doesn't exist" mesmo quando a tabela existe

Causa: O usuário não tem permissões para acessar a tabela específica ou está tentando acessar a tabela no banco de dados errado.
Solução: Verifique se o usuário está conectado ao banco de dados correto e conceda as permissões necessárias:

GRANT SELECT, INSERT, UPDATE, DELETE ON nome_do_banco.nome_da_tabela TO 'usuario'@'host';
FLUSH PRIVILEGES;

Sintoma: Erro ao tentar executar comandos administrativos

Causa: O usuário não tem privilégios administrativos necessários, como CREATE USER, DROP USER, etc.
Solução: Conceda os privilégios administrativos necessários (com cautela):

GRANT CREATE USER ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Sintoma: Erro "Plugin auth_socket is not loaded"

Causa: Isso pode ocorrer em algumas configurações do MySQL quando o plugin auth_socket não está disponível.
Solução: Altere o método de autenticação para o usuário:

ALTER USER 'usuario'@'localhost' IDENTIFIED WITH mysql_native_password BY 'senha_segura';
FLUSH PRIVILEGES;

Boas práticas de segurança para permissões MySQL

Ao configurar permissões no MySQL, siga estas boas práticas para manter seu banco de dados seguro:

  1. Princípio do menor privilégio: Conceda apenas as permissões necessárias para cada usuário realizar suas tarefas.
  2. Evite usar o usuário root: Crie usuários específicos para cada aplicação ou finalidade.
  3. Limite os hosts de conexão: Especifique exatamente de quais hosts cada usuário pode se conectar, em vez de usar '%'.
  4. Use senhas fortes: Implemente uma política de senhas fortes para todos os usuários do MySQL.
  5. Revise permissões regularmente: Audite periodicamente as permissões de usuários para garantir que estão atualizadas.

Para listar todos os usuários e seus hosts:

SELECT user, host FROM mysql.user;

Para verificar usuários com privilégios administrativos:

SELECT user, host FROM mysql.user WHERE Super_priv = 'Y';

Considere usar a infraestrutura de servidor VPS da AviraHost para implementar configurações de segurança personalizadas para seu MySQL.

Perguntas frequentes sobre problemas de permissão no MySQL

Como verificar as permissões de um usuário MySQL?

Use o comando 'SHOW GRANTS FOR 'usuario'@'host';' no prompt do MySQL. Isso exibirá todas as permissões concedidas ao usuário específico, incluindo privilégios em bancos de dados, tabelas e operações permitidas.

O que significa o erro 'Access denied for user' no MySQL?

Este erro ocorre quando um usuário tenta acessar o MySQL sem as permissões adequadas. As causas comuns incluem senha incorreta, usuário inexistente, host não autorizado ou falta de privilégios para a operação específica que está tentando executar.

Como criar um usuário MySQL com permissões limitadas?

Conecte ao MySQL como root e execute 'CREATE USER 'usuario'@'host' IDENTIFIED BY 'senha';' seguido de 'GRANT SELECT, INSERT ON banco.* TO 'usuario'@'host';'. Isso cria um usuário com permissões apenas para consultar e inserir dados no banco especificado.

É possível revogar permissões específicas no MySQL?

Sim, use o comando 'REVOKE permissão ON banco.tabela FROM 'usuario'@'host';'. Por exemplo, 'REVOKE DELETE ON clientes.* FROM 'analista'@'localhost';' remove a permissão de exclusão nas tabelas do banco 'clientes' para o usuário 'analista'.

Como resolver o erro 'ERROR 1698 (28000): Access denied for user 'root'@'localhost''?

Este erro comum no Ubuntu ocorre devido ao plugin de autenticação auth_socket. Resolva com 'sudo mysql -u root' para acessar como root via sudo, ou altere o método de autenticação com 'ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'nova_senha';'.

Conclusão

  • Os problemas de permissão no MySQL geralmente estão relacionados a configurações incorretas de usuários, hosts ou privilégios específicos.
  • Utilize comandos como SHOW GRANTS, CREATE USER, GRANT e REVOKE para gerenciar efetivamente as permissões dos usuários.
  • Siga o princípio do menor privilégio, concedendo apenas as permissões necessárias para cada usuário ou aplicação.

Solucionar problemas de permissão no MySQL requer uma compreensão clara do sistema de segurança do banco de dados. Com as técnicas e comandos apresentados neste guia, você estará bem equipado para diagnosticar e resolver a maioria dos problemas de permissão que encontrar no MySQL no Ubuntu 22.04.

Precisa de ajuda com seu banco de dados MySQL?

A AviraHost oferece servidores VPS otimizados para MySQL com suporte técnico especializado para garantir que seus bancos de dados funcionem sem problemas de permissão ou desempenho.

Conheça nossos planos de Servidor VPS

  • 0 Os usuários acharam isso útil
  • mysql, permissoes, ubuntu, database, seguranca, vps, linux, avirahost
Esta resposta foi útil?

Artigos Relacionados

Instalando painel de gerenciamento de hospedagem VirtualMin.

O virtualmin é um painel de gerenciamento de hospedagem de sites gratuito, que é suportado por...

Como usar a ferramenta oficial de acesso remoto do Windows no PC e celular

1. Pelo menu Iniciar, acesse os “Acessórios do Windows” e abra o “Conexão de Área de Trabalho...

Como acessar o painel de gerenciamento dos meus Serviços.

Para acessar o painel de gerenciamento do seu serviço basta seguir o passo á passo abaixo.   1....

Compreendendo o Servidor VPS: O que é e Como Funciona!

Um servidor VPS (Virtual Private Server) é uma solução de hospedagem na qual um servidor físico é...

Como trocar a senha do usuário root do servidor VPS ou Dedicado.

Para trocar a senha do usuário root em um servidor VPS da AviraHost, você pode seguir os...