it-swarm.com.de

MySQL (MariaDB 10.0.29): Legen Sie das root-Passwort fest, können sich aber trotzdem anmelden, ohne nach dem Passwort zu fragen?

Ich möchte MySQL sichern, indem ich das root-Passwort einstelle. Ich habe das root-Passwort erfolgreich zurückgesetzt:

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

Aber nach dem Flush-Privilegien, starten Sie Mysql neu, ich kann mich immer noch bei Mysql anmelden (auf dem lokalen Host), ohne ein Passwort einzugeben.

[email protected]:/# 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)]> 

Wie kann ich erzwingen, dass mysql beim Verbinden nach dem Passwort fragt? Vielen Dank !

29
thanhpt

In der MySQL-Tabelle gibt es eine Spalte namens 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)

Wenn ich mich richtig erinnere, ist das Standard-Plugin für mariaDB-Installationen 'console' oder 'unix_socket'. Mit diesem Plugin können Sie ohne Kennwort von der Konsole aus eingeben. Deaktivieren Sie jedoch auch die Authentifizierung mit dem Kennwort, und Sie können keine Verbindung von anderen Clients aus herstellen.

Aktualisieren Sie einfach das Plugin-Feld mit dem leeren Wert ('') und verwenden Sie dann FLUSH PRIVILEGES.

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

Damit haben Sie das Problem gelöst.

53
Sakura Kinomoto

Ich stellte fest, dass ich das ändern musste:

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

Zu

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

Das ist das Plugin für ein Passwort AFAICT.

2
motherwell

Ich weiß, dass diese Frage alt ist, aber ich hatte das gleiche Problem und die folgenden Schritte haben mein Problem gelöst:

führen Sie auf dem Linux-Terminal den folgenden Befehl aus, um ein neues Kennwort für den Root-Benutzer festzulegen. Überspringen Sie diesen Schritt, wenn das Root-Kennwort bereits festgelegt ist.

mysqladmin --user=root password "newpassword"

Melden Sie sich bei MySQL an

mysql -uroot -p

Geben Sie das root-Benutzerpasswort ein

Führen Sie die folgende Abfrage in der MariaDB-Konsole aus

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

Möglicherweise stellen Sie fest, dass einige Datensätze mit 'user'-Spaltenwerten' '(leer) sind. Löschen Sie diese Datensätze mit der folgenden Abfrage

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)

Sie können sich nicht ohne Passwort bei MySQL anmelden, nachdem Sie die obigen Schritte ausgeführt haben.

2
NCode