MySQL 8.0 安装后无需密码就能登录 root,且无法远程登录

在 Ubuntu 上通过 apt install mysql-server 安装了 8.0 版本的 mysql 后,发现 root 用户在命令行中输入 mysql ,直接就能进入 mysql 的命令行界面;而且没有提示要更改默认的 root 密码,直接就能进行一系列操作。

查看 /var/log/mysql/error.log ,看到有这样一条日志: root@localhost is created with an empty password ! Please consider switching off the–initialize-insecure option. 可以看到,日志提示 root 账户没有创建密码。

mysql.user数据表中存放了用户信息、用户密码、权限分配等信息。通过select user,plugin,authentication_string from mysql.user where user=‘root’;命令可以查看到,root的plugin选项为auth_socket,表示只要当前系统在root用户下,那么就能直接登录,不需要密码。后面的authentication_string为空,表示root用户也没有密码。

在这里插入图片描述
此时,哪怕修改了 /etc/mysql/mysql.conf.d/mysqld.cnf 配置文件中的 bind-address = 0.0.0.0,再将mysql.user表中的root用户的host从localhost改为%,也没法让远程用户通过Navicat等软件使用root用户直接登录数据库。

解决方法之一,就是先通过systemctl stop mysql命令停止mysql服务,然后通过rm -rf /var/lib/mysql/*命令删除默认生成的数据库文件,最后执行mysqld --initialize --user=root命令,即可为root用户生成一个随机的密码,这个密码能在/var/log/mysql/error.log文件中看到。使用这个生成的密码登录数据库后,此时我们无法做任何操作,只能通过alter user ‘root’@‘localhost’ identified by '123456’命令先将root密码修改一下,然后才能做下一步的操作。

如果要允许root用户远程登录(不推荐),可以使用update mysql.user set host=‘%’ where user=‘root’;

通过flush privileges;命令刷新权限。此时,通过select user,host,plugin,authentication_string from mysql.user;命令查看表项,结果如下:

在这里插入图片描述
可以看到,此时root用户能够从任意位置(%)登录到数据库中。

参考资料:https://blog.csdn.net/feinifi/article/details/107414470

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值