mysql新建用戶本地無法登錄 出此是用mysql,因為root權限過高,所以新建一用戶appadmin,權限僅為要用到的數據庫。創建語句如下:grant select,insert,update,delete on test.* to appadmin@"%" identified by "password";其中@“%”是可以在任何地址登錄。 創建後到mysql.user下查看,有該用戶。但是使用mysql -u appadmin -ppassword 登錄,提示無法登錄:ERROR 1045 (28000): Access denied for user 'appadmin'@'localhost' (using password: YES) 百思不得其解,遂google,其中有人說到“mysql.user 表中有另外一些記錄產生了作用,最有可能的就是已經有一條''@localhost記錄,就是用戶名是空,主機字段是localhost的記錄。” 影響了。查看該表果然有。
mysql> select host,user,password from mysql.user; +-----------+------------------+-------------------------------------------+ | host | user | password | +-----------+------------------+-------------------------------------------+ | localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | mza | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | 127.0.0.1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | | localhost | | | | mza | | | | localhost | debian-sys-maint | *19DF6BF8310D46D681AE072AB73ECEC99C018C19 | | % | appadmin | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 | +-----------+------------------+-------------------------------------------+ 7 rows in set (0.00 sec)
但是刪除那些為空(匿名)的用戶後仍然無法登錄。(可能是因為沒有重啟mysql)於是只好耐著性子看mysql參考手冊。發現其中增加用戶部分有這麼一段話: 其中兩個賬戶有相同的用戶名monty和密碼some_pass。兩個賬戶均為超級用戶賬戶,具有完全的權限可以做任何事情。一個賬戶 ('monty'@'localhost')只用於從本機連接時。另一個賬戶('monty'@'%')可用於從其它主機連接。請注意monty的兩個賬戶必須能從任何主機以monty連接。沒有localhost賬戶,當monty從本機連接時,mysql_install_db創建的localhost的匿名用戶賬戶將占先。結果是,monty將被視為匿名用戶。原因是匿名用戶賬戶的Host列值比'monty'@'%'賬戶更具體,這樣在user表排序順序中排在前面。 這段話說的很清楚,因此執行 grant select,insert,update,delete on test.* to appadmin@"localhost" identified by "password"; 退出後用appadmin登錄,成功。