2 minutos
Acessando remotamente o MySQL
A primeira coisa é, não utilize um usuário root para acesso a sua base, crie usuários distintos para cada aplicação. Uma vez que o root pode alterar até tabelas do MySQL. Fica a dica!
Atenção Os links para a documentação do MySQL contidos neste guia são da versão 5.1
Conecte-se no MySQL pelo terminal, após apertar enter digite sua senha:
$ mysql -u <usuario> -p
Iremos criar o usuário:
CREATE USER '<usuario>'@'<host>' IDENTIFIED BY '<senha>';
Onde:
- < host >: host name ou ip
- < usuario >: Usuário que irá se conectar
- < senha >: senha para o novo usuário
Entenda como um ip (IPv4) ou um hostname (localhost ou db.exemplo.com)
Atribua acesso, iremos limitar o acesso ao CRUD, uma vez que ele pode ter mais operações. Caso queira ver todas clique aqui.
GRANT <privilegios> ON <banco>.<tabela> TO '<usuario>'@'<host>';
- ALL PRIVILEGES
- SELECT
- UPDATE
- INSERT
- DELETE
O destaque vai para ALL PRIVILEGES que habilita todos os privilégios possiveis deixando com permissões semelhantes a root, então cuidado.
Quando desejar acesso externo para número ilimitado de máquinas, ou seja, qualquer uma, utilize o nome do host como %
Um exemplo de uso:
GRANT SELECT, UPDATE, INSERT, DELETE ON teste.* TO 'flaverton'@'flaverton.com';
Garantindo acesso de select, update, insert e delete a todas as tabelas do banco chamado teste, para o usuário flaverton, que deverá se conectar a partir do host flaverton.com.
Feito isso devemos resetar o cache de permissões dentro do MySQL usando o comando:
flush privileges;
Nessa parte iremos alterar o arquivo de configuração do MySQL
(/etc/mysql/my.cnf
) para liberar a conexão externa.
Caso não encontre o arquivo na pasta mencionada, utilize o comando locate para fazer a busca. Neste artigo ensino como usar com Debian e Red Hat, neste outro com macOS.
$ sudo nano /etc/mysql/my.cnf
Procure por uma sessão chamada [mysqld]
e a linha onde existe bind-address
O bind-address suporta somente um endereço, então se precisa de uma restrição mais complexa é altamente indicado usar um firewall, e uma configuração usável é a desse tutorial sobre binding em multiplos endereços.
Altere o valor dessa linha para:
bind-address = 0.0.0.0
Só pra constar coloquei com * (asterísco) e funcionou, mas a opção acima é a recomendada, inclusive na documentação.
Leitura Complementar
Como leitura complementar indico o blog do Aprendendo TI no dia-a-dia, mais especifíco o post Atribuindo permissões para usuário MySQl.