- MySql使用SQLyog第一次连接时输入root账户密码容易出现1045错误(ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO))
1045解决方法
注意:大多数都是说要在my.ini文件的[mysqld]后添加skip-grant-tables,在mysql8.0以上版本行不通
-
按照上面修改后报2058错误(https://www.cnblogs.com/hualalalala/p/9344772.html):
2058解决方法
-
成功解决
分析:这是我们在安装时创建的root密码为明文,是没有经过加密,SQLyog连接时无法识别。怎么理解呢?
经过上面的操作,我们的密码已经设置为密文了,接下来我们使用root账户(可使用mysqld --console --skip-grant-tables --shared-memory
跳过密码)登录数据库(一定要是root,普通用户是无权限进入这个表的,会报1044错误),输入use mysql
进入mysql数据库,使用select user,authentication_string from user;
打印出user表的用户名和密码:
(1)如果是密文的话,我们看到的是上图root用户这样的乱码,第一个用户是我用CREATE USER 'donglu'@'localhost' IDENTIFIED BY '123456';
创建的;
(2)如果是明文的话,我们可以看到密码就是123456。
我又尝试着使用update user set authentication_string='123456' where user='root';
,执行该更新操作后,重复上面打印user表的操作,发现密码由密文‘123546’的乱码变为可见的明文’123456’,
我猜测:是因为update就是简单的sql更新语句,并不会对数据进行加密,而上面的creat user
能产生密文是因为这是专门操作用户的sql语句,具有加密功能。
然后执行quit
退出数据库,在次尝试输入密码登录,完了芭比Q,再次报1045错误,原来现在又回到最初明文的格式了,重新按照第一篇文章的方法修改密码,可见ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
方式修改密码也是加密
(个人理解,欢迎评论区留言指正)