Mysql (MariaDB 10.0.29): задайте пароль root, но можете войти без запроса пароля?

Я хочу защитить mysql, установив пароль root. I reset пароль root успешно:

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

Но, после привилегий flush, перезапустите Mysql, я все равно могу войти в mysql (на локальном хосте) без ввода пароля.

[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)]> 

Как я могу заставить mysql запрашивать пароль при подключении? Спасибо!

Ответ 1

В таблице MySQL у вас есть столбец с именем 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)

Если я правильно помню, плагином по умолчанию для установок mariaDB являются 'console' или 'unix_socket', и этот плагин позволяет вам вводить без пароля с консоли. Но также отключите аутентификацию по паролю, и вы не сможете подключиться с других клиентов.

Просто обновите поле плагина с пустым значением (''), а затем используйте FLUSH PRIVILEGES;

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

С этим у вас есть проблема решена.

Ответ 2

Я знаю, что этот вопрос старый, но у меня была та же проблема, и шаги, описанные ниже, решили мою проблему:

на терминале Linux выполните команду ниже, чтобы установить новый пароль для пользователя root, пропустите этот шаг, если пароль root уже установлен.

mysqladmin --user=root password "newpassword"

Войдите в MySQL

mysql -uroot -p

Введите пароль пользователя root

Запустите следующий запрос на консоли MariaDB

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

Вы можете заметить, что некоторые записи со значениями столбца 'user' равны '' (пусто), удалите эти записи, используя следующий запрос

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)

Вы не сможете войти в MySQL без пароля после выполнения вышеуказанных действий.

Ответ 3

Я обнаружил, что мне нужно изменить это:

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';

Это плагин для пароля AFAICT.