在 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 |
+------+
好的,root 已经存在了。现在更改其密码:
> set password for 'root'@'localhost' = PASSWORD('P@ssw0rd');
> flush privileges;
> exit
有效吗?
# mysql -uroot -pblabla
MariaDB [(none)]>
设置密码没问题,但为什么 MariaDB 接受任意随机密码,甚至是空密码?
此安装不接受 ALTER USER 语句。
答案1
答案: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 密码)将为您提供 mysql 控制台,而以非 root 身份运行该命令会提示您输入密码。
似乎更改密码并没有多大区别,因为身份验证后端甚至不检查密码。
要禁用此 auth_socket 插件,请在 mysql 提示符下执行以下操作
update mysql.user set plugin=null where user='root';
flush privileges;
这使得 MariaDB 也要求 [Linux] root 的密码。
感谢 jesse-b 和 derobert 的深入讨论和回答。
答案2
还要检查您的 my.cnf 是否有“skip-grant-tables”,如果有,请将其删除。