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 。