web-dev-qa-db-fra.com

Accès refusé pour l'utilisateur 'root' @ 'localhost' (avec le mot de passe: YES) après une nouvelle installation sur Ubuntu

Aujourd'hui, je me suis connecté en tant que root dans Ubuntu 14.04.1 LTS II.

puis apt-get install mariadb-server (sans Sudo mais en tant que root).

Avec mySQL -h localhost -u root --password=<PW> j'ai eu

Accès refusé pour l'utilisateur 'root' @ 'localhost' (avec mot de passe: YES)

Avec mySQL -u root -p je me suis connecté à la base de données et

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<PW>';
FLUSH ALL PRIVILEGES;

Mais cela n'a pas aidé. Avez-vous une idée? Je n'ai pas trouvé de réponse aux questions similaires.

86
SQL-Neuling

TL; DR: Pour accéder aux versions les plus récentes de mysql/mariadb après, en tant qu’utilisateur root, après une nouvelle installation, vous devez vous trouver dans un shell racine ( c'est-à-dire Sudo mysql -u root ou mysql -u root dans un shell démarré par su - ou Sudo -i en premier)


Venant juste de faire la même mise à niveau, sur Ubuntu, j'ai eu le même problème.

Ce qui était étrange était que

Sudo /usr/bin/mysql_secure_installation

Accepterais mon mot de passe et me permettrais de le définir, mais je ne pouvais pas me connecter en tant que root via le client mysql

Je devais commencer mariadb avec

Sudo mysqld_safe --skip-grant-tables

pour obtenir un accès en tant que root, alors que tous les autres utilisateurs peuvent toujours accéder à amende.

En regardant la table mysql.user que j'ai remarquée pour root, la colonne plugin est définie sur unix_socket, tandis que tous les autres utilisateurs sont définis sur 'mot_passe_sQL_natif'. Un rapide coup d'œil sur cette page: https://mariadb.com/kb/en/mariadb/unix_socket-authentication-plugin/ explique que le socket Unix permet de se connecter en faisant correspondre uid of le processus exécutant le client avec celui de l'utilisateur dans la table mysql.user. En d'autres termes, pour accéder à mariadb en tant que root, vous devez être connecté en tant que root.

Assez sûr de redémarrer mon démon mariadb avec l’authentification requise, je peux me connecter en tant que root avec

Sudo mysql -u root -p

ou

Sudo su -
mysql -u root -p

Après avoir fait cela, j'ai réfléchi à la façon d’accéder sans avoir à faire le Sudo, qui est juste une question d’exécution de ces requêtes mysql

GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;

(en remplaçant <password> par votre mot de passe root mysql souhaité). Cela a permis les connexions par mot de passe pour l'utilisateur root.

Vous pouvez également exécuter la requête mysql:

UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;

Change le compte root pour qu'il utilise l'identifiant de mot de passe sans changer le mot de passe, mais cela peut vous laisser avec une installation de mysql/mariadb sans mot de passe root.

Après cela, vous devez redémarrer mysql/mariadb:

Sudo service mysql restart

Et voila j'avais accès depuis mon compte personnel via mysql -u root -p

VEUILLEZ NOTER QUE FAIRE CE IS RÉDUIRE LA SÉCURITÉ Les développeurs de MariaDB ont probablement opté pour un tel accès pour une bonne raison.

En y réfléchissant, je suis assez heureux de devoir Sudo mysql -u root -p alors je reviens à cela, mais je pensais publier ma solution car je ne pouvais pas en trouver une ailleurs.

222
DorianFM

Dans Ubuntu 16.04 LTS, MariaDB racine connexion pour localhost est passée du style de mot de passe au style de connexion Sudo ...

alors fais juste

Sudo mysql -u root

puisque nous voulons nous connecter avec un mot de passe, créez un autre utilisateur 'utilisateur'

dans la console MariaDB ... (vous obtenez dans la console MariaDB avec 'Sudo mysql -u root')

use mysql
CREATE USER 'user'@'localhost' IDENTIFIED BY 'yourpassword';
\q

puis à l'invite du shell bash,

mysql-workbench

et vous pouvez vous connecter avec 'user' avec 'yourpassword' sur localhost

35
Curycu

Essayez la commande

Sudo mysql_secure_installation

appuyez sur Entrée et attribuez un nouveau mot de passe pour root dans mysql/mariadb.

Si vous obtenez une erreur comme

ERREUR 2002 (HY000): Impossible de se connecter au serveur MySQL local via le socket '/var/run/mysqld/mysqld.sock'

activer le service avec

service mysql start

maintenant si vous rentrez avec

mysql -u root -p

si vous suivez le problème, entrez avec Sudo su et mysql -u root -p maintenant appliquez les autorisations à root

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '<password>';

cela a résolu mon problème dans MariaDB.

Bonne chance

9
IsraelM17

Je devais être connecté à Ubuntu en tant que root pour pouvoir accéder à Mariadb en tant que root. Cela peut avoir quelque chose à voir avec ce "Harden ..." qu'il vous invite à faire lors de la première installation. Alors:

$ Sudo su
[Sudo] password for user: yourubunturootpassword
# mysql -r root -p
Enter password: yourmariadbrootpassword

et vous êtes dans.

3
Joe C

J'ai déjà eu un problème similaire. Dans mon cas, cela s’est produit parce que j’ai en quelque sorte corrompu ma table d’utilisateurs du serveur MySQL.

Cet article m'a aidé: mysql-comment-réparer-Access-refusé-pour-utilisateur-'racine' @ 'localhost'

Fondamentalement, vous devez réinitialiser l'utilisateur root.

2
fishi0x01

La nouvelle commande permettant de vider les privilèges est la suivante:

FLUSH PRIVILEGES

L'ancienne commande FLUSH ALL PRIVILEGES ne fonctionne plus.

Vous obtiendrez une erreur qui ressemble à ceci:

MariaDB [(none)]> FLUSH ALL PRIVILEGES; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ALL PRIVILEGES' at line 1

J'espère que cela t'aides :)

1
Sylvain

du superutilisateur réponse acceptée :

Sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;
0
sailfish009

Exécutez mysql_upgrade.

Regarde ça

SHOW GRANTS FOR 'root'@'localhost';

dit

GRANT ALL PRIVILEGES ON ... WITH GRANT OPTION 

Vérifiez que la table existe _mysql.proxies_priv_.

Accès refusé pour l'utilisateur 'root' @ 'localhost' lors d'une tentative d'octroi de privilèges. Comment puis-je octroyer des privilèges?

0
Interlated

Un système comme Ubuntu préfère utiliser le plugin auth_socket. Il essaiera de s'authentifier en comparant votre nom d'utilisateur dans la base de données et le processus qui lance la requête mysql. il est décrit dans ici

Le plug-in de socket vérifie si le nom d'utilisateur du socket (nom d'utilisateur du système d'exploitation) correspond au nom d'utilisateur MySQL spécifié par le programme client au serveur et n'autorise la connexion que si les noms correspondent.

Au lieu de cela, vous voudrez peut-être revenir avec mysql_native_password, qui nécessitera un identifiant utilisateur/mot de passe pour s'authentifier.

À propos de la méthode pour y parvenir, je recommande plutôt this .

0
Nguyen