Esse tutorial foi escrito para o Linux Ubuntu, se o seu sistema é outro então adapte este tutorial conforme sua necessidade, sempre verificando o path dos arquivos mencionados e criando uma cópia de segurança além de anotar as permissões dos mesmos antes de começar as alterações.
Por padrão é possível logar-se localmente em um servidor MySQL como usuário anônimo sem a necessidade de autenticação, apesar do acesso ficar restrito as bases test e information_schema, uma mente criativa pode através de script coletar dados da máquina e armazenar estes dados dentro da base test para futura consulta sem chamar a atenção.
Os parâmetros mais utilizados para conexão com o servidor são:
-u nome do usuário
-p requisição de senha
-h host / ip
-P porta de conexão (padrão 3306)
-D base de dados
Observação: Apesar de apontarem para o mesmo local, no servidor, localhost e 127.0.0.1 são vistos como coisas diferentes, então um usuário que tem acesso a localhost não necessariamente conseguirá logar em 127.0.0.1, ou seja, dentro da base mysql na tabela user localhost é uma coisa e 127.0.0.1 é outra, ja no arquivo my.conf usa-se apenas 127.0.0.1 quando se fala de acesso local.
Tornando o MySQL um pouco mais seguro
Para solucionar a questão do login temos três possíveis soluções.- Criar uma senha para o usuário anônimo
- Remover o usuário anônimo (identificado como '' na tabela user)
- Deletar a base test
Conecte-se como root no servidor através do ip 127.0.0.1 ou localhost
$ mysql -u root -p -h 127.0.0.1 -D mysqlAltere a senha do usuário anônimo que é identificado como ''@'localhost' substituindo o respectivo texto pela nova senha.
mysql>SET PASSWORD FOR ''@'localhost' = password('nova senha'); Query OK, 0 rows affected (0.00 sec)Para testar basta sair do servidor e se conectar como anônimo informando a nova senha, lembre-se de utilizar o parâmetro -p
mysql>exit Bye $ mysql -p -h 127.0.0.1 Password:Para evitar logins remotos (ip's externos), procure a seguinte linha no arquivo /etc/mysql/my.conf (este é o path relativo para distro ubuntu, caso não encontre o arquivo procure-o através do comando locate ou find)
skip-networkingAo encontrá-la, descomente-a retirando o # da frente do comando, caso essa linha não exista, crie-a.
Certifique-se de que no mesmo arquivo a linha abaixo contém o IP local 127.0.0.1 ao invés de 0.0.0.0 assim apenas conexões locais serão aceitas
bind-address = 127.0.0.1Pronto! Menos uma questão de segurança para se preocupar.
Se você pretende habilitar acesso remoto, siga as instruções abaixo, caso contrário "por hoje é só pessoal!"
Habilitando acesso remoto
Atenção: Aqui será feito exatamente o contrário de parte do que fizemos acima! Pois vamos liberar o acesso remoto ao invés de bloqueá-lo, porém de uma forma segura.O primeiro passo é garantir a algum usuário permissão para conectar ao servidor e especificar quais serão seus privilégios, abaixo a lista dos possíveis privilégios:
ALL/ALL PRIVILEGES – Simboliza todos os privilégios abaixo;
ALTER – Permite alterar a estrutura de tabelas;
ALTER ROUTINE – Permite alterar e excluir stored procedures/functions;
CREATE – Permite criar base de dados e tabelas;
CREATE ROUTINE – Permite criar stored procedures/functions;
CREATE TEMPORARY TABLES – Permite a criação de tabelas temporárias em expressões SQL que utilizam esse recurso;
CREATE USER – Permite criar e gerenciar usuários;
CREATE VIEW – Permite criar visões;
DELETE – Permite excluir informações;
DROP – Permite excluir estruturas (bases e tabelas);
EVENT – Permite criar event schedulers;
EXECUTE – Permite executar stored procedures;
FILE – Permite ler e escrever arquivos no sistema;
GRANT – Permite cadastrar seus privilégios para outros usuários;
INDEX – Permite o gerenciamento de índices;
INSERT – Permite inserir informações em tabelas;
LOCK TABLES – Permite bloquear tabelas;
PROCESS – Permite visualizar e finalizar processos do MySQL;
RELOAD – Permite recarregar bases de dados;
REPLICATION CLIENT – Permite solicitar replicação;
REPLICATION SLAVE – Permite replicar suas informações;
SELECT – Permite consultas;
SHOW DATABASES – Permite visualizar todas as estruturas das bases existentes;
SHOW VIEW – Permite visualizar os códigos de criação de visões;
SHUTDOWN – Permite desligar o servidor MySQL;
SUPER – Permite configurar os dados do servidor MASTER (em caso de replicação);
TRIGGER – Permite criar e gerenciar triggers;
UPDATE – Permite alterar informações em tabelas;
USAGE – Permite utilizar comandos básicos.
Vamos criar uma usuária chamada amanda (sugiro a criação de um usuário específico para acesso remoto, uma das vantagens é a identificação nos arquivos de log) e ja definir seus privilégios, isso será feito através do comando GRANT, a sintaxe do mesmo é:
GRANT <privilégios> ON <base>.<tabela> TO '<usuario>'@'<dominio>' IDENTIFIED BY '<senha>'
Sendo que
*.* – Aplica-se a todas as bases!
<base>.* – Aplica-se a todas as tabelas da base determinada
<base>.<tabela> – Aplica-se a uma determinada tabela
Criando a usuária amanda e atribuindo seus privilégios:
$ mysql -u root -p -D mysql mysql> GRANT SELECT,INSERT,DELETE,UPDATE ON test.* TO 'amanda'@'%' IDENTIFIED BY 'senha da amanda';Nota: O uso de ' %' define que a usuária poderá se logar tanto localmente quanto remotamente.
Observação: O Comando GRANT cria um novo usuário e atribui privilégios a cada vez que é utilizado, se você estiver realizando alguns testes nesta parte, recomendo que ao terminar de um select na tabela user para verificar se não foi criada mais de uma entrada para o mesmo usuário com hosts diferentes, para revogar privilégios utilize o comando REVOKE
Para habilitar conexões remotas ao seu servidor MySQL vamos considerar o cenário do diagrama abaixo, o IP 200.220.4.113 é apenas para fim ilustrativo, substitua-o por seu IP externo! para descobrir seu IP externo visite o site ifconfig.me ou o Ip Chicken.
Vamos começar com o mínimo de alterações e caso isso não seja o suficiente partiremos para outra etapa, assim restringimos as mudanças ao que for realmente necessário.
Primeiro o arquivo my.conf (o oposto do que fizemos no início deste tutorial) vamos comentar a linha skip-networking (caso essa linha não exista não é necessário cria-la) e alterar o bind-adress para 0.0.0.0, ao comentar a linha skip-networking estamos habilitando as conexões via tcp/ip, ja o bind-adress como 0.0.0.0 permite conexões de qualquer faixa de ip.
#skip-networking bind-address = 0.0.0.0Se ao tentar um login remoto ocorrer o erro:
$ mysql -u amanda -p -h 200.220.4.113 -P 3306 ERROR 1042 (HY000): Can't get hostname for your addressProcure a linha abaixo no arquivo my.conf, caso exista certifique-se de que ela não está comentada com #, caso não exista, crie-a.
skip-name-resolveSe depois disso você receber time-out
$ mysql -u amanda -p -h 200.220.4.113 -P 3306 Enter password: ERROR 2003 (HY000): Can't connect to MySQL server on '200.220.4.113' (110)Talvez seu firewall esteja bloqueando a conexão, se for este o caso adicione a seguinte regra ao firewall:
$ sudo ufw allow 3306/tcpPara verificar se a regra foi adicionada corretamente
$ sudo ufw status Status: active To Action From -- ------ ---- 3306/tcp ALLOW Anywhere 3306/tcp ALLOW Anywhere (v6)Se tudo estiver correto você conseguirá logar remotamente:
$ mysql -u yourusername -p -h 200.220.4.113 -P 3306 # Use seu IP externo! Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
É isto!
Observação: Se ainda assim não conseguir conectar remotamente e você utilizar um roteador, será preciso redirecionar a porta do roteador para sua máquina, porém devido a imensa diversidade de modelos de roteadores não irei incluir isto neste tutorial, mas você encontrará informações sobre como fazer o "foward" de portas de diversos modelos no site Port Foward
Para remover a usuária amanda que foi criada apenas como teste:
$ mysql -u root -p -D mysql mysql> DELETE FROM user WHERE user='amanda';Para bloquear novamente o acesso no firewall mude a regra de allow para deny:
$ sudo ufw deny 3306/tcp
Interrompendo o inicio automático do servidor MySQL
Geralmente após instalado o servidor passa a ser iniciado como um serviço no boot do sistema, se você o utiliza apenas eventualmente quando está em produção e não como servidor permanente local, como medida de segurança adicional recomendo iniciar o servidor apenas quando você for trabalhar com o mesmo. O cancelamento do início automático pode ser feito de duas maneiras.A Primeira é criando um arquivo override com a instrução "manual", a vantagem deste metódo é que você não precisa alterar o arquivo de inicialização do MySQL, (caso queira voltar a inicializar o servidor automaticamente no boot basta remover o arquivo mysql.override.)
Criando o arquivo mysql.override
$ sudo touch /etc/init/mysql.override $ echo "manual" | sudo tee /etc/init/mysql.overrideA outra opção é como root comentar a seguinte linha no arquivo /etc/init/myql.init
#start on runlevel [2345]A partir dai para iniciar manualmente o servidor:
$ sudo initctl start mysqlPara interromper o servidor:
$ sudo initctl stop mysqlComo alternativa também é possível iniciar ou parar o servidor através do comando service mysql <start / stop>
Dúvidas? Deixe um comentário!
Trilha sonora deste post: Emma Hewitt - Colours (Jerome Isma-Ae Remix)
0 comentários :
Postar um comentário