web-dev-qa-db-fra.com

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

Alors ... je configure un nouveau serveur et continue à rencontrer ce problème.

Lorsque j'essaie de me connecter à la base de données MySQL avec l'utilisateur root, l'erreur "ERREUR 1698 (28000): accès refusé pour l'utilisateur" root "@" localhost "" s'affiche.

Peu importe si 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 j'ai 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 moment maintenant.

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

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

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

Toute aide est très appréciée :)

167
Folkmann

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

Cela signifie fondamentalement que: db_utilisateurs l’utilisant, sera "authentifié" par les identifiants de l’utilisateur système. Vous pouvez voir si votre utilisateur root 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 constater dans la requête, l’utilisateur root utilise le plugin auth_socket.

Il y a 2 façons de résoudre ceci: 

  1. Vous pouvez configurer l'utilisateur root pour qu'il utilise le plugin mysql_native_password
  2. Vous pouvez créer un nouveau db_user avec 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 en tant que nom d'utilisateur de votre système (mysql -u YOUR_SYSTEM_USER).

Remarque: Sur certains systèmes (par exemple, une extension Debian), le plug-in 'auth_socket' est appelé 'unix_socket' , de sorte que la commande SQL correspondante doit être: UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

Update: Le commentaire de @ andy semble indiquer que mysql 8.xx a mis à jour/remplacé le auth_socket pour caching_sha2_password Je n'ai pas de configuration système avec mysql 8.xx pour le tester, mais les étapes ci-dessus devraient vous aider pour 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 auth et vous pouvez maintenant vous connecter depuis le shell bash avec "mysql -u YOUR_SYSTEM_USER -p" et fournir le mot de passe de cet utilisateur sur l'invite. Pas besoin de l'étape "UPDATE user SET plugin". Pour la mise à jour du plug-in auth par défaut 8.0.4, voir https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/

581
zetacu

Vérifier ici:

NEW La 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 plugin auth_socket.

La méthode correcte consiste à vous connecter à my-sql avec le privilège Sudo.

$ 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 que cela est fait, stop and start le 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.

51
Nandesh

Je suggère de supprimer la connexion Mysql -

UPDATE-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 installez à nouveau Mais cette fois, définissez vous-même un mot de passe root… .. Cela vous épargnera beaucoup.

Sudo apt-get update
Sudo apt-get install mysql-server
7
Eminem347

J'avais ce problème sur une Debian 8 VM avec laquelle j'interagissais via PuTTY sur le bureau Windows 10.

J'ai essayé les différentes suggestions ici mais rien n’a vraiment fonctionné et je lance MariaDB sur l’hôte Debian. En fin de compte, j’ai constaté que je ne pouvais pas démarrer le serveur de base de données en mode sans échec mais je n’en avais pas besoin et les commandes suivantes fonctionnaient réellement 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 vraiment pour vous, suivez les étapes décrites dans le message de zetacu ci-dessus ( zetacu ), puis suivez mes étapes.

Maintenant, vous devriez pouvoir utiliser un client 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é

5
Tahir Khalid

J'ai aussi fait face au même problème la première fois.

Maintenant, il est corrigé:

Commencez par copier le fichier /etc/mysql/mysql.conf.d/mysqld.cnf et le coller dans /etc/mysql/my.cnf.

Vous pouvez le faire par commande:

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

Reste maintenant 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.

Puis écrivons 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 qu'il contient.

Après cela, redémarrez mysql:

Sudo mysql service restart 

Maintenant, utilisons mysql avec le nouveau mot de passe:

Sudo mysql -u root -p

Enfin, entrez votre nouveau mot de passe.

1
muhammed fairoos nm

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

Si vous avez besoin de définir un nouveau mot de passe pour root, le site de MySQL propose une excellente documentation sur la procédure à suivre: http://dev.mysql.com/doc/refman/5.7/fr/resetting- permissions.html

Je vais ne pas montrer le processus ici parce que documentation MySql sur le lien ci-dessus c'est clair et concis.

1

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;
1
Dorad

é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é.

1
Y. Joy Ch. Singha

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

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

et c'est tout!

0
Ángel Ugarte

os: Ubuntu18.04

mysql: 5.7

  1. ajoutez le skip-grant-tables au fichier end 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 leskip-grant-tables de 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 configuration 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)

note vous devriez savoir que votre erreur est causée par quoi? validate_password_policy?

vous devriez décider de réinitialiser votre mot de passe pour remplir la stratégie ou modifier la stratégie.

0
iamcxl

Cela est arrivé à moi aussi. Le problème est avec le repo mysql qui est déjà fourni avec la distribution linux. Donc, quand vous 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 le mysql installé $ Sudo apt remove mysql* --purge --auto-remove

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

0
sudip