用grant命令为用户赋权限以后,登录时,出现:ERROR 1045 (28000)

时间:2023-12-27 21:07:19

ERROR 1045(28000)信息是因为权限的问题。这个ERROR分为两种情况:

第一种:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO),这种情况是没有用密码直接登录,这时需要输入密码

第二种:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES),这种情况是用了密码了,但是,密码不对或者是本地用这个用户名和密码没有权限连接登录

下面主要说一下,针对第二种情况如何解决:

先说一下我的使用场景:首先,在安装好mysql后利用mysqladmin工具,设置了用户名root和密码123456后,利用这个用户名和密码,登录后,进入mysql数据库,然后,利用:

mysql>grant all on openfire.* to mysql@'%' identified by '123456';

mysql>flush privileges;

mysql>exit;

然后,利用新用户名mysql和密码123456登录:

mysql -umysql -p123456 回车,出现了第二种情况。

此时,我们利用root用户登录,发现没有任何问题,然后,我们输入以下Sql语句查看下数据库存储用户的表:

mysql>use mysql;

mysql>select host,user from user;

用grant命令为用户赋权限以后,登录时,出现:ERROR 1045 (28000)

注意: //@"%" 表示对所有非本地主机授权,不包括localhost。不建议设为本机IP,防止IP变化。

通过这个sql语句查看一下,我们发现,mysql用户在本机(localhost或者127.0.0.1)上通过mysql用户无法连接数据库,于是我们再次利用grant重新为mysql用户赋予权限

mysql>grant all on openfire.* to mysql@localhost identified by '123456';

mysql>flush privileges;

mysql>exit;

再次利用mysql用户登录,这时候可以成功登录。我的这种情况是本机不能用特定用户连接数据库。

另外一种就是密码错误时的情况:

用户登录时,首先会在数据库user表里查找这个表,那么是不是可绕过这张权限表呢。答案是可以的。我们先停下mysql服务,service mysqld stop,然后,找到my.cnf文件,在[mysqld]下方,添加:

skip-grant-tables,如下所示:

用grant命令为用户赋权限以后,登录时,出现:ERROR 1045 (28000)

保存后,重启mysql的服务,然后,登录时,不输入密码,可以成功登录。