Mysql(MariaDB 10.0.29):设置root密码,但仍然可以在不问密码的情况下登录?

时间:2017-06-01 03:43:34

标签: mysql login passwords mariadb

我想通过设置root密码来保护mysql。 我成功重置root密码:

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

但是,在刷新权限后,重新启动Mysql,我仍然可以在不输入密码的情况下登录mysql(在本地主机上)。

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

连接时如何强制mysql询问密码?谢谢!

3 个答案:

答案 0 :(得分:50)

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

有了这个,你就解决了问题。

答案 1 :(得分:2)

我知道这个问题很旧,但是我遇到了同样的问题,下面的步骤解决了我的问题:

在Linux终端上,运行以下命令为root用户设置新密码,如果已经设置了root密码,请跳过此步骤。

mysqladmin --user=root password "newpassword"

登录mysql

mysql -uroot -p

输入“ root”用户密码

在MariaDB控制台上运行以下查询

MariaDB [(none)]> select host,user,password from mysql.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。

答案 2 :(得分:2)

我发现我需要更改此内容:

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的插件。