default_password_lifetime à 360 jours entre la 5.7.4 et 5.7.10

Vendredi, septembre 22, 2017
By David Baffaleuf in MySQL (dbaffaleuf@capdata-osmozium.com) [71 article(s)]

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 :




Cliquer pour partager cet article sur Viadeo
Cliquer sur "CAPTURER" pour sauvegarder cet article dans Evernote Clip to Evernote

Leave a Reply