ERREUR 1698 (28000): accès refusé à l'utilisateur 'root' @ 'localhost'

382

J'installe un nouveau serveur et continue de rencontrer ce problème.

Lorsque j'essaie de me connecter à la base de données MySQL avec l'utilisateur root, j'obtiens l'erreur:

ERREUR 1698 (28000): accès refusé à l'utilisateur 'root' @ 'localhost'

Peu importe que je me connecte via le terminal (SSH), via PHPMyAdmin ou un client MySQL, par exemple Navicat. Ils échouent tous.

J'ai regardé dans la table mysql.user et obtenu ce qui suit:

+------------------+-------------------+
| user             | host              |
+------------------+-------------------+
| root             | %                 |
| root             | 127.0.0.1         |
| amavisd          | localhost         |
| debian-sys-maint | localhost         |
| iredadmin        | localhost         |
| iredapd          | localhost         |
| mysql.sys        | localhost         |
| phpmyadmin       | localhost         |
| root             | localhost         |
| roundcube        | localhost         |
| vmail            | localhost         |
| vmailadmin       | localhost         |
| amavisd          | test4.folkmann.it |
| iredadmin        | test4.folkmann.it |
| iredapd          | test4.folkmann.it |
| roundcube        | test4.folkmann.it |
| vmail            | test4.folkmann.it |
| vmailadmin       | test4.folkmann.it |
+------------------+-------------------+

Comme vous pouvez le voir, root devrait avoir accès.

Le serveur est assez simple, car j'ai essayé de résoudre ce problème depuis un certain temps maintenant ..

Il exécute Ubuntu 16.04.1 LTS avec Apache, MySQL et PHP, afin qu'il puisse héberger des sites Web et iRedMail 0.9.5-1, afin qu'il puisse héberger du courrier.

La connexion à la base de données MySQL fonctionne correctement avant d'installer iRedMail. J'ai également essayé, juste d'installer iRedMail, mais ensuite root, ne fonctionne pas non plus ...

Si quelqu'un pouvait me dire comment résoudre mon problème de connexion MySQL ou comment installer iRedMail, en plus d'une installation MySQL existante. Et oui, j'ai essayé les conseils d'installation et je ne trouve pas ces variables dans les fichiers de configuration.

Folkmann
la source
J'ai suivi ce lien et la première option a fonctionné pour moi: askubuntu.com/questions/763336/…
Mikael Arhelger
3
sudo mysql_secure_installationest le moyen le plus simple de résoudre ce problème
Sergey Ponomarev

Réponses:

1121

Certains systèmes comme Ubuntu, mysql utilise par défaut le plugin UNIX auth_socket .

Signifie essentiellement que: db_users l'utilisant, sera "auth" par les informations d'identification de l'utilisateur système. Vous pouvez voir si votre rootutilisateur est configuré comme ceci en procédant comme suit:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

Comme vous pouvez le voir dans la requête, l' rootutilisateur utilise le auth_socketplugin

Il existe 2 façons de résoudre ce problème:

  1. Vous pouvez configurer l'utilisateur root pour utiliser le mysql_native_passwordplugin
  2. Vous pouvez en créer un nouveau db_useravec vous system_user(recommandé)

Option 1:

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Option 2: (remplacez YOUR_SYSTEM_USER par le nom d'utilisateur que vous avez)

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

N'oubliez pas que si vous utilisez l'option # 2, vous devrez vous connecter à mysql comme nom d'utilisateur de votre système ( mysql -u YOUR_SYSTEM_USER)

Remarque: Sur certains systèmes (par exemple, Debian stretch) le plugin 'auth_socket' est appelé 'unix_socket' , donc la commande SQL correspondante devrait être:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Mise à jour: le commentaire de @ andy semble que mysql 8.xx a mis à jour / remplacé le auth_socketcar caching_sha2_passwordje n'ai pas de configuration système avec mysql 8.xx pour tester cela, mais les étapes ci-dessus devraient vous aider à comprendre le problème. Voici la réponse:

Un changement depuis MySQL 8.0.4 est que le nouveau plugin d'authentification par défaut est 'caching_sha2_password'. Le nouveau 'YOUR_SYSTEM_USER' aura ce plugin d'auth et vous pouvez vous connecter depuis le shell bash maintenant avec "mysql -u YOUR_SYSTEM_USER -p" et fournir le mot de passe de cet utilisateur à l'invite. Pas besoin de l'étape "UPDATE user SET plugin". Pour la mise à jour du plug-in d'authentification par défaut 8.0.4, voir https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/

zetacu
la source
5
L'option 1 a fonctionné pour moi. Mais ensuite, j'avais aussi besoin de courir sudo gedit /etc/phpmyadmin/config.inc.php. Ensuite, j'ai recherché AllowNoPasswordet décommenté les deux lignes qui le contenaient. Ensuite, j'ai pu me connecter en tant que root sans mot de passe.
Joe
7
L'option 2 fonctionne. Je pense que c'est toujours la meilleure pratique de créer un nouvel utilisateur et d'utiliser la racine de départ pour être là!
PasinduJay
2
le IDENTIFIED BY ''bit devrait probablement êtreIDENTIFIED BY 'YOUR_PASSWD'
YakovL
4
Enfin, une réponse qui fonctionne réellement !! Il y a un millier de réponses là-bas disant faire mysqld_safe --skip-grant-tablesetc., et cela ne fonctionne pas.
Stewart
4
Ok, comment faire ça, si sudo mysql -u root -pne me laisse pas entrer?
Hrvoje T
173

Vérifier ici:

La nouvelle version de MYSQL le fait de cette façon.

Dans le nouveau my-sql si le mot de passe est laissé vide lors de l'installation, il est basé sur le auth_socketplugin.

La bonne façon est de vous connecter à my-sql avec des sudoprivilèges.

$ sudo mysql -u root -p

Et puis mettre à jour le mot de passe en utilisant:

$ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

Une fois cela fait, stop and startle serveur mysql.

$  sudo service mysql stop
$  sudo service mysql start

Pour plus de détails, vous pouvez vous référer à ce lien .

Faites un commentaire pour tout doute.

Nandesh
la source
4
Cela a fonctionné pour moi en utilisant Ubuntu 18. Merci beaucoup.
Peter Drinnan
10
A aussi bien fonctionné sur ubuntu 18.04
sgtkuncoro
2
Exactement ce que je cherchais. Merci :) A travaillé sur Ubuntu 18
Manthan_Admane
2
cela a fonctionné comme un charme, lubuntu 19.04
Kvvaradha
3
Cela fonctionne bien. Le lien est utile.
kjohri
9

J'avais ce problème sur une machine virtuelle Debian 8 avec laquelle j'interagissais via Putty sur mon bureau Windows 10.

J'ai essayé les différentes suggestions ici mais rien n'a fonctionné et j'exécute MariaDB sur l'hôte Debian. À la fin, j'ai constaté que je ne pouvais pas démarrer le serveur db en mode sans échec, mais je n'en avais pas besoin et les commandes suivantes ont réellement fonctionné pour moi, c'est-à-dire permettre à un utilisateur MySql nouvellement créé de se connecter au serveur MySql / MariaDB:

sudo service mysql restart
sudo mysql # logs in automatically into MariaDB
use mysql;
update user set plugin='' where user='your_user_name';
flush privileges;
exit;
sudo service mysql restart # restarts the mysql service

Si ce qui précède ne fonctionne pas tout à fait pour vous, suivez les étapes décrites dans le post de zetacu ci-dessus ( zetacu ), puis suivez mes étapes.

Vous devriez maintenant pouvoir utiliser un client de terminal distant et vous connecter en toute sécurité à mysql en utilisant la commande:

mysql -u your_user_name -p

* tapez le mot de passe lorsque vous y êtes invité

Tahir Khalid
la source
C'est simple. Eh bien, seule la première commande ne permet pas d'exécuter la seconde, je vais donc l'ajuster en modifiant - s'il vous plaît voir si j'ai raison ...
kokbira
7

Je suggère de supprimer la connexion Mysql -

MISE À JOUR - Ceci est pour Mysql version 5.5, si votre version est différente, veuillez modifier la première ligne en conséquence

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

Et réinstallez Mais cette fois, définissez vous-même un mot de passe root. Cela vous fera économiser beaucoup d'efforts.

sudo apt-get update
sudo apt-get install mysql-server
Eminem347
la source
@ingernet peut-être à cause d'autres problèmes que vous avez négligés lors de la
réinstallation
@PJBrunet peut-être que votre version de Mysql est différente
Eminem347
Assez juste, mais une solution polyvalente est la meilleure.
PJ Brunet du
6

Après des heures de lutte sans solution ici, cela a fonctionné pour moi, puis j'ai trouvé une vidéo youtube où il est dit que la colonne de mot de passe s'appelle maintenant authentification_chaîne. J'ai donc pu changer mon mot de passe comme suit: Tout d'abord, accédez à mysql depuis le terminal

sudo mysql

puis à l'intérieur de mysql tapez quoi que ce soit après mysql>

mysql> use mysql
mysql> update user set authentication_string=PASSWORD("mypass") where user='root';
mysql> flush privileges;
mysql> quit;

à ce stade, vous avez quitté mysql pour revenir à votre emplacement de terminal normal. Vous devez redémarrer mysql pour que cela prenne effet. pour ce type, les éléments suivants:

sudo service mysql restart

Reportez-vous à ce lien vidéo pour une meilleure compréhension

Ameer Ul Islam
la source
5

étape 1. sudo mysql -u root -p

étape 2. USE mysql;

étape 3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

Ici, «admin» est votre nouveau mot de passe, vous pouvez le changer.

étape 4. exit

Merci. Vous avez terminé.

Y. Joy Ch. Singha
la source
5

Pas besoin de sudo

La base de données est initialisée avec 2 comptes tous privilèges: le premier est "root" qui est inaccessible et le second avec votre nom d'utilisateur (vérifiez avec la commande whoami).

Pour activer l'accès au compte root, vous devez vous connecter avec votre nom d'utilisateur

mysql -u $(whoami)

et changer manuellement le mot de passe pour root

use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit

Connectez-vous en tant que «root»

mysql -u root -p
Raoul HATTERER
la source
Vous êtes la bonne réponse pour la version actuelle de mysql, merci!
Hugo S
3

Première étape: allez dans /etc/phpmyadmin/config.inc.php puis décommentez les lignes où vous trouvez AllowNoPassword. Deuxième étape: connectez-vous à votre compte par défaut mysql

mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;

et c'est tout!

Ángel Ugarte
la source
3

Cela a fonctionné pour moi:

mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Dorad
la source
3

J'ai également rencontré le même problème la première fois.

Maintenant, il est corrigé:

Tout d'abord, vous copiez le /etc/mysql/mysql.conf.d/mysqld.cnffichier et le collez dans /etc/mysql/my.cnf.

Vous pouvez le faire par commande:

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf

Maintenant, reposons le mot de passe:

Utilisez les commandes suivantes dans votre terminal:

sudo service mysql stop 
sudo service mysql start
sudo mysql -u root

Vous êtes maintenant dans la console mysql.

Écrivons ensuite quelques requêtes pour réinitialiser notre mot de passe root

USE mysql
update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password"; 
flush privileges;
quit

Maintenant, nous pouvons nettoyer /etc/mysql/my.cng

Ouvrez le fichier ci-dessus dans votre éditeur et supprimez toutes les lignes à l'intérieur du fichier.

Après cela, redémarrons mysql:

sudo mysql service restart 

Utilisons maintenant mysql avec le nouveau mot de passe créé:

sudo mysql -u root -p

Saisissez enfin votre nouveau mot de passe.

muhammed fairoos nm
la source
1
A bien fonctionné! mais votre réponse doit être mise à jour !! /etc/mysql/my.cnf et non /etc/mysql/my.cng et pour le service redémarrer son service sudo mysql restart
essaioub
3

J'ai trouvé ma solution après des heures de recherche ici.

Arrêtez MySQL

sudo service mysql stop

Créez le répertoire du service MySQL.

sudo mkdir /var/run/mysqld

Donnez à l'utilisateur MySQL la permission d'écrire dans le répertoire du service.

sudo chown mysql: /var/run/mysqld

Démarrez MySQL manuellement, sans vérification des autorisations ni mise en réseau.

sudo mysqld_safe --skip-grant-tables --skip-networking &

Connectez-vous sans mot de passe.

 mysql -uroot mysql

mettre à jour le mot de passe

UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
EXIT;

Désactivez MySQL.

sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

Démarrez le service MySQL normalement.

sudo service mysql start
Sanjun Dev
la source
Cela m'a donné une invite mysql quand rien d'autre ne le ferait! Merci!
UserX
2

Vous souhaitez accéder à MySQL avec l'utilisateur root mais vous ne fournissez pas le mot de passe correct de root.

Si vous devez définir un nouveau mot de passe pour root , le site de MySQL a une excellente documentation sur la façon de le faire: http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

Je ne montrerai pas le processus ici car la documentation MySql sur le lien ci- dessus est claire et concise .

Cristian Gonçalves
la source
Merci pour la réponse, mais je n'ai pas pu le faire fonctionner, j'ai donc choisi d'installer iRedMail avec une base de données pgSQL à la place.
Folkmann
Roger Folkman! Bon à savoir que vous avez résolu votre problème.
Cristian Gonçalves
Les liens se brisent. mysql.com a eu de nombreux liens rompus au fil des ans. Vous devez copier et coller les informations pertinentes ici, ce qui est bien tant que vous attribuez la source.
Goose
1

os: Ubuntu18.04

mysql: 5.7

  1. ajouter le skip-grant-tablesfichier à la fin de mysqld.cnf

  2. cp le my.cnf

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
  1. réinitialiser le mot de passe
(base)   ~ sudo service mysql stop 
(base)   ~ sudo service mysql start
(base)   ~ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed, 3 warnings
mysql> update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> update user set plugin="mysql_native_password"; 
Query OK, 0 rows affected (0.00 sec)
Rows matched: 4  Changed: 0  Warnings: 0

mysql>  flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye
  1. supprimer le skip-grant-tablesde my.cnf
(base)   ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf 
(base)   ~ sudo emacs /etc/mysql/my.cnf                 
(base)   ~ sudo service mysql restart
  1. ouvrir le mysql
(base)   ~ mysql -uroot -ppassword 
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
  1. vérifier la politique de mot de passe
mysql> select @@validate_password_policy;
+----------------------------+
| @@validate_password_policy |
+----------------------------+
| MEDIUM                     |
+----------------------------+
1 row in set (0.00 sec)


mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
6 rows in set (0.08 sec)!
  1. changer la config du validate_password
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.05 sec)

mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_number_count=3;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password_length=3;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file    |       |
| validate_password_length             | 3     |
| validate_password_mixed_case_count   | 0     |
| validate_password_number_count       | 3     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 0     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)

notez que vous devez savoir que votre erreur est due à quoi? validate_password_policy?

vous devez décider de réinitialiser votre mot de passe pour remplir la politique ou modifier la politique.

iamcxl
la source
0

Cela est arrivé à moi aussi. Le problème vient du repo mysql qui vient déjà avec la distribution linux. Donc, quand vous le faites simplement: $ sudo apt install mysql-server il installe mysql à partir de leur dépôt par défaut, ce qui pose ce problème. Donc, pour surmonter cela, vous devez désinstaller ce mysql installé $ sudo apt remove mysql* --purge --auto-remove

Ensuite, téléchargez le référentiel mysql sur le site officiel de mysql MySQL APT Repo Suivez leur documentation sur la façon d'ajouter le référentiel et de l'installer. Cela ne pose aucun problème. Aussi comme répondu par @zetacu, vous pouvez vérifier que la racine mysql utilise bien le plugin mysql_native_password

sudip
la source
0

dans mon cas,

dev@Dev-007:~$ mysql -u root -p
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Je suis sûr que mon mot de passe était correct, sinon le code d'erreur serait ERROR 1045 (28000): Access denied for user

donc je me reconnecte en utilisant sudo,

dev@Dev-007:~$ sudo mysql -u root -p

cette fois, cela a fonctionné pour moi. voir les documents

puis changer le mot de passe root,

mysql> alter user 'root'@'%' identified with mysql_native_password by 'me123';
Query OK, 0 rows affected (0.14 sec)

mysql> 

puis redémarrez le serveur en utilisant sudo /etc/init.d/mysql restart

Mohideen bin Mohammed
la source