最近,创建了一个用户。但是登录时出现错误提示:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)


网上查找了一下;发现了出现问题的原因。数据库安装时,会创建有一个user为空的匿名用户;而这user为空它可以匹配任何字符。如下图(第四个):


wKioL1b-U2WQe3K4AAAzsU4IWcg027.png


而本人创建的用户为:

Mysql> grant  all  on  itcase.*  to  'test'@'%'  identified  by  '123456';


结果登录时出现了error 1045(280000)提示。创建命令中通配符 % 可以匹配所有字符

问题就清晰了,当我输入登录命令时:

C:\Users\Administrator>mysql  -utest  -p123456

系统会去寻找匹配字段,用户 test 他的 host 定义为 % ,所有上图 host 字段中任何一项都可以。再到匹配 user 字段, 这时 test 会匹配到第四个用户名为空的字段 。也就是说我们登录的是user为空的匿名用户,而非我们想要的 test 用户;密码验证错误。所以登录不了;


原因找到了,解决方法就是把匿名用户删除就行了。匿名用户是系统自行给予的,而且本身没有设置密码,可以随便登录;从安全方面看,删除匿名用户也可提高数据库的安全性。


用root用户登录mysql;

Mysql> use mysql;

Database Changed

Mysql>delete from user where user='';
Query OK, 2 rows affected (0.17 sec)

Mysql>exit


OK!到此问题解决。