Soucis de connexion MySQL access denied

mysql
Tags: #<Tag:0x00007fdf1dc63c58>

#1

Bonjour la compagnie,

J’ai eu dernièrement quelques soucis avec MySQL.
Histoire de ne pas mettre le bordel, j’ai procédé à une désinstallation propre.

Ensuite, j’ai donc réinstallé MySQL > MariaDB.
A la fin de l’installation, j’ai lancé la commande mysql_secure_installation histoire de faire les choses proprement.
Histoire de tester, une fois tout terminé, j’ai lancé la commande mysql et là… c’est le drame:
ERROR 1698 (28000): Access denied for user ‘chris’@‘localhost’

J’ai jamais vraiment touché à la configuration de MySQL donc je suis un peu paumée


#2

La connexion avec root est disponible ?

Tu as un dump de ta/tes base(s) ?

Tu ne précise pas non plus ta version :wink:


#3

Arg, manque d’infos, désolée.

Bon alors… comme je le disais, si je fais : mysql -v (sans root), j’ai l’erreur suivante:
Access denied for user ‘chris’@'localhost’

La même commande, en root, passe nickel et j’obtiens l’output suivant:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 10.1.37-MariaDB-0+deb9u1 Debian 9.6

Au niveau du dump, je ne suis pas certaine mais… en recherchant, j’ai effectivement un dossier “dump” dans /home/username/dump. Cela a-t-il un impact ?

Pour être totalement complète, j’ai utilisé ce tuto pour installer mariadb: [https://linuxize.com/post/how-to-install-mariadb-on-debian-9/](http://How to install MariaDB on debian 9)

La raison pour laquelle j’ai souhaité désinstaller/réinstaller mariadb: je travaille sur un projet symfony, et pour la création de database, j’utilise la commande php bin/console doctrine:database:create comme je le fais depuis des années, avec mon utilisateur (sous entendu sans root).
Sauf que… sans savoir pourquoi, si je lance la commande, j’ai l’erreur "Access denied for user ‘chris’@‘localhost’

Merci


#4

Une fois connecté sur ta base de donnée avec l’utilisateur root regarde les droits de ton utilisateur ainsi que les host relié à cet utilisateur qui conditionne donc l’accès avec cet utilisateur.

Pour vérifier les droits de ton utilisateur :

SELECT * FROM mysql.user WHERE user like '%chris%'\G

Pour lister de puis où quel utilisateur est enregistré :

SELECT User,Host FROM mysql.user;

Je me suis pas mal creusé la tête avec dernièrement avec les dernières version de Mysql et de MariaDB, il y a pas mal de chose qui change y compris les variables character_set et les variables colation.
La gestion des droits à pas trop évolué du moment que tu utilisé des versions de MySQL pas trop vieillottes.

Si tu n’a pas configuré correctement ton fichier host il est possible que localhost ou 127.0.0.1 ne permette pas la connexion à ton serveur de base de données, à tester avec un client MySQL depuis une machine distante aussi après avoir autorisé bien entendu cette IP.


#5

J’imagine que quand tu fais mysql -v (le -v c’est pour verbose, si tu veux juste afficher la version de mysql c’est -V), mysql va chercher à mapper l’utilisateur système qui exécute la commande avec un rôle de base de données qui a le même nom. Donc si tu as un rôle chris dans ta base de données, c’est bon, sinon l’erreur est normale.

Deux petites choses en plus: mysql_secure installation est une bonne idée, mais n’est pas suffisant pour protéger une BDD mysql/mariadb: la preuve tu peux te connecter au rôle root sans donner de mot de passe. Tu peux regarder ici pour y remédier.

La commande standard pour se connecter à une base de données mysql locale:
mysql -u <utilisateur de base de données> -p <nom de la base de données>
Le -p permet d’informer mysql qu’on veut se connecter avec un mot de passe, qui sera demandé.