Pourquoi ne puis-je pas me connecter à MySQL avec un nouvel utilisateur disposant d'autorisations sur la base de données?

1

J'ai créé un utilisateur dans MySQL mais je ne peux pas me connecter avec.

MariaDB [(none)]> create user fe_joomla;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant all on fe_joomla.* to fe_joomla;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show grants for fe_joomla;
+----------------------------------------------------------+
| Grants for fe_joomla@%                                   |
+----------------------------------------------------------+
| GRANT USAGE ON *.* TO 'fe_joomla'@'%'                    |
| GRANT ALL PRIVILEGES ON `fe_joomla`.* TO 'fe_joomla'@'%' |
+----------------------------------------------------------+
2 rows in set (0.00 sec)

$ mysql -u fe_joomla fe_joomla
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'fe_joomla'

J'ai suivi ce guide. http://www.mysqltutorial.org/mysql-grant.aspx

Chloe
la source
Je ne vois pas où vous avez défini un mot de passe.
Michael - sqlbot
Essayez juste mysql -u fe_joomla sans spécifier une base de données; si cela fonctionne, la base de données n'existe pas et vous devez la créer avant que tout utilisateur puisse y accéder. A-t-il vraiment dit user ''@'localhost' avec rien dans le ''?? @ Michael-sqlbot: il ne l'a pas fait et c'est la raison pour laquelle 1044 pas 1045. MySQL prend en charge les utilisateurs sans mot de passe, bien que utilisation eux est une question différente.
dave_thompson_085
@ dave_thompson_085 excellent oeil. J'ai mal interprété la tentative de connexion en tant que mysql -u fe_joomla -pfe_joomla et j'ai aussi négligé ''@'localhost' c'est pourquoi j'ai posé une question qui n'avait aucun sens. Tout comme les mots de passe vides, il y a ce méchant utilisateur de chaîne vide créé par défaut dans les anciennes versions (à moins que vous n'exécutiez mysql_secure_installation ) est en correspondance.
Michael - sqlbot

Réponses:

1

Les anciennes versions de MySQL comportaient des comptes de test avec des noms d'utilisateurs vides créés par défaut. Ils étaient pour la plupart inoffensifs, mais très problématiques. Il y avait un script appelé mysql_secure_installation cela a nettoyé cela, et on dirait qu'il n'a pas été exécuté lorsque votre système a été configuré.

Exécutez cette requête pour confirmer:

mysql> SELECT * FROM mysql.user WHERE user = '';

Notez que '' est deux caractères de citation simple ' pas un double devis ".

Après avoir vérifié que vous avez une sauvegarde complète pour des raisons de sécurité, supprimez ces comptes de test. (Cela devrait être une opération parfaitement sûre, mais une sauvegarde est une bonne pratique.)

mysql> DELETE FROM mysql.user WHERE user = '';
mysql> FLUSH PRIVILEGES;

Le problème avec ces comptes de test est qu’il existe un comportement magique lorsqu’il s’agit de faire correspondre les noms d’utilisateur, et un nom d’utilisateur vide a une signification particulière. C’était une mauvaise fonctionnalité qui avait probablement été ajoutée à l’origine pour faciliter la mise en route.

Après cela, votre nouvel utilisateur devrait fonctionner correctement ... mais notez que vous ne devriez pas créer de compte sans mot de passe.

Michael - sqlbot
la source
0

Il semble que vous n'ayez pas entré la commande "privilèges de vidage" pour activer le nouvel utilisateur sans redémarrer.

davidgo
la source
Je suis entré cela ailleurs mais je ne l'ai pas copié dans la question. Cela n'a pas semblé aider.
Chloe
Dans ce cas, je suis à court d'idées - sauf pour noter que d'après le message d'erreur, MariaDB ne pensait pas que vous l'ayez fait, mais vous lui avez fourni un nom d'utilisateur. (Je remarque que vous n'utilisez pas MySQL, MariaDB est un remplacement instantané de MySQL)
davidgo
0

J'ai abandonné l'utilisateur fe_joomla et l'ai recréé en tant que fe_joomla@localhost et accordé des privilèges à fe_joomla@localhost et cela a fonctionné. je pourrais utiliser mysql -u fe_joomla fe_joomla à présent.

create user fe_joomla@localhost;
grant all on fe_joomla.* to fe_joomla@localhost;

La réponse de Michael fonctionnerait probablement aussi.

Chloe
la source