MariaDB身份验证插件

在机器上检出了root用户下可无需输入密码直接登录MariaDB,但之前已经进行了mysql_secure_installation配置,删除了anonymous users,那是什么情况呢?

排查问题

之前在CentOS7通过SCL安装MariaDB与密码重置中提过在mariadb-server.cnf文件中添加skip-grant-tables可直接免密进入MariaDB,但经过检查并没有,在相关的.cnf文件中也没发现写入过密码。

根源

那么问题究竟出在哪里呢?经过对比,发现是由MariaDB的Authentication Plugin引起的,在5.7.26 MySQL Community Server (GPL)版本中可以看到Authentication Plugin是mysql_native_password:

1
2
3
4
5
6
7
8
9
10
11
mysql> select user, plugin from mysql.user;
+---------------+-----------------------+
| user | plugin |
+---------------+-----------------------+
| root | mysql_native_password |
| mysql.session | mysql_native_password |
| mysql.sys | mysql_native_password |
+---------------+-----------------------+
3 rows in set (0.00 sec)

mysql>

但是在MariaDB 10.1.40版本中可以看到Authentication Plugin是unix_socket:

1
2
3
4
5
6
7
8
9
MariaDB [(none)]> select user, plugin from mysql.user;
+------+-------------+
| user | plugin |
+------+-------------+
| root | unix_socket |
+------+-------------+
1 row in set (0.00 sec)

MariaDB [(none)]>

此时更改MariaDB的Authentication Plugin方式:

1
2
MariaDB [(none)]> update mysql.user set plugin = 'mysql_native_password' where user='root';
MariaDB [(none)]> flush privileges;

重启MariaDB服务:

1
systemctl restart mariadb

此时再输入mysql,即可发现必须输入用户名密码才能登入MariaDB了。

关于MariaDB中Authentication Plugin的mysql_native_password和Unix Socket两种身份验证插件的区别可查看官方文档:

https://mariadb.com/kb/en/library/authentication-plugin-mysql_native_password/

https://mariadb.com/kb/en/library/authentication-plugin-unix-socket/

0%