Phpmyadmin : accès root refusé

Bonjour,

Je viens d’installer LAMP (MariaDB) sur Debian 9.
Je peux me connecter à phpmyadmin sous utilisateur “phpmyadmin”, mais alors je ne puis créer de BD (No Privileges).
Je tente donc de me connecter à phpmyadmin sous utilisateur “root”, mais la connexion m’est refusée (#1698 - Access denied for user ‘root’@‘localhost’).
Pourquoi mon accès en root est-il refusé ?

Merci

c’est la sécurité avec maria DB tu peux te loguer à ta DB et donner les acces root a toi de voir

update mysql.user set plugin = ‘’ where User=‘root’;
flush privileges;

Merci pour ta proposition jimbo. Mais avant de l’appliquer j’aimerais la comprendre. Elle écrit quoi dans quel fichier cette ligne de commande ?

elle ecri pas dans un fichier, c’est une commande mysql, elle sert aussi a changer le password d’un user mysql

Cette commande vide le contenu de la variable plugin pour l’utilisateur root dans la table mysql.user. Or si je fais

# mysql

MariaDB [(none)]> show grants for 'root'@'localhost';
+------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                      |
+------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED VIA unix_socket WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION                                  |
+------------------------------------------------------------------------------------------------+

MariaDB [(none)]> SELECT user , Password , plugin  FROM mysql.user;
+------------+-------------------------------------------+-------------+
| user       | Password                                  | plugin      |
+------------+-------------------------------------------+-------------+
| root       |                                           | unix_socket |
| phpmyadmin | *142FXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1A784 |             |
+------------+-------------------------------------------+-------------+

Le plugin unix_socket permet de reproduire dans la BD les droit d’utilisateurs reconnus par le SE [https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/] .

D’autre part mariadb semble configuré par défaut pour refuser l’accès à
$ mariadb -u root -p
Si je comprends bien c’est grâce au plugin unix_socket que, malgré cette config par défaut, l’accès est autorisé pour
# mariadb -u root -p

La meilleure solution semble être de créer un troisième utilisateur (autre que root et phpmyadmin) et de lui donner tous les droits sur la DB :

D’autre solutions proposées (mais que je n’ai pas testées) consistent à donner un pw spécifique à root, ou encore de changer/écraser le plugin unix_socket (https://stackoverflow.com/questions/28068155/access-denied-for-user-rootlocalhost-using-password-yes-after-new-instal) … mais cela revient à contourner la config originelle de mariadb, qui a pour motivation de maximiser la sécurité.

Bonjour,

Personnellement, je trouve que cette solution est la meilleure ne serait-ce que pour la sécurité. Un “attaquant” devra connaitre et le nom d’utilisateur et le mot de passe pour se connecter.

tu peux aussi restreintre l’acces par IP à la base et par user. Les attaques se font encore bien par injection dans du code pourrave plutot qu’en brutforce sur le login qui ne verra jamais le jour si le password est fort.

donc voir aussi du cote de mod_secure, ne pas publier le vhost phpmyadmin pour tout le monde, le restreindre aussi par ip, c est facile avec l’option IP requiere de Apache 2.4 et ajouter fail2ban.

Il vaut mieux créer un utilisateur.

Sans le plugin unix_socket ( mysql.user set plugin = ‘’ ) on obtient une erreur :

/etc/cron.daily/logrotate:
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
error: error running shared postrotate script for '/var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log /var/log/mysql/mariadb-slow.log /var/log/mysql/error.log '
run-parts: /etc/cron.daily/logrotate exited with return code 1