2012-12-16 82 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';