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 !
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.
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.
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.