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


Je viens d'installer Ubuntu 16.04 LTS avec les paquets php, mariadb et nginx. Iran mysql_secure_installation et changé le mot de passe root.

Maintenant, quand j'essaie de me connecter à mysql en utilisant le compte root tout en étant connecté à Ubuntu en tant que compte utilisateur normal, je reçois un accès refusé.

Quand je me connecte en utilisant sudo mysql, mysql ne me demande même pas de mot de passe. Si je cours mysql_secure_installtion Je vois que les anciens paramètres n'ont jamais été définis de manière permanente.

Qu'est-ce que je fais mal?


125
2018-05-02 11:45


origine




Réponses:


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. Accordez des autorisations à 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 :)


232
2018-06-08 09:04



C'était la seule chose qui fonctionnait pour moi, est-ce que quelqu'un sait exactement ce qui s'est passé avec l'utilisateur root lorsque vous avez installé mysql-server sur 16.04? - Ruggi
Tiens-le, ne le fait pas % signifie que vous pouvez vous connecter de n'importe où ... à distance? - Stevie G
Vous pouvez changer de ligne pour: CREATE USER 'root' @ 'localhost' IDENTIFIED BY '; - vladnev
Pour le responsable de la sécurité: le schéma de connexion root root @ localhost mysql est un élément essentiel du développement local mais devrait apparaître absolument nulle part ailleurs. - charneykaye
L'instruction Grant pour le nouvel utilisateur root ne donne pas "with grant" à root, donc root ne peut pas l'attribuer sans l'exécuter ensuite: dba.stackexchange.com/a/62046/115679  Veuillez modifier la déclaration de subvention à grant all privileges on *.* to 'root'@'localhost' with grant option; - Loren


Si vous installez 5.7 et ne fournissez pas de mot de passe au root utilisateur, il   utilisera le auth_socket brancher. Ce plug-in ne s'occupe pas et   n’a pas besoin de mot de passe. Il vérifie simplement si l'utilisateur se connecte   en utilisant un socket UNIX, puis compare le nom d'utilisateur.

Pris à partir de Changer le mot de passe de l'utilisateur en MySQL 5.7 Avec "plugin: auth_socket"

Donc, pour changer la plugin retour à mysql_native_password:

  1. Connectez-vous avec sudo:

    sudo mysql -u root
    
  2. Changer la plugin et définir 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 mémoire (et MariaDB < 10.2 utilisateurs) il y a aussi une autre façon de ne changer que la 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;

81
2017-07-23 07:46



Merci, pour une raison quelconque, cela a été défini automatiquement après une mise à niveau d'apt-get je pense ... - Tominator
Ce fut finalement le problème après une mise à jour du formulaire Ubuntu 14.04 à 16.04 et que j'étais hors de ma base de données ... - Reflic
En outre, j'aime plus cette réponse - c'est beaucoup moins destructeur ;-) - benzkji
Pour MariaDB <10.2, pour modifier le plug-in avec le mot de passe, voici la requête: UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root'; FLUSH PRIVILEGES; La source: stackoverflow.com/a/41537019/1004587 - Pothi Kalimuthu
10x @PothiKalimuthu, vient de mettre à jour la réponse. - Todor


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

mysql -uroot -p

Puis entrez soit aucun mot de passe ou le faux mot de passe. Vous serez probablement laissé entrer (vous pourrez peut-être même vous connecter depuis la racine unix simplement # mysql comme 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 remarquerez auth_socket (qui peut lire unix_socket sur MariaDB). Ces sockets ignorent les mots de passe et autorisent l'utilisateur Unix correspondant dans sans pour autant une vérification de mot de passe. C'est pourquoi vous pouvez vous connecter avec racine mais pas avec un utilisateur différent.

Donc, la solution consiste à mettre à jour les utilisateurs pour ne pas utiliser le auth_socket/unix_socket et définir correctement un mot de passe.

Sur MariaDB (<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 fonctionnerait. YMMV. Je n'ai pas essayé ceci.)

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

Autrement:

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

alors

FLUSH PRIVILEGES;

Pour mémoire, la solution consistant à supprimer l'utilisateur et à le recréer avec «%» m'a totalement exclu de la base de données et peut entraîner d'autres problèmes à moins granténoncé tout à fait juste - facile de mettre à jour simplement la 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.


7
2017-10-14 04:18



J'ai trouvé que cela fonctionnait parfaitement. Je me demande pourquoi changer le mot de passe root avec mysql_secure_installation n'a pas eu le même effet. Où stocke-t-il le nouveau mot de passe? - Mausy5043


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éer un nouvel utilisateur et lui accorder des privilèges (pas de 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
    

2
2018-05-28 09:37



Ça m'a aidé! Merci. - Ejaz


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 identifiants Unix (non applicable s'ils ont sudo accès)

  1. Connectez-vous à MySQL root shell:

    $ sudo mysql -u root -p
    
  2. Exécutez 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
    

La source:

http://www.itzgeek.com/how-tos/linux/debian/how-to-install-mariadb-on-debian-9.html


2
2017-12-02 08:31



Cela a fonctionné pour moi. Merci - Junaid Qadir Shekhanzai
Quand je l'ai fait, je ne pouvais plus sudo mysql en tant que root. J'ai dû commencer par le premier et ensuite me connecter à mysql en tant que root. Je l'ai donc changé en auth_socket. - untill
Commande unique: mysql -u root -p -e "use mysql;update user set plugin='mysql_native_password' where user='root';flush privileges;" - Chris Stryczynski


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 alors,

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

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

mysql -u root -proot
mysql> show grants;

1
2018-05-28 09:47





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

La seule façon de définir un mot de passe consiste à passer à une authentification native comme:

$ sudo mysql

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


1
2017-07-26 15:23





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

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

et alors:

FLUSH PRIVILEGES;

Je ne recommanderais pas de laisser tomber l'utilisateur root.


1
2018-01-03 16:43





J'ai adapté certains scripts de provisioning que j'ai créés pour utiliser MariaDB et j'ai rencontré ce problème précis. Assembler ensemble beaucoup d'informations ici un La réponse de Gazzer vraiment zéros dans le problème; tout se résume à la auth_socket/unix_socket réglage.

Ainsi, en utilisant MariaDB 5.5 (sous Ubuntu 14.04) et MariaDB 10 sous (Ubuntu 16.04), la connexion à MySQL et l’exécution de cette commande ont permis d’éliminer tout ce qui suit:

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- encouragez vraiment les mauvaises pratiques en recommandant de laisser tomber un utilisateur puis de le recréer. Pour moi, c'est une solution assez radicale. La meilleure solution / la plus simple solution pour annuler le plugin valeur, rincer les privilèges et continuer la vie.


0
2017-10-20 00:54





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

mysql_upgrade --force

-1
2018-05-03 06:48



Malheureusement, cela n'a pas fonctionné. Je réinstalle ubuntu. - codescope
Je viens de faire une nouvelle installation d'ubuntu 16.04 et d'installer mariad-server. Après l'installation, j'ai lancé mysql_secure_installation et défini le mot de passe. Après avoir passé en revue les étapes de mysql_secure_installation, je l'ai exécuté à nouveau et il semble que les modifications ne soient pas enregistrées. Je ne peux toujours pas me connecter à partir de mon compte d'utilisateur normal. Serait-ce un bug? - codescope
Cela ne vous aidera jamais. Le problème n’a rien à voir avec l’installation réelle du binaire MariaDB mais plutôt avec l’utilisateur. root être mis avec plugin paramètres non standard. Le seul cas où une mise à niveau de la base de données pourrait aider dans un cas comme celui-ci est si le mysql_upgrade traiter lui-même représente le plugin cadre dont je doute. - JakeGould