1

我有这个定义的 MySQL 5:

CREATE DATABASE foo DEFAULT CHARACTER SET = 'utf8';
GRANT ALL ON foo.* TO foo@'%' IDENTIFIED BY 'foo';
FLUSH PRIVILEGES;

但是,当使用 user 访问时foo, pass foo,连接被拒绝。当我将其更改为

GRANT ALL ON foo.* TO foo@localhost IDENTIFIED BY 'foo';

MySQL让我进入。 为什么第一个不起作用?AFAIK,%应该匹配任何东西。

更新:找到了这个,可能是相关的http://forums.mysql.com/read.php?30,158830,158830

手动参考:(没有找到答案)

4

1 回答 1

3

来自 mysql文档

一个非常常见的错误是插入一个 Host='%' 和 User='some_user' 的新条目,认为这使您可以指定 localhost 从同一台机器进行连接。这不起作用的原因是默认权限包括 Host='localhost' 和 User='' 的条目。因为该条目的主机值“localhost”比“%”更具体,所以在从 localhost 连接时优先使用它而不是新条目!正确的过程是插入第二个 Host='localhost' 和 User='some_user' 的条目,或者删除 Host='localhost' 和 User='' 的条目。删除条目后,请记住发出 FLUSH PRIVILEGES 语句以重新加载授权表。另请参见第 6.2.4 节,“访问控制,第 1 阶段:连接验证”。

mysql.user执行第一个命令后检查表

CREATE DATABASE foo DEFAULT CHARACTER SET = 'utf8';
GRANT ALL ON foo.* TO foo@'%' IDENTIFIED BY 'foo';
FLUSH PRIVILEGES;
select * from mysql.user where User='foo';
于 2012-12-16T13:41:24.753 回答