2014-09-04 58 views
0

我輸入了以下:授權後發生MySQL錯誤1045,我做錯了什麼?

mysql> grant all on DBNAME.* to '[email protected]' identified by 'MYROOTPWD'; 

然後我辭職出來的MySQL並做了一些貝殼的東西。現在當我嘗試使用mysql時,它會失敗

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 

我不會忘記密碼;我可以在授權命令中看到我的終端上有幾行代碼。我已經嘗試了一堆關於此主題的previous answers,但沒有成功。

我做錯了什麼?當然,我可以重置根密碼並繼續前進,但我想知道我的錯誤,所以我從不重複。

更新:不,我沒有刷新權限。顯然我誤解了它的作用。爲什麼我以前存在的能力(根本不使用mysql)不起作用?

+0

您是否擁有FLUSH PRIVILEGES? – Hackerman 2014-09-04 20:02:33

+0

您是否在執行授權後執行FLUSH PRIVILEGES? – 2014-09-04 20:02:35

+2

請注意,'GRANT'語句會自動執行與「刷新特權」操作等效的操作;當執行GRANT,REVOKE,SET PASSWORD語句時讀取權限表。當直接對特權表進行DML更改時,需要'FLUSH PRIVILEGES'語句;在MySQL再次讀取權限表之前,這些更改不會被注意,並且不會生效。 – spencer7593 2014-09-04 20:29:00

回答

2

MySQL用戶應該由獨立的用戶名和主機名被識別,在GRANT語句:

> grant ... to 'root'@'localhost' ... 
        ^^ 

(注意周圍的用戶名和周圍的主機名引號。)MySQL用戶通過用戶名和主機名標識。如果你只有一個單引號的字符串,MySQL會使用它作爲用戶名並假設一個主機名。檢查mysql.db表,可能你有一行User列包含[email protected]

+0

好的,我可以用-u root @ localhost登錄,他沒有權限對mysql db做任何事情。 – 2014-09-04 20:22:41

+0

但我仍然不明白髮生了什麼事。這個新用戶是否覆蓋它? – 2014-09-04 20:37:06

+0

GRANT聲明不可能「覆蓋」任何用戶。一個MySQL用戶由兩個值標識:'username'和'hostname';並且有一些主機名爲'localhost'的funkiness;這不是一個普通的TCP 127.0.0.1環回。 (如果mysql.user中的另一行不匹配,則'hostname'中的'%''通配符將匹配。)另一方面,您不是唯一具有這些類型問題的人。 MySQL文檔有一個部分,你可能會覺得有用[http://dev.mysql.com/doc/refman/5.5/en/resetting-permissions.html](http://dev.mysql.com/doc/refman/ 5.5/EN /復位-permissions.html)。 – spencer7593 2014-09-04 21:23:00