ne peut pas se connecter en tant qu'utilisateur root mysql à partir d'un compte utilisateur normal dans Ubuntu 16.04

123

Je viens d'installer Ubuntu 16.04 LTS avec les packages php , mariadb et nginx . J'ai exécuté mysql_secure_installation et modifié le mot de passe root.

Maintenant, lorsque j'essaie de me connecter à mysql en utilisant le compte root tout en étant connecté à Ubuntu en tant que compte utilisateur normal, je suis refusé.

Lorsque je me connecte avec sudo mysql , mysql ne me demande même pas de mot de passe. Si je lance mysql_secure_installtion , je constate que les anciens paramètres n'ont jamais été définis de manière permanente.

Qu'est-ce que je fais mal?

    
posée codescope 02.05.2016 - 13:45
la source

10 réponses

222

J'ai récemment mis à jour mon Ubuntu 15.04 à 16.04 et cela a fonctionné pour moi:

  1. Tout d'abord, connectez-vous dans sudo mysql

    sudo mysql -u root
    
  2. Vérifiez vos comptes présents dans votre base de données

    SELECT User,Host FROM mysql.user;
    +------------------+-----------+
    | User             | Host      |
    +------------------+-----------+
    | admin            | localhost |
    | debian-sys-maint | localhost |
    | magento_user     | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    
  3. Supprimer le compte root @ localhost actuel

    mysql> DROP USER 'root'@'localhost';
    Query OK, 0 rows affected (0,00 sec)
    
  4. Recréez votre utilisateur

    mysql> CREATE USER 'root'@'%' IDENTIFIED BY '';
    Query OK, 0 rows affected (0,00 sec)
    
  5. Autorisez votre utilisateur (n'oubliez pas de vider les privilèges)

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    Query OK, 0 rows affected (0,00 sec)
    
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0,01 sec)
    
  6. Quittez MySQL et essayez de vous reconnecter sans sudo.

J'espère que cela aidera quelqu'un:)

    
réponse donnée Loremhipsum 08.06.2016 - 11:04
la source
78
  

Si vous installez 5.7 et ne fournissez pas de mot de passe à l'utilisateur root , il   utilisera le plugin auth_socket . Ce plugin ne se soucie pas et   n'a pas besoin d'un mot de passe. Il vérifie simplement si l'utilisateur se connecte   en utilisant un socket UNIX puis compare le nom d'utilisateur.

Extrait de Modifier le mot de passe utilisateur en MySQL 5.7 avec "plugin: auth_socket "

Donc, pour changer le plugin à mysql_native_password :

  1. Connectez-vous avec sudo:

    sudo mysql -u root
    
  2. Modifiez le plugin et définissez un mot de passe avec une seule commande:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
    

Bien sûr, vous pouvez également utiliser la commande ci-dessus pour définir un mot de passe vide.

Juste pour l’enregistrement, (et MariaDB < 10.2 users), il existe également un autre moyen de modifier uniquement le plugin sans fournir de mot de passe (en le laissant vide):

update mysql.user set plugin = 'mysql_native_password' where User='root';
// to change the password too (credits goes to Pothi Kalimuthu)
// UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root';
FLUSH PRIVILEGES;
    
réponse donnée Todor 23.07.2016 - 09:46
la source
6

Le problème ici est que lorsque MariaDB ou MySQL sont installés / mis à jour (surtout si, à un moment donné, root est défini sans mot de passe), le mot de passe est vide (ou ignoré) dans la table Users. utilisateur système correspondant à un utilisateur MySQL. Vous pouvez tester ceci comme suit en passant à la racine du système, puis tapez:

mysql -uroot -p

Entrez ensuite un mot de passe ou le mot de passe erroné . Vous serez probablement laissé entrer (vous pourrez peut-être vous connecter à partir de la racine unix simplement par # mysql car le mot de passe n'est pas pertinent et 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:

select User,host,plugin from mysql.user; 
+----------------+-----------+-----------------------+
| User           | host      | plugin                |
+----------------+-----------+-----------------------+
| root           | localhost | auth_socket           |
+----------------+-----------+-----------------------+

vous noterez auth_socket (qui peut lire unix_socket sur MariaDB). Ces sockets ignorent les mots de passe et autorisent l'utilisateur Unix correspondant dans sans une 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 auth_socket/unix_socket et définissent correctement un mot de passe.

Sur MariaDB (& lt; 10.2) qui est sur la version 16 d’Ubuntu à partir de 2017, cela devrait suffire:

UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

(Il est possible que la configuration du plug-in pour vider fonctionne. YMMV. Je n'ai pas essayé ceci.)

UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';

Sinon:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';

Alors

FLUSH PRIVILEGES;

Pour le compte rendu, la solution consistant à supprimer l'utilisateur et à le recréer avec '%' m'a totalement exclu de la base de données et peut causer d'autres problèmes à moins d'obtenir la déclaration grant correctement - racine que vous avez déjà.

D'après mon expérience, le problème ne se produit qu'avec l'utilisateur root, car les autres utilisateurs seront ajoutés manuellement et ne feront pas partie de l'installation / de la mise à jour initiale.

    
réponse donnée Gazzer 14.10.2017 - 06:18
la source
2

Essayez de créer un nouveau compte mysql, pour moi cela a fonctionné (mysql 5.7.12):

  1. Connectez-vous en tant que sudo:

    sudo mysql -uroot
    
  2. Créez un nouvel utilisateur et accordez-lui des privilèges (sans mot de passe):

    CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
    
  3. Connectez-vous en tant que nouvel utilisateur:

    mysql -uadmin
    
réponse donnée Alex Yakovlev 28.05.2016 - 11:37
la source
2

Si vous avez installé MySQL / MariaDB à partir d’un 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 )

  1. Connectez-vous au shell racine MySQL:

    $ sudo mysql -u root -p
    
  2. Exécuter les requêtes ci-dessous:

    use mysql;
    update user set plugin='mysql_native_password' where user='root';
    flush privileges; 
    quit;
    
  3. Ouvrez un nouveau shell, puis:

    $ mysql -u root -p
    

Source:

lien

    
réponse donnée reversiblean 02.12.2017 - 09:31
la source
1

Essayez d'abord ce code,

echo "CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';" > your_init_file.sql
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" >> your_init_file.sql 
echo "FLUSH PRIVILEGES;" >> your_init_file.sql

et puis,

killall mysqld
mysqld_safe --init-file=$PWD/your_init_file.sql

puis appuyez sur Ctrl+Z et tapez: bg pour exécuter le processus du premier plan en arrière-plan, puis vérifiez votre accès en:

mysql -u root -proot
mysql> show grants;
    
réponse donnée ADHITHYA SRINIVASAN 28.05.2016 - 11:47
la source
1

Si vous exécutez simplement la commande mysql sous root, l’accès vous sera accordé sans mot de passe, car l’authentification par socket est activée pour root @ localhost. .

Le seul moyen de définir un mot de passe est de passer à l’authentification native comme:

  

$ sudo mysql

     

mysql & gt; ALTER USER 'root' @ 'localhost' IDENTIFIÉ AVEC   mysql_native_password BY 'test';

    
réponse donnée Vadiaz 26.07.2017 - 17:23
la source
1

J'ai dû faire deux choses (grâce à @Todor et @Loremhipsum):

update mysql.user set plugin = 'mysql_native_password' where User='root';
grant all privileges on *.* to 'root'@'localhost';

et ensuite:

FLUSH PRIVILEGES;

Je ne recommande pas de supprimer l'utilisateur root .

    
réponse donnée Franc Drobnič 03.01.2018 - 17:43
la source
0

J'ai adapté certains scripts de provisioning que j'ai créés pour utiliser MariaDB et j'ai rencontré ce problème précis. Le recueil de beaucoup d’informations ici, une réponse de Gazzer s’ajoute vraiment au 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 de suite effacé les choses:

UPDATE mysql.user SET plugin='' WHERE User='root';
FLUSH PRIVILEGES;

Les autres réponses, y compris la plus haute réponse votée à ce post par Loremhipsum - encouragent réellement les mauvaises pratiques en recommandant de laisser tomber un utilisateur puis les recréer. Pour moi, c'est une solution assez radicale. La solution la plus simple / la plus simple pour annuler la valeur plugin , vider les privilèges et continuer à vivre.

    
réponse donnée JakeGould 20.10.2017 - 02:54
la source
-1

J'ai eu le même problème et j'ai corrigé le problème suivant:

mysql_upgrade --force
    
réponse donnée klob 03.05.2016 - 08:48
la source

Lire d'autres questions sur les étiquettes