MySQL 5.7 – Mudanças: Instalação e Segurança

postado em: Novidades, Tutoriais | Comments

Diversas mudanças vieram com esta nova versão do SGBD, principalmente no que diz respeito da gestão de usuários e configurações de segurança que vem para solucionar alguns problemas que muitos DBA tinham antes.

Instalação

Uma das mudanças é na hora da instalação. Considerando que usuários sem privilégios administrativos no nível do sistema operacional não têm acesso a determinados arquivo de log – especificamente acesso de leitura ao arquivo de log de erros do MySQL, que inicialmente se encontra em /var/log – após fazer a instalação do servidor de bancos de dados, o arquivo .mysql_secret não será mais gerado no diretório /home do usuário efetivo da instalação do MySQL.

Após a instalação, basta iniciar o serviço. Ao abrir o arquivo de log, verá um evento parecido com este:

[Warning] A temporary password is generated for [email protected]: 4RT_l.h7*p

 Após, é interessante rodar o mysql_secure_installation para trocar a senha temporário do root e aplicar outras configurações de segurança no servidor. Lembrando que segundo as boas práticas, a conta do root é indicada somente para operações administrativas que não possam ser realizadas por outros usuários, já que é também uma boa prática trabalhar com a política do menor privilégio.

[[email protected] ~]$ mysql_secure_installation

Securing the MySQL server deployment.

Enter password for root user:

The existing password for the user account has expired. Please set a new password.

New password:

Re-enter new password:

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
Using existing root password.

Estimated strength of the password: 100
Change the root password? (Press y|Y for Yes, any other key for No) : Y

New password:

Re-enter new password:

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : No

 ... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done!

 

Níveis de segurança

Ao rodar o mysql_secure_installation pela primeira vez, este lhe perguntará o nível de validação de senhas que o administrador de bancos de dados deseja aplicar ao ambiente, sendo os níveis de tal validação:

  1. LOW: considera somente o tamanho da senha fornecida;
  2. MEDIUM: nível padrão, considera o tamanho, uso de caracteres minúsculos e maiúsculos e especiais, exemplo: L8&d%9mK;
  3. STRONG: considera o tamanho, uso de caracteres minúsculos e maiúsculos e especiais, exceto palavras adicionadas a um dicionário que, se forem fornecidas como senha, serão rejeitadas.

Duas são as variáveis que controlam o nível da política de segurança para senhas e o dicionário de proibições – validate_password_policy e validate_password_dictionary_file, respectivamente.

mysql> SHOW GLOBAL VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        |  Value |
+--------------------------------------+--------+
| validate_password_dictionary_file    |        |
| validate_password_length             |      8 |
| validate_password_mixed_case_count   |      1 |
| validate_password_number_count       |      1 |
| validate_password_policy             | STRONG |
| validate_password_special_char_count |      1 |
+--------------------------------------+--------+
  • validate_password_length: Comprimento ou quantidade de caracteres que a senha deve conter;
  • validate_password_mixed_case_count: Variação entre caracteres em maiúsculo e minusculo;
  • validate_password_number_count: Quantidade de números que deve conter a senha;
  • validate_password_policy: O nível de politica da senha, que pode ser como (LOW, MEDIUM and STRONG);
  • validate_password_special_char_count: Quantidade de caracteres especiais na senha;

 

Expiração de senha

Outra opção é a possibilidade de estabelecer um prazo para que uma senha seja expirada. Segue abaixo as opções:

  • PASSWORD EXPIRE: Ao logar, o usuário terá que altera a sua senha, pois não ira conseguir realizar alguma operação;
  • PASSWORD EXPIRE NEVER: Como o próprio nome já diz, a senha do usuário nunca será alterada;
  • PASSWORD EXPIRE INTERVAL N DAY: Você fornece um intervalo de dias para a expiração da senha;
  • PASSWORD EXPIRE DEFAULT: Através de uma variável, você define um prazo global para que o usuário altere a senha. O valor padrão é de:
mysql> SHOW GLOBAL VARIABLES LIKE 'default_password_lifetime';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| default_password_lifetime | 360   |
+---------------------------+-------+

Um exemplo de criação de usuário com expiração de senha:

CREATE USER user@'localhost' identified by 'S&nh4oP9_' PASSWORD EXPIRE INTERVAL 10 DAY;

 

Bloqueio e desbloqueio de usuários

Uma opção que é simples, mas que o MySQL devia até hoje é o lock de um usuário. Isso vai ajudar muito empresas que trabalham com um alto numero de bases MySQL, juntamente ao seu controle. Eu particularmente estava no aguardo desta nova opção, que facilitará o meu trabalho

  • ACCOUNT LOCK;
  • ACCOUNT UNLOCK;

Segue um exemplo de bloqueio e desbloqueio:

mysql> ALTER USER user@'localhost' ACCOUNT LOCK;
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER USER user@'localhost' ACCOUNT UNLOCK;
Query OK, 0 rows affected (0.00 sec)

 

Tenho certeza de que estas novidades facilitarão a vida de muitos DBA e empresas que precisavam antes criar triggers e utilizar de outros métodos para fazer o que hoje já é nativo.

Para saber mais sobre estas e outras novidades, basta acessar a documentação do MySQL 5.7.

Allan Moraes é gaúcho e entusiasta open source. Trabalha em uma Startup com foco em Plataforma como Serviço (PaaS), é especialista em MySQL, High Availability e High Scalability Architecture.