ERROR 1045(28000)信息是因為權限的問題。這個ERROR分為兩種情況:
第一種:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO),這種情況是沒有用密碼直接登錄,這時需要輸入密碼
第二種:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES),這種情況是用了密碼了,但是,密碼不對或者是本地用這個用戶名和密碼沒有權限連接登錄
下面主要說一下,針對第二種情況如何解決:
先說一下我的使用場景:首先,在安裝好mysql后利用mysqladmin工具,設置了用戶名root和密碼123456后,利用這個用戶名和密碼,登錄后,進入mysql數據庫,然后,利用:
mysql>grant all on openfire.* to mysql@'%' identified by '123456';
mysql>flush privileges;
mysql>exit;
然后,利用新用戶名mysql和密碼123456登錄:
mysql -umysql -p123456 回車,出現了第二種情況。
此時,我們利用root用戶登錄,發現沒有任何問題,然后,我們輸入以下Sql語句查看下數據庫存儲用戶的表:
mysql>use mysql;
mysql>select host,user from user;
注意: //@"%" 表示對所有非本地主機授權,不包括localhost。不建議設為本機IP,防止IP變化。
通過這個sql語句查看一下,我們發現,mysql用戶在本機(localhost或者127.0.0.1)上通過mysql用戶無法連接數據庫,於是我們再次利用grant重新為mysql用戶賦予權限
mysql>grant all on openfire.* to mysql@localhost identified by '123456';
mysql>flush privileges;
mysql>exit;
再次利用mysql用戶登錄,這時候可以成功登錄。我的這種情況是本機不能用特定用戶連接數據庫。
另外一種就是密碼錯誤時的情況:
用戶登錄時,首先會在數據庫user表里查找這個表,那么是不是可繞過這張權限表呢。答案是可以的。我們先停下mysql服務,service mysqld stop,然后,找到my.cnf文件,在[mysqld]下方,添加:
skip-grant-tables,如下所示:
保存后,重啟mysql的服務,然后,登錄時,不輸入密碼,可以成功登錄。