Ubuntu下安装MySQL后 普通用户登录MySQL root账户报错 ERROR 1045 (28000): Access denied for user

Ubuntu下安装MySQL后 普通用户登录MySQL root账户报错

学习自CoderAndClimber大佬

Ubuntu安装MySQL成功后,普通用户无权访问:ERROR 1045 (28000): Access denied

一、背景介绍

在使用Ubuntu22.04 安装完MySQL后发现MySQL中的root用户,使用Ubuntu的root账户可以随便登录(不需要密码,错误密码),而Ubuntu普通用户无法登录报错为 ERROR 1045 (28000): Access denied for user。。。。。
查看系统版本

产生原因

1、Ubuntu下安装高版本的MySql有关:在Ubuntu上安装MySQL时,对于root用户,可以设置空密码。

2、使用Ubuntu 的root账户登录查看MySQL账户信息

SELECT User, Host, HEX(authentication_string) FROM mysql.user;

在这里插入图片描述

可以知道root用户一直为空密码,但无论使用何种方式设置密码都是设置不上的。

3、原因是MySQL验证密码使用授权插件(使用的授权插件类型可以在mysql.user表中看到)

SELECT user, plugin FROM mysql.user;

在这里插入图片描述

4、我们在使用apt命令安装mysql-server时并没有设置root密码(也没有提示设置,无法设置),MySQL就为root用户自定义授权插件为auth_socket插件,

5、这个插件不关心也不需要密码,它只是通过UNIX套接字的用户名进行验证,如果验证通过,那么就鉴权成功。这就是root用户可以正常使用mysql的原因,因为root用户在mysql的user表中。

解决方法

重新设置授权插件,并设置密码

update mysql.user set authentication_string=PASSWORD('123456'), plugin='mysql_native_password' where user='root';

前辈表示:如果我们想配置密码,那么就需要同时改变插件并且设置密码。如果是先改变插件,然后设置密码就会不起作用。插件也会回滚到auth_socket。

命令解释:
authentication_string即为user表中的password。
PASSWORD(‘123456’)中PASSWORD()为MySQL中的函数用来加密密码,该函数即将被取消
plugin=‘mysql_native_password’ 设置密码验证插件为mysql_native_password (而我的数据库中密码验证插件一般为caching_sha2_password,个人认为可以设置为caching_sha2_password)。

可以尝试命令为:

update mysql.user set authentication_string=md5('123456'), plugin='caching_sha2_password' where user='root';

注:个人认为没必要这样设置了,root用户只能用root账号登录好像还不错。
注意:在 MySQL5.7 中 user 表的 password 已换成了authentication_string。
注意:在注意需要执行 FLUSH PRIVILEGES 语句。 这个命令执行后会重新载入授权表。
如果你不使用该命令,你就无法使用新创建的用户来连接mysql服务器,除非你重启mysql服务器。
你可以在创建用户时,为用户指定权限,在对应的权限列中,在插入语句中设置为 ‘Y’ 即可,用户权限列表如下:
Select_priv
Insert_priv
Update_priv
Delete_priv
Create_priv
Drop_priv
Reload_priv
Shutdown_priv
Process_priv
File_priv
Grant_priv
References_priv
Index_priv
Alter_priv
另外一种添加用户的方法为通过SQL的 GRANT 命令,以下命令会给指定数据库TUTORIALS添加用户 zara ,密码为 zara123 。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值