2012-12-16 53 views
1

用户连接我的MySQL 5此定义:MySQL的拒绝与主机%

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

然而,随着用户foo,通过foo访问时,连接被拒绝。 当我将其更改为

GRANT ALL ON foo.* TO [email protected] IDENTIFIED BY 'foo'; 

的MySQL让我进去。 为什么先不工作? AFAIK,%应该匹配任何东西。

更新:发现了这个,可能与http://forums.mysql.com/read.php?30,158830,158830

手册参考:(无答案找到的话)

回答

3

从MySQL documentation

一个非常常见的错误是插入一个Host ='%'和User ='some_user'的新条目,认为这使您可以指定从同一台计算机连接本地主机。这不起作用的原因是默认权限包含Host ='localhost'和User =''的条目。由于该条目具有比'%'更具体的主机值“本地主机”,所以当从本地主机连接时,它优先用于新条目!正确的过程是插入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 [email protected]'%' IDENTIFIED BY 'foo'; 
FLUSH PRIVILEGES; 
select * from mysql.user where User='foo';