我创建了一个MySQL用户,如下所示:
mysql> grant all privileges on *.* to mysql@'%' IDENTIFIED by 'myPassword' with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)
mysql> exit;
Bye
然后我尝试使用新创建的用户登录,但它不起作用。
% mysql -u mysql -pmyPassword
ERROR 1045 (28000): Access denied for user 'mysql'@'localhost' (using password: YES)
%
为什么?
答案 0 :(得分:7)
我相信localhost是特殊的,不在'%'的覆盖范围内。
问题
mysql> grant all privileges on *.* to mysql@'localhost' IDENTIFIED by 'myPassword' with grant option;
它应该有效
答案 1 :(得分:5)
这看似违反直觉,但MySQL中的{local}与'%'
不匹配。原因是所有'%'
匹配所有TCP / IP连接,但来自'localhost'的连接映射到unix域套接字。
有两种可能的解决方案:
在'localhost'处为用户额外拨款:
mysql> grant all privileges on *.* to mysql@'localhost' IDENTIFIED by 'myPassword' with grant option;
PS:GRANT之后你没有FLUSH PRIVILEGES。
强制通过TCP / IP访问:
% mysql -u mysql -pmyPassword -h 127.0.0.1