Olá galera, hoje nosso tópico é curto mas muito importante, vamos falar sobre algumas medidas de segurança que devemos tomar uma vez que instalamos o MySQL em nosso servidor.
Estou usando o Ubuntu 11.04 e MySQL 5.1.54 e acabei de fazer a instalação do meu serviço aqui (você pode checar como fazer isso aqui). Bem, agora temos algumas medidas de segurança para tomar de forma a proteger nossa base de dados. Inicialmente o MySQL cadastra usuarios anônimos em suas tabelas de grant, mas ele também tem ferramentas que te auxiliam no processo de aperfeiçoamento da segurança do banco.
Usuários anônimos e segurança
Podemos checar que usuários possuimos em nossa base inicialmente com o comando abaixo:
- mysql> SELECT user, host, password from mysql.user;
- +--------+-----------+-----------------------------------+
- | user | host | password |
- +--------+-----------+-----------------------------------+
- | root | localhost | *57000000000000000000000000000001 |
- | root | 127.0.0.1 | *57000000000000000000000000000001 |
- | root | ::1 | *57000000000000000000000000000001 |
- | | localhost | |
- +--------+-----------+-----------------------------------+
- 7 rows in set (0.00 sec)
Note que temos 2 usuários anônimos em nossa base. Poderiamos simplesmente apagar este usuário usando um DELETE FROM mysql.user..., mas como manda a documentação temos commandos específicos e utilitários que já fazem essa tarefa de forma limpa e segura do ponto de vista do SGDB.
Em nosso caso aqui iremos trabalhar com o utilitário mysql_secure_installation. (Lembrando que esse comando é válido apenas para o linux). Veja abaixo:
- shell> mysql_secure_installation
- NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
- In order to log into MySQL to secure it, we'll need the current
- password for the root user. If you've just installed MySQL, and you haven't set the root password yet, the password will be blank, so you should just press enter here.
- Enter current password for root (enter for none):
Uma vez digitado o password que você definiu para o seu root inicialmente (você ainda lembra né?) ele vai te guiar em um intuitivo passo a passo para tornar sua base mais segura. Entre eles te perguntar sobre a remoção dos usuário anônimos, desabilitar conexões remotas, remoção do banco de dados teste (uma vez que essa banco permite acessos por qualquer usuário) e finalmente recarregar todos os privilégios para que as alterações tenham efeito.
- OK, successfully used password, moving on...
- Setting the root password ensures that nobody can log into the MySQL
- root user without the proper authorisation.
- You already have a root password set, so you can safely answer 'n'.
- Change the root password? [Y/n] Y
- Password updated successfully!
- Reloading privilege tables..
- ... Success!
- Remove anonymous users? [Y/n] Y
- ... Success!
- Disallow root login remotely? [Y/n] Y
- ... skipping.
- Remove test database and access to it? [Y/n] Y
- ... skipping.
- Reload privilege tables now? [Y/n] Y
- ... Success!
- Cleaning up...
- All done! If you've completed all of the above steps, your MySQL
- installation should now be secure.
- Thanks for using MySQL!
Bem, após isto você ainda pode fazer algumas importantes verificações:
Tenha certeza que todas as suas contas tem senha, sua query abaixo tem que retornar vazia:
- mysql> SELECT Host, User FROM user WHERE Password = '';
- Empty set (0.00 sec)
Periodicamente procure por senhas duplicadas:
mysql> SELECT User from mysql.user GROUP BY password HAVING count(user) > 1;
Fique alerta quanto a hosts com curingas. Periodicamente faça o teste:
mysql> SELECT User, Host FROM mysql.user WHERE Host LIKE '%\%%';
Com esse passo a passo seu banco de dados já está mais seguro contra invasões e usuários não autorizados. Em breve trarei mais tópicos de como melhorar sua segurança.
Viva ao meu, seu, nosso MySQL! Até mais!