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.