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.
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.
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
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
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.
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.
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 :)
du superutilisateur réponse acceptée :
Sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;
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_.
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 .