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

tha*_*hpt 30 mysql passwords login 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)
Run Code Online (Sandbox Code Playgroud)

但是,在刷新权限后,重新启动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)]> 
Run Code Online (Sandbox Code Playgroud)

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

Sak*_*oto 56

在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)
Run Code Online (Sandbox Code Playgroud)

如果我没记错的话,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;
Run Code Online (Sandbox Code Playgroud)

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

  • 完善此解决方案在 Mariadb 10.1.26 上运行良好 (2认同)

小智 7

我发现我需要改变这个:

UPDATE mysql.user SET plugin = 'auth_socket' WHERE user = 'root' AND host = 'localhost';
Run Code Online (Sandbox Code Playgroud)

 UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND host = 'localhost';
Run Code Online (Sandbox Code Playgroud)

那是密码 AFAICT 的插件。


小智 6

对于服务器版本:10.7.5-MariaDB

我通过以下步骤解决了这个问题:

使用命令SHOW GRANTS FOR 'root'@'localhost';

如果您看到类似于此的一行

授予 上的所有权限使用'A_HASH_PASSWORD' 或带有授予选项的 unix_socket 通过 mysql_native_password 识别root@localhost

这意味着您的 root 用户可以通过密码或 unix_socket 两种方法进行身份验证。

现在你可以使用命令

GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` IDENTIFIED BY 'YOUR_RAW_PASSWORD' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

问题解决了!