Comme le dit très bien la doc, il est possible et même souhaitable de protéger ou désactiver l’historique des commandes lancées par tous les comptes ayant accès au client mysql, dans la mesure où celui-ci peut contenir des informations sensibles comme des noms d’objets, des mots de passe, etc… Par défaut, les commandes seront loggées dans un fichier ~/.mysql_history.
Deux manières sont possibles pour désactiver complètement ce mécanisme:
– Soit utiliser la variable d’environnement MYSQL_HISTFILE et la faire pointer vers /dev/null
– Soit créer un lien soft entre ~/.mysql_history -> /dev/null
Mais ce qui est assez curieux, c’est que dans les 2 cas mysqld n’enverra rien du tout en sortie, pas même vers le device /dev/null. Extrait des sources ~/client/mysql.cc (Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved) :
#ifdef HAVE_READLINE if (!quick) { initialize_readline((char*) my_progname); /* read-history from file, default ~/.mysql_history*/ if (getenv("MYSQL_HISTFILE")) histfile=my_strdup(PSI_NOT_INSTRUMENTED, getenv("MYSQL_HISTFILE"),MYF(MY_WME)); else if (getenv("HOME")) { histfile=(char*) my_malloc(PSI_NOT_INSTRUMENTED, (uint) strlen(getenv("HOME")) + (uint) strlen("/.mysql_history")+2, MYF(MY_WME)); if (histfile) sprintf(histfile,"%s/.mysql_history",getenv("HOME")); char link_name[FN_REFLEN]; if (my_readlink(link_name, histfile, 0) == 0 && strncmp(link_name, "/dev/null", 10) == 0) { /* The .mysql_history file is a symlink to /dev/null, don't use it */ my_free(histfile); histfile= 0; } } /* We used to suggest setting MYSQL_HISTFILE=/dev/null. */ if (histfile && strncmp(histfile, "/dev/null", 10) == 0) histfile= NULL; if (histfile && histfile[0]) { if (verbose) tee_fprintf(stdout, "Reading history-file %s\n",histfile); read_history(histfile); if (!(histfile_tmp= (char*) my_malloc(PSI_NOT_INSTRUMENTED, (uint) strlen(histfile) + 5, MYF(MY_WME)))) { fprintf(stderr, "Couldn't allocate memory for temp histfile!\n"); exit(1); } sprintf(histfile_tmp, "%s.TMP", histfile); } } #endif
Donc effectivement l’effet désiré est atteint, mais pas de la manière qu’on aurait imaginé 🙂 La façon la plus optimisée de faire quelque chose, ça reste toujours de ne pas le faire si on n’en a pas besoin…
Bonnes vacances à celles et ceux qui sont partis, et bon courage à celles et ceux qui sont restés.
A+ ~David
Continuez votre lecture sur le blog :
- Utiliser un fichier de configuration .psqlrc alternatif (David Baffaleuf) [PostgreSQL]
- Déplacer le répertoire de données (datadir) MySQL vers un nouvel emplacement sur Debian (Capdata team) [MySQL]
- La fin de mysql_upgrade à partir de MySQL 8.0.16 (Capdata team) [MySQL]
- Nouveautés MySQL 8.0 : Configuration automatique de variables avec innodb_dedicated_server (Capdata team) [MySQL]
- Quelles solutions de chiffrement de données pour MySQL / MariaDB (David Baffaleuf) [MySQL]