web-dev-qa-db-fra.com

Mysql (MariaDB 10.0.29): Définissez le mot de passe root, mais vous pouvez toujours vous connecter sans demander le mot de passe?

Je veux sécuriser mysql en définissant un mot de passe root. J'ai réinitialisé le mot de passe root avec succès:

MariaDB [(none)]> select Host, User, Password from mysql.user;
+-----------+------+-------------------------------------------+
| Host      | User | Password                                  |
+-----------+------+-------------------------------------------+
| localhost | root | *58319282EAB9E38D49CA25844B73DA62C80C2ABC |
+-----------+------+-------------------------------------------+
1 row in set (0.00 sec)

Mais, après les privilèges de vidage, redémarrez Mysql, je peux toujours me connecter à mysql (sur l'hôte local) sans taper le mot de passe.

root@myhost:/# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 10.0.29-MariaDB SLE 12 SP1 package

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

Comment forcer mysql à demander le mot de passe lors de la connexion? Merci !

29
thanhpt

Sur la table MySQL, vous avez une colonne appelée plugin:

MariaDB [(none)]> SELECT Host, user, password, plugin FROM mysql.user LIMIT 0,1;
+-----------+------+-------------------------------------------+--------+
| Host      | user | password                                  | plugin |
+-----------+------+-------------------------------------------+--------+
| localhost | root | *                                         |        |
+-----------+------+-------------------------------------------+--------+
1 row in set (0.00 sec)

Si je me souviens bien, le plug-in par défaut pour les installations mariaDB est "console" ou "unix_socket", et ce plug-in vous permet d'entrer sans mot de passe, depuis la console. Mais désactivez également l'authentification avec un mot de passe et vous ne pouvez pas vous connecter à partir d'un autre client.

Mettez simplement à jour le champ du plugin avec une valeur vide (''), puis utilisez FLUSH PRIVILEGES;

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
UPDATE mysql.user SET plugin = '' WHERE user = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

Avec cela, vous avez le problème résolu.

53
Sakura Kinomoto

J'ai trouvé que j'avais besoin de changer cela:

UPDATE mysql.user SET plugin = 'auth_socket' WHERE user = 'root' AND Host = 'localhost';

À

 UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND Host = 'localhost';

C'est le plugin pour un mot de passe AFAICT.

2
motherwell

Je sais que cette question est ancienne, mais j'avais le même problème et les étapes ci-dessous ont résolu mon problème:

sur le terminal Linux, exécutez la commande ci-dessous pour définir un nouveau mot de passe pour l'utilisateur root; ignorez cette étape si le mot de passe root est déjà défini.

mysqladmin --user=root password "newpassword"

Connectez-vous à mysql

mysql -uroot -p

Entrez le mot de passe utilisateur 'root'

Exécuter la requête suivante sur la console MariaDB

MariaDB [(none)]> select Host,user,password from mysql.user;

Vous remarquerez peut-être que certains enregistrements avec des valeurs de colonne 'utilisateur' sont '' (vides), supprimez ces enregistrements à l'aide de la requête suivante

MariaDB [(none)]> delete from mysql.user where user='';
MariaDB [(none)]> flush privileges;
Query OK, 2 rows affected (0.00 sec)
MariaDB [(none)]> exit
Bye
#$ mysql
ERROR 1045 (28000): Access denied for user ''@'localhost' (using password: NO)

Vous ne pourrez pas vous connecter à mysql sans mot de passe après avoir suivi les étapes ci-dessus.

2
NCode