> use mysql; > update user set Password=password('root') where User='root' > flush privileges; > quit;User表存儲的是mysql的用戶的權限和密碼,mysql密碼都是經過加密後存儲的,所以我們的密碼需要用password函數對其進行加密。刪掉第一步添加的skip-grant-tables;重啟mysql. service mysqld restart
> use mysql; > insert into user(Host,User,Password) values('localhost','bob',password('1234')); > grant all on *.* to 'bob'@'localhost'最後一句是賦予權限的意思,賦予bob所有的權限,其中all可以換成[update|delete|insert|create...]等權限,*.*表示任意數據庫的任意表,用戶可以自己根據需要篩選。最後是賦予權限給哪個用戶。如果創建用戶後執行mysql -u bob -p仍然無法登錄, Access denied for user 'bob'@'localhost' (using password: YES),這時需要檢查下是否有''@localhost賬戶存在,如果有執行
DROP USER ''@'localhost';由於mysql如果匹配到多個賬戶時,有特定的順序the most-specific Host values first,詳細見http://stackoverflow.com/questions/10299148/mysql-error-1045-28000-access-denied-for-user-billlocalhost-using-passw
SELECT * FROM mysql.user WHERE User='root' and Host="localhost" \G\G表示以鍵值對形式返回,這樣看起來更方面,其中我們會發現
Grant_priv: N表示賬戶沒有grant權限,所以我們就賦予grant權限給它。
> update user set Grant_priv='Y' where User='root' and Host='localhost'; > flush privileges;重新登錄mysql。筆者直接flush privilege後執行grant命令,出錯,但是重新登錄後成功了。