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 | mysql> select user, plugin from mysql.user; |
但是在MariaDB 10.1.40版本中可以看到Authentication Plugin是unix_socket
:
1 | MariaDB [(none)]> select user, plugin from mysql.user; |
此时更改MariaDB的Authentication Plugin方式:
1 | MariaDB [(none)]> update mysql.user set plugin = 'mysql_native_password' where user='root'; |
重启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/