Accès refusé pour l'utilisateur 'test' @ 'localhost' (en utilisant le mot de passe: OUI) sauf l'utilisateur root

100

Je suis confronté à un problème avec mysql utilisateur non root / admin, je suis les étapes ci-dessous pour créer un utilisateur et ses privilèges, corrigez-moi si je me trompe,

j'installe mysqlsur RHEL 5.7 64bit, les paquets sont mentionnés ci-dessous, une fois que j'ai fait le rpm installnous sommes

  1. création de mysql db en utilisant mysql_install_db, puis
  2. démarrer le service mysql puis
  3. en utilisant mysql_upgradeaussi nous faisons au serveur.

Après ce processus, je peux rootme connecter en tant que mais avec un utilisateur non root, je ne peux pas me connecter au serveur:

[root@clustertest3 ~]# rpm -qa | grep MySQL
MySQL-client-advanced-5.5.21-1.rhel5
MySQL-server-advanced-5.5.21-1.rhel5


[root@clustertest3 ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[root@clustertest3 ~]# ls -ld /var/lib/mysql/mysql.sock
srwxrwxrwx 1 mysql mysql 0 Nov  30 11:09 /var/lib/mysql/mysql.sock

mysql> CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT USER(),CURRENT_USER();
+----------------+----------------+
| USER()         | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
1 row in set (0.00 sec)

[root@clustertest3 ~]# mysql -ugolden -p
Enter password:
ERROR 1045 (28000): Access denied for user 'golden'@'localhost' (using password: YES)

C'est le problème auquel je suis confronté, y a-t-il une solution à cela?

utilisateur3061726
la source
Pouvez-vous vous connecter en tant que root puis le faireSELECT * FROM mysql.user
Noam Rathaus
1
Acceptez la réponse qui a fonctionné pour vous, afin que les autres utilisateurs sachent comment vous avez résolu votre problème.
Utilisateur qui n'est pas un utilisateur

Réponses:

59

N'accordez pas tous les privilèges sur toutes les bases de données à un utilisateur non root, ce n'est pas sûr (et vous avez déjà "root" avec ce rôle)

GRANT <privileges> ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Cette instruction crée un nouvel utilisateur et lui accorde les privilèges sélectionnés. C'EST À DIRE:

GRANT INSERT, SELECT, DELETE, UPDATE ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Jetez un œil à la documentation pour voir tous les privilèges détaillés

EDIT: vous pouvez rechercher plus d'informations avec cette requête (connectez-vous en tant que "root"):

select Host, User from mysql.user;

Pour voir ce qui s'est passé

Alberto Megía
la source
Je ne suis pas d'accord avec cette affirmation sur la racine. Oui, vous ne devriez pas donner de super privilèges bon gré mal gré. Cependant, vous ne devez généralement pas utiliser de comptes partagés car vous n'avez pas de piste d'audit appropriée dans la base de données. Si vous devez avoir des comptes partagés tels que root, vous avez besoin d'autres éléments pour vous assurer que la piste d'audit est intacte.
krad le
36

Si vous vous connectez à MySQL à l'aide d'une machine distante (exemple de plan de travail), etc., utilisez les étapes suivantes pour éliminer cette erreur sur le système d'exploitation sur lequel MySQL est installé

mysql -u root -p

CREATE USER '<<username>>'@'%%' IDENTIFIED BY '<<password>>';
GRANT ALL PRIVILEGES ON * . * TO '<<username>>'@'%%';
FLUSH PRIVILEGES;

Essayez de vous connecter à l'instance MYSQL.
Cela a fonctionné pour moi pour éliminer cette erreur.

Makarand Kulkarni
la source
1
Cela ne fonctionne même pas, car cela provoque l'erreur même lors de l'exécution de "mysql -u root -p"
Marian Klühspies
25

Essayer:

CREATE USER 'golden'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'localhost';
FLUSH PRIVILEGES;

Ou encore meilleure utilisation: mysql_setpermissionpour créer l'utilisateur

Noam Rathaus
la source
1
Cela ne résout pas le problème. CREATE USER 'goldy' @ '%' IDENTIFIED BY 'some_pass'; est une requête valide
pratim_b
Pour une raison quelconque, ce %qui devrait fonctionner pour tous les hôtes, ne le résout pas. Donc, en spécifiant localhostcela devrait fonctionner. Si cela ne fonctionne PAS, quelque chose ne va pas dans mysql
Noam Rathaus
13

Il semble que vous essayez de créer un utilisateur "golden" @ "%" mais un utilisateur différent du nom de "golden" @ "localhost" gêne / a la priorité.

Exécutez cette commande pour voir les utilisateurs:

SELECT user,host FROM mysql.user;

Vous devriez voir deux entrées:

1) utilisateur = doré, hôte =%

2) utilisateur = golden, host = localhost

Faites ces commandes:

DROP User 'golden'@'localhost';
DROP User 'golden'@'%';

Redémarrez MySQL Workbench.

Puis refaites vos commandes d'origine:

CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';

Ensuite, lorsque vous essayez de vous connecter à MySQL, saisissez-le comme ceci:

entrez la description de l'image ici

Appuyez sur «Tester la connexion» et entrez votre mot de passe «mot de passe».

Gène
la source
2
C'est la seule solution que j'ai trouvée ici qui ait une certaine signification. Merci bon monsieur.
Sumuk Shashidhar
8

J'ai d'abord créé l'utilisateur en utilisant:

CREATE user user@localhost IDENTIFIED BY 'password_txt';

Après avoir googlé et vu cela , j'ai mis à jour le mot de passe de l'utilisateur en utilisant:

SET PASSWORD FOR 'user'@'localhost' = PASSWORD('password_txt');

et je pourrais me connecter par la suite.

ako
la source
3

Pour tous ceux qui ont fait tous les conseils mais le problème persiste.

Recherchez la procédure stockée et affichez DEFINERS. Ces définisseurs peuvent ne plus exister.

Mon problème est apparu lorsque nous avons changé l'hôte générique (%) en IP spécifique, ce qui a rendu la base de données plus sécurisée. Malheureusement, certaines vues utilisent encore 'user' @ '%' même si 'user' @ '172 ....' est techniquement correct.

Yorro
la source
Merci de m'avoir mis sur la bonne voie. Je ne connaissais même pas le paramètre de sécurité SQL sur les vues et les procédures stockées. J'ai fini par configurer SQL Security sur Invoker sur mes vues afin qu'il utilise les autorisations de l'utilisateur exécutant la commande plutôt que de l'utilisateur qui crée la vue. Voici un lien pour référence: dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html
Justin
2

J'ai aussi le même problème, et plus tard j'ai découvert que c'était parce que j'avais changé de nom d'hôte (pas localhost).

Par conséquent, je le résolve en spécifiant le --host=127.0.0.1

mysql -p mydatabase --host=127.0.0.1
4af2e9eb6
la source
2

Assurez-vous que l'utilisateur dispose d'une entrée localhost dans la table des utilisateurs. C'était le problème que j'avais. EX:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
RyanT
la source
1

Selon la façon dont vous créez votre utilisateur, MySQL l'interprète d'une manière différente. Par exemple, si vous créez un utilisateur comme celui-ci:

create user user01 identified by 'test01';

MySQL s'attend à ce que vous accordiez des privilèges en utilisant grant all on <your_db>.* to user01;

N'oubliez pas de flush privileges;

Mais, si vous créez un utilisateur comme ça (en passant une adresse IP), vous devez le changer en:

create user 'user02'@'localhost' identified by 'teste02';

donc, pour donner certains privilèges, vous devez le faire:

grant all on <your_db>.* to user02@localhost;
flush privileges;
Antonio Marcos
la source
0

Dans mon cas, la même erreur se produit parce que j'essayais d'utiliser mysql en tapant simplement "mysql" au lieu de "mysql -u root -p"

lfvv
la source
0

connectez votre serveur à partir de mysqlworkbench et exécutez cette commande-> ALTER USER 'root' @ 'localhost' IDENTIFIED BY 'yourpassword';

Sachin
la source
0

Pour une recherche ennuyeuse arriver ici après avoir recherché ce message d'erreur:

Accès refusé pour l'utilisateur 'someuser @ quelque part' (en utilisant le mot de passe: OUI)

Le problème pour moi n'était pas de mettre le mot de passe entre guillemets. par exemple. J'avais besoin d'utiliser -p'password'au lieu de-ppassword

routeburn
la source
-8

Ajoutez simplement le nom de l'ordinateur au lieu de «localhost» dans le nom d'hôte ou l'adresse de l'hôte MySQL.

vipin
la source