0

default_password_lifetime à 360 jours entre la 5.7.4 et 5.7.10

twitterlinkedinmail

Petite piqûre de rappel pour tous ceux qui se trouvent entre ces deux releases, la valeur du paramètre default_password_lifetime est fixée à 360 par défaut, ce qui signifie que si vous n’avez pas précisé la clause PASSWORD EXPIRE NEVER dans CREATE USER ou ALTER USER, le mot de passe expirera effectivement au bout de 360 jours, jolie bombe à retardement toutes topologies confondues (réplication 5.6->5.7). Y compris pour root@localhost:

mysql> select version() as 'Version', user, host, password_lifetime from mysql.user where user='root' ;
+----------+------+-----------+-------------------+
| Version  | user | host      | password_lifetime |
+----------+------+-----------+-------------------+
| 5.7.10-3 | root | localhost | NULL              |
+----------+------+-----------+-------------------+
1 row in set (0.00 sec)

Lorsque mysql.user.password_lifetime est à NULL, la valeur qui s’applique est celle du paramètre:

mysql> select @@default_password_lifetime ;
+-----------------------------+
| @@default_password_lifetime |
+-----------------------------+
| 360                         |
+-----------------------------+
1 row in set (0.02 sec)

La doc officielle Oracle précise que la valeur a été repassée à 0 à partir de la 5.7.11 : https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_default_password_lifetime

Si vous êtes concernés et que vous ne voulez pas (à priori) que vos mots de passe expirent :

1) Passer le paramètre default_password_lifetime à 0 en global et dans le fichier de conf (les variables persistées sont toujours attendues pour la 8.0 : http://mysqlserverteam.com/mysql-8-0-persisting-configuration-variables/):

mysql> SET GLOBAL default_password_lifetime=0 ;
Query OK, 0 rows affected (0.02 sec)

...

$ grep lifetime /path/to/my.cnf
default_password_lifetime=0

2) Modifier tous les comptes concernés :

mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER ;
Query OK, 0 rows affected (0.08 sec)

mysql> select version() as 'Version', user, host, password_lifetime from mysql.user where user='root' ;
+----------+------+-----------+-------------------+
| Version | user  | host      | password_lifetime |
+----------+------+-----------+-------------------+
| 5.7.10-3 | root | localhost | 0                 |
+----------+------+-----------+-------------------+
1 row in set (0.00 sec)

Si votre mot de passe a déjà expiré un joli message d’erreur s’affichera:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

Et il faudra réinitialiser le mot de passe en plus de modifier les paramètres précédemment cités.

Un bug (#77277) est ouvert en juin 2015, ce sur quoi Morgan Tocker himself conclue en précisant qu’il est dans la politique d’Oracle de sécuriser par défaut (cf le profil par défaut en Oracle 11g qui expire au bout de 180 jours et sur lequel à peu près tout le monde s’est cassé les dents suite migration 10g -> 11g), et que le paramètre pourrait repasser à une valeur positive dans les futures releases. Il faudra donc garder l’oeil ouvert et bien lire les release notes à chaque nouvelle version.

A+

Continuez votre lecture sur le blog :

twitterlinkedinmail

David Baffaleuf

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.