深入分析MySQL ERROR 1045 (28000),mysql28000

來源:互聯網
上載者:User

深入分析MySQL ERROR 1045 (28000),mysql28000

        這幾天在MySQL建立使用者後,出現訪問拒絕的問題,錯誤碼為ERROR 1045(28000)。在網上搜尋了很久,找到了很多解決辦法,但很遺憾的是這麼多辦法沒有一個能解決該問題。雖然出現的錯誤碼28000很多人都遇到過,但原因也有所不同,有的是mysql.user表中沒有資訊,有的是root使用者沒有密碼(那就不用密碼登入),而使用mysql-5.6.19時,mysql.user有使用者資訊,root使用者沒有密碼,採用的方法是root使用者登入時輸入空密碼,登入成功。使用root使用者建立測試用test,密碼為test,語句如下:

grant all onlogdb.* to test identified by ‘test’;

        在命令列輸入mysql  -u test –p,輸入密碼test,出現下面的錯誤資訊,詳細該錯誤資訊很多人在使用MySQL時都遇到過。

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

        解決方案是用root使用者再建立使用者test,密碼test,唯一不同的是指定test登入的主機為localhost,如下:

grant all onlogdb.* to test@'localhost' identified by 'test';

        再次使用test使用者登入MySQL,成功,如下所示:


        使用root使用者登入MySQL,查看user表中的使用者資訊如下,可以發現存在兩個test使用者,host的欄位分別為%和localhost,就是前面建立的兩個使用者。


        在MySQL中%表示可以在任何主機上登入MySQL資料庫,那為什麼還需要明確建立登入主機為localhost的使用者呢?這涉及到MySQL安裝時的初始化使用者,匿名使用者以及串連驗證策略等,下面進行深入的分析。

        在安裝MySQL時,會預設初始化一些使用者,比如root使用者,以及host欄位為localhost,user欄位為空白的使用者。User欄位為空白的使用者即為匿名使用者,該使用者的密碼也為空白,任何人都可以使用匿名使用者登入MySQL資料庫,但可以做的事情卻是有限的,比如在命令列直接輸入mysql登入,可以查看匿名使用者對哪些資料庫有許可權:

\


        通過上面的圖片可以發現,匿名使用者僅對information_schema和test資料庫有許可權。而匿名使用者又是如何影響其他使用者登入,進而出現28000錯誤的呢?當試圖串連MySQL資料庫時,資料庫根據提供的身份和密碼決定是否接受串連請求,身份由兩部分組成:使用者名稱和用戶端主機(即輸入mysql命令的主機)。由於host欄位中的%匹配任何主機或者host欄位包含萬用字元,就可能出現多個匹配行,伺服器必須決定匹配哪一個,解決方案如下:

  伺服器將user表中的資料讀入記憶體中,按照host和user欄位對行進行排序。

  當用戶端試圖串連時,伺服器尋找已排序的行並使用第一個匹配用戶端主機和使用者名稱的行,user欄位為空白表示可以匹配任何使用者。

  找到匹配行後,在驗證密碼是否一致,如果一致則登入成功。

        根據上面描述的規則,通過樣本來示範為什麼必須要建立test@localhost使用者,才能在本地登入成功。對user表進行排序的結果如所示:


        當未建立test@localhost時,該表不包含第一行的記錄。使用者test登入時,則會匹配到第四行的記錄:host為localhost,user為空白,因為user為空白可以匹配任何使用者,再去驗證密碼不成功登入失敗。或者不使用密碼登入,還是匹配到第四行,但驗證密碼成功,然而匿名使用者只對information_schema和test資料庫有許可權,使用其它資料庫時也會失敗,如下所示:


        總結一下,當出現28000錯誤時,首先查看user中是否有資料,是否存在匿名使用者。若存在匿名使用者則建立userName@localhost,或者也可以刪除匿名使用者。


登陸不上MYSQL了出現ERROR 1045 (28000) 助

命令打錯了
應是 mysql -u root -p123456

你多了一個符號 -
 
Mysql ERROR 1045 (28000)怎解決

你是通過匿名使用者登入MySQL伺服器的。沒有建立資料庫的許可權。
使用root賬戶登入。mysql核心技術與最佳實務
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.