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

124

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

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

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

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

Avec mySQL -u root -pje me suis connecté à la base de données et j'ai fait

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.

SQL-Neuling
la source
Avez-vous essayé de réinitialiser le mot de passe root?
Ozgur Bar

Réponses:

278

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


Ayant juste fait la même mise à jour, sur Ubuntu, j'ai eu le même problème.

Ce qui était étrange était que

sudo /usr/bin/mysql_secure_installation

Accepterait mon mot de passe et me permettrait de le définir, mais je ne pouvais pas me connecter rootvia le mysqlclient

Je devais commencer mariadb avec

sudo mysqld_safe --skip-grant-tables

pour accéder en tant que root, tandis que tous les autres utilisateurs peuvent toujours accéder correctement.

En regardant le mysql.usertableau que j'ai remarqué pour root, la plugincolonne est définie sur unix_socketalors que tous les autres utilisateurs, elle est définie sur «mysql_native_password». 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 uidle processus exécutant le client avec celui de l'utilisateur dans le mysql.usertable. En d'autres termes, pour accéder à mariadb, rootvous devez être connecté en tant que root.

Bien sûr, en redémarrant 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écuter 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é). Ce mot de passe activé se connecte 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;

Va changer le compte root pour utiliser la connexion par mot de passe sans changer le mot de passe, mais cela peut vous laisser avec une installation mysql / mariadb sans mot de passe root.

Après l'un ou l'autre de ces derniers, vous devez redémarrer mysql / mariadb:

sudo service mysql restart

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

VEUILLEZ NOTER QUE FAIRE CELA RÉDUIRE LA SÉCURITÉ Les développeurs de MariaDB ont probablement choisi de faire fonctionner l'accès root comme celui-ci pour une bonne raison.

En y sudo mysql -u root -préfléchissant, je suis assez heureux de devoir le faire, alors je reviens à cela, mais j'ai pensé publier ma solution car je ne pouvais pas en trouver ailleurs.

DorianFM
la source
7
"pour accéder à mariadb en tant que root, vous devez être connecté en tant que root." - Cette phrase devrait être en haut de la réponse.
Philipp Ludwig
1
pourquoi exécutez-vous la GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>'; commande deux fois avant de vider les privilèges?
Blairg23
4
Cela devrait être quelque part plus visible, comme de grosses lettres rouges lors de l'installation ou quelque chose ... Je viens de perdre quelques heures de vie à essayer de configurer le serveur dont j'ai besoin dès que possible ....
Gall Annonim
1
btw, si vous êtes paresseux comme moi, vous pouvez gagner comme deux secondes avecsudo service mysql restart
zeisi
1
Merci pour le conseil, super pour les développeurs, mais comment inverser ce retour à l'original?
Sam
42

Dans Ubuntu 16.04 LTS propre, la connexion root MariaDB 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 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 dans l'invite du shell bash,

mysql-workbench

et vous pouvez vous connecter avec 'utilisateur' avec 'votre mot de passe' sur localhost

Curycu
la source
12

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 entrez à nouveau avec

mysql -u root -p

si vous suivez le problème, entrez sudo suet mysql -u root -pappliquez maintenant les autorisations à root

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

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

Bonne chance

IsraëlM17
la source
11

de la réponse acceptée par le superutilisateur :

sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;
voilier009
la source
3

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

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

et vous êtes dedans.

Joe C
la source
2

La nouvelle commande pour vider les privilèges est:

FLUSH PRIVILEGES

L'ancienne commande FLUSH ALL PRIVILEGESne fonctionne plus.

Vous obtiendrez une erreur qui ressemble à ça:

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 :)

Sylvain
la source
0

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 fait la requête mysql; il est décrit ici

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

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

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

Nguyen
la source