MariaDB 接受任何密码

For*_*ard 7 password mariadb

在 Debian 9.1 上运行 MariaDB 10.1.23-MariaDB-9+deb9u1。全新的操作系统安装,安装了 MariaDBapt-get install mariadb-server mariadb-client

显然 MariaDB 在安装时不会要求输入 root 密码,所以我将在事后设置它:

# mysql -uroot
> select user from mysql.user;
+------+
| user |
+------+
| root |
+------+
Run Code Online (Sandbox Code Playgroud)

好的,所以 root 存在。现在更改其密码:

> set password for 'root'@'localhost' = PASSWORD('P@ssw0rd');
> flush privileges;
> exit
Run Code Online (Sandbox Code Playgroud)

它起作用了吗?

# mysql -uroot -pblabla
MariaDB [(none)]>
Run Code Online (Sandbox Code Playgroud)

设置密码没问题,但为什么 MariaDB 接受任何随机密码,甚至是空密码?

此安装不接受 ALTER USER 语句。

For*_*ard 16

答案:https : //www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/

显然,16.04 上的 mysql-server 安装(或任何 5.7 安装?)允许 root 访问不是通过密码,而是通过 auth_socket 插件。运行 sudo mysql -u root (nb w/oa password) 会给你 mysql 控制台,而以非 root 身份运行命令会提示你输入密码。

更改密码似乎没有太大区别,因为身份验证后端甚至不检查密码。

要禁用此 auth_socket 插件,请在 mysql 提示符下执行

update mysql.user set plugin=null where user='root';
flush privileges;
Run Code Online (Sandbox Code Playgroud)

这使得 MariaDB 也要求输入 [Linux] root 的密码。

感谢 jesse-b 和 derobert 的深入讨论和您的回答。