Je viens d’installer Ubuntu 16.04 LTS avec les paquets php
, mariadb
et nginx
. J'ai couru mysql_secure_installation
et changé le mot de passe root.
Maintenant, lorsque j'essaie de me connecter à l' mysql
aide du compte root en étant connecté à Ubuntu en tant que compte d'utilisateur normal, l'accès est refusé.
Lorsque je me connecte avec sudo mysql
, mysql ne me demande même pas de mot de passe. Si je cours, mysql_secure_installtion
je constate que les anciens paramètres ne sont jamais définis de manière permanente.
Qu'est-ce que je fais mal?
la source
%
signifie pas que vous pouvez vous connecter de n'importe où ... à distance?grant all privileges on *.* to 'root'@'localhost' with grant option;
Extrait de Change User Password dans MySQL 5.7 avec "plugin: auth_socket"
Donc, afin de changer le
plugin
dos àmysql_native_password
:Connectez-vous avec sudo:
Changez le
plugin
et définissez un mot de passe avec une seule commande:Bien sûr, vous pouvez également utiliser la commande ci-dessus pour définir un mot de passe vide.
Pour mémoire, (et les
MariaDB < 10.2
utilisateurs), il existe également un autre moyen de modifier leplugin
sans fournir de mot de passe (en le laissant vide):la source
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root'; FLUSH PRIVILEGES;
En bref, sur MariaDB
où vous remplacez NEWPASSWORD par le mot de passe que vous voulez et tout le reste.
Le problème ici est que, lorsque MariaDB ou MySQL sont installés / mis à jour (en particulier si, à un moment donné, root est défini sans mot de passe), dans le tableau Utilisateurs, le mot de passe est réellement vide (ou ignoré), et la connexion dépend de l'utilisateur système correspondant. à un utilisateur MySQL. Vous pouvez le tester comme suit en basculant sur la racine du système, puis en tapant:
Ensuite, entrez soit pas de mot de passe, soit un mot de passe incorrect . Vous serez probablement laissé entrer (vous pourrez même vous connecter à partir de la racine unix simplement
# mysql
parce que le mot de passe n'a pas d'importance et que l'utilisateur est défini).Alors que se passe-t-il? Eh bien, si vous vous connectez en tant que root et procédez comme suit:
vous noterez
auth_socket
(qui peut lireunix_socket
sur MariaDB). Ces sockets ignorent les mots de passe et permettent à l'utilisateur Unix correspondant d'entrer sans vérification de mot de passe. C'est pourquoi vous pouvez vous connecter avec root mais pas avec un autre utilisateur.La solution consiste donc à mettre à jour les utilisateurs pour qu'ils n'utilisent pas le
auth_socket/unix_socket
et définissent correctement un mot de passe.Sur MariaDB (<10.2, voir les commentaires ci-dessous) qui est sur la version 16 d'Ubuntu à partir de 2017, cela devrait suffire. NEWPASSWORD est votre mot de passe.
mysql_native_password
vous tapez textuellement.(Il est possible que régler le plug-in sur vide fonctionne. YMMV. Je n'ai pas essayé cela. C'est donc une alternative.)
Autrement:
ensuite
Pour mémoire, la solution consistant à supprimer l'utilisateur et à le recréer avec '%' m'a totalement bloquée en dehors de la base de données, et peut entraîner d'autres problèmes à moins que vous n'obteniez la
grant
déclaration exacte - il est plus facile de mettre à jour la racine que vous avez déjà.D'après mon expérience, le problème ne concerne que l'utilisateur root, car d'autres utilisateurs seront ajoutés manuellement, mais ne feront pas partie d'une installation / mise à jour initiale.
la source
mysql_secure_installation
n'a pas eu le même effet. Où stocke-t-il le nouveau mot de passe?UPDATE
qui s'appliquent à MariaDB <10.2 et lesALTER
autres versions? Et le second est-ilUPDATE
une alternative au premier ou devons-nous taper les deux? Enfin, est-ce que 'mysql_native_password' est quelque chose à taper mot pour mot, ou devrions-nous le remplacer par notre mot de passe root prévu pour MySQL?mysql_native_password
est cette option.Si vous avez installé MySQL / MariaDB à partir du référentiel de base, les utilisateurs ne peuvent pas se connecter à MySQL en tant qu'utilisateur root MySQL à partir de leurs connexions Unix (non applicable s'ils ont un accès sudo ).
Connectez-vous à MySQL root shell:
Exécuter les requêtes ci-dessous:
Ouvrez un nouveau shell, puis:
La source
la source
mysql -u root -p -e "use mysql;update user set plugin='mysql_native_password' where user='root';flush privileges;"
Essayez de créer un nouveau compte mysql, cela a fonctionné pour moi (mysql 5.7.12):
Connectez-vous en tant que sudo:
Créez un nouvel utilisateur et accordez-lui des privilèges (pas de mot de passe):
Se connecter en tant que nouvel utilisateur:
la source
Je devais faire deux choses (grâce à @Todor et @Loremhipsum):
puis:
Je ne recommanderais pas d'abandonner l'utilisateur
root
.la source
Essayez d'abord ce code,
puis,
puis appuyez sur
Ctrl+Z
et tapez:bg
pour exécuter le processus du premier plan à l'arrière-plan, puis vérifiez votre accès par:la source
Si vous n'exécutez que la commande mysql sous l'utilisateur root, l'accès vous sera accordé sans mot de passe, car l'authentification de socket est activée pour root @ localhost. .
Le seul moyen de définir un mot de passe consiste à basculer vers une authentification native, comme suit:
la source
J'ai adapté certains scripts de provisionnement que j'ai créés pour utiliser MariaDB et j'ai rencontré ce problème précis. Rassembler beaucoup d’informations ici une réponse de Gazzer est vraiment nulle dans le numéro; tout se résume au paramètre
auth_socket
/unix_socket
.Ainsi, lorsque vous utilisez MariaDB 5.5 (sous Ubuntu 14.04) et MariaDB 10 sous (Ubuntu 16.04), vous connecter à MySQL et exécuter cette commande a tout effacé:
Les autres réponses, y compris la réponse la plus votée à ce poste par Loremhipsum, encouragent réellement les mauvaises pratiques en recommandant de supprimer un utilisateur, puis de le recréer. Pour moi, c'est une solution assez radicale. La solution la meilleure / la plus simple consiste à annuler la
plugin
valeur, à supprimer les privilèges et à poursuivre la vie.la source
J'ai eu le même problème et le fonctionnement suivant l'a résolu:
la source
root
est défini avec desplugin
paramètres non standard. Le seul cas où une mise à niveau de la base de données pourrait être utile dans un cas comme celui-ci est si lemysql_upgrade
processus lui-même tient compte duplugin
paramètre dont je doute.