用grant命令为用户赋权限以后,登录时,出现:ERROR 1045 (28000)
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;
注意: //@"%" 表示对所有非本地主机授权,不包括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,如下所示:
保存后,重启mysql的服务,然后,登录时,不输入密码,可以成功登录。