关于mariadb10.4.8二进制安装及源码编译后设置密码无效的一些发现

本文首发于我的个人网站: https://hewanyue.com/
本文作者: Hechao
本文链接: https://hewanyue.com/blog/4f0efae7.html

  之前安装了最新版的mariadb10.4.8后,无论是二进制编译安装还是源码编译安装,设定完密码之后启动mysqld服务,结果都不需要密码就可以登陆进去,无论怎么执行mysql_secure_installation数据库初始化脚本或者mysql_secure_installation安全加固脚本,进入mysql都无需密码,用命令直接设置密码也无效,都是直接一敲mysql就可以进入数据库了。my.cnf配置文件查看了无数遍,也没发现任何蛛丝马迹。今天终于在无意中查看mysql数据库权限时意外有所收获,写出来与大家分享,让大家少走弯路。
  当我进入mysql数据库,打开user表时,查看了下用户没有任何问题。
MariaDB [mysql]> select user,host,password from user;
±---------±-----------±----------------------------------------------------------+
| user   | host    |   password                    |
±---------±-----------±----------------------------------------------------------+
|  root  | localhost | *54D9A58CB44735F80AC5AD29961814D6D12B8746 |
|  root  | 127.0.0.1 | *54D9A58CB44735F80AC5AD29961814D6D12B8746 |
|  root  | ::1     | *54D9A58CB44735F80AC5AD29961814D6D12B8746 |
±---------±-----------±----------------------------------------------------------+
3 rows in set (0.001 sec)

userhostpassword
rootlocalhost*54D9A58CB44735F80AC5AD29961814D6D12B8746
root127.0.0.1*54D9A58CB44735F80AC5AD29961814D6D12B8746
root::1*54D9A58CB44735F80AC5AD29961814D6D12B8746

在这里插入图片描述
  可当我突发奇想打算看看他们这几个用户有什么权限上的区别时,就发现问题了:
MariaDB [mysql]> show grants for ‘root’@‘localhost’;
±--------------------------------------------------------------------------------------------------------------+
|  Grants for root@localhost                                   |
±--------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON . TO ‘root’@‘localhost’ IDENTIFIED VIA mysql_native_password USING ‘invalid’ OR unix_socket WITH GRANT OPTION                          |
| GRANT PROXY ON ‘’@’%’ TO ‘root’@‘localhost’ WITH GRANT OPTION         |
±--------------------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)
MariaDB [mysql]> show grants for ‘root’@‘127.0.0.1’;
ERROR 1141 (42000): There is no such grant defined for user ‘root’ on host ‘127.0.0.1’
MariaDB [mysql]> show grants for ‘root’@’::1’;
ERROR 1141 (42000): There is no such grant defined for user ‘root’ on host ‘::1’
MariaDB [mysql]>
在这里插入图片描述
  root用户竟然查不到权限,这就很奇怪了。在之前的mariadb10.2.27上尝试了下,都是正常的,如下图所示:
在这里插入图片描述
  于是我就尝试对那两个异常的用户账号授权。
在这里插入图片描述
  竟然也无法授权。这种情况跟我之前尝试过的直接用insert命令向user表中加的user条目情况有点相似。当时我用

insert user set Host='192.168.32.7',User='root',Password='54D9A58CB44735F80AC5AD29961814D6D12B8746',ssl_cipher='',x509_subject='',x509_issuer='',authentication_string='';

命令在user表中创建了一个用户条目’root’@‘192.168.32.7’。
在这里插入图片描述
  这个条目看起来和真正的用户一样,可等到授权时就发现没法授权了,且这个用户也没法远程在192.168.32.7主机登录,尝试insert了一个新的非root用户,也是同样的情况。说明create user 命令不单单只是在这个表上创建了新的用户条目,在其他关联的表上也有条目的增加。OK ,话题扯远了,继续说之前的无法加密的问题。
  既然是同样的情况,我想到会不会是说明我这个新装好的mariadb上的这两个用户没有创建成功,是不是像上面提到的两个异常用户只是在这表中“徒有其表”呢?
  那就尝试创建用户,并查看了下权限。
在这里插入图片描述  竟然创建用户成功了,而且权限也显示出来了(我记得我还没有授权呢啊!!!看来是root用户不用授权)。好像一切都恢复正常了。
  赶紧退出看下是不是真的恢复正常了,结果失望的发现还是一敲mysql就可以登陆进去了!!!在这里插入图片描述
  不过又尝试了下 用127.0.0.1登陆,发现竟然需要密码验证了,且用之前设置的密码才可以登录。我好像发现了什么~
  删除用户’root’@‘localhost’,不让删,需要至少一个有CREATE USER权限用户,看来之前的’root’@‘127.0.0.1’用户没有权限。
在这里插入图片描述
  那就先给’root’@‘127.0.0.1’用户授权grant all on *.* to 'root'@'127.0.0.1';,再删除用户’root’@‘localhost’,成功了,再重新创建’root’@‘localhost’用户并指定密码,再授权。OK,退出重新登陆一下。
在这里插入图片描述
  果然数据库加密成功了~!问题解决!
-------------------------------------------(以上封存,警醒自己的无知~)--------------------------------------------
  
  
  
  后记
  原来是mariadb10.4.8版本默认是可以本地使用使用unix_socket登陆无需密码,才导致密码无效,在上面的图片里显示得清清楚楚。
MariaDB [mysql]> show grants for ‘root’@‘localhost’;
±--------------------------------------------------------------------------------------------------------------+
|  Grants for root@localhost                                   |
±--------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON . TO ‘root’@‘localhost’ IDENTIFIED VIA mysql_native_password USING ‘invalid’ OR unix_socket WITH GRANT OPTION                          |
| GRANT PROXY ON ‘’@’%’ TO ‘root’@‘localhost’ WITH GRANT OPTION         |
±--------------------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)
MariaDB [mysql]> show grants for ‘root’@‘127.0.0.1’;
ERROR 1141 (42000): There is no such grant defined for user ‘root’ on host ‘127.0.0.1’
MariaDB [mysql]> show grants for ‘root’@’::1’;
ERROR 1141 (42000): There is no such grant defined for user ‘root’ on host ‘::1’
MariaDB [mysql]>
在这里插入图片描述
  当然,也存在用户不存在,而user表中有条目的情况。所以想最终解决这个问题,实际上最直接的命令是:
  GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING '*54D9A58CB44735F80AC5AD29961814D6D12B8746' WITH GRANT OPTION;
  重新对root@localhost用户授权取消unix_sock登陆,并设置密码。
  至此,问题才真正解决。
                                      后记写于 2019.9.23。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MicePro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值