3

我创建一个 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)
% 

为什么?

4

2 回答 2

8

我相信 localhost 是特殊的,没有被“%”覆盖。

问题

mysql> grant all privileges on *.* to mysql@'localhost' IDENTIFIED by 'myPassword' with grant option;       

它应该可以工作

于 2013-06-25T17:39:14.490 回答
6

这似乎违反直觉,但'%'MySQL 中不匹配 'localhost'。原因是 all'%'匹配所有 TCP/IP 连接,但来自 'localhost' 的连接被映射到 unix 域套接字。

有两种可能的解决方案:

  1. 在 'localhost' 为用户做一个额外的授权:

    mysql> grant all privileges on *.* to mysql@'localhost' IDENTIFIED by 'myPassword' with grant option;
    

    PS:您不必在 GRANT 后刷新特权。

  2. 通过 TCP/IP 强制访问:

    % mysql -u mysql -pmyPassword -h 127.0.0.1 
    
于 2013-06-25T17:41:31.270 回答