mysql 登錄錯(cuò)誤:1045 (28000)訪問(wèn)被拒問(wèn)題

關(guān)鍵條目:ERROR 1045(28000): Access deniedforuser'root'@'localhost'(using password: YES)

?????? 這個(gè)錯(cuò)誤1045(28000)的本質(zhì)其實(shí)就是訪問(wèn)被拒絕,問(wèn)題原因也很簡(jiǎn)單,就是用戶密碼不適用,也可以理解為用戶或密碼錯(cuò)誤。

? ? ? Access deniedforuser'root'@'localhost'是說(shuō)登錄賬戶‘root’host為'localhost'的這個(gè)賬戶,訪問(wèn)本數(shù)據(jù)庫(kù)被拒絕了。

? ? using password: YES是指你登錄時(shí)是否輸入了密碼,如果輸入了,就顯示YES,沒(méi)有輸入就顯示NO。在mysql中,提供了一些無(wú)密碼或者匿名登錄方法,這條信息是用于區(qū)分這些情況的。

1.密碼錯(cuò)誤 ??

? 出現(xiàn)這個(gè)問(wèn)題最常見(jiàn)的原因,就是密碼輸入錯(cuò)了。那么如果你還有管理員賬戶,用管理員賬戶登錄并提取或者修改賬戶密碼就可以。如果管理員賬戶無(wú)法登錄,那么就需要繞過(guò)數(shù)據(jù)庫(kù)的訪問(wèn)控制器,直接登入數(shù)據(jù)庫(kù)。

???? 繞過(guò)訪問(wèn)控制器的方法很多,根據(jù)所用系統(tǒng)和使用的mysql版本不同,會(huì)有不同方法。這里介紹linux下的一種方法。首先關(guān)閉mysql服務(wù),直接輸入下述命令:

?? ① mysqld_safe--user=mysql --skip-grant-tables --skip-networking &

???? 然后進(jìn)入訪問(wèn)路徑(linux一般是/usr/bin),用②mysql -u root登錄,即無(wú)密碼登錄。

????? 這時(shí)一般就可以登錄了。需要注意的是,系統(tǒng)不會(huì)允許同時(shí)運(yùn)行多個(gè)訪問(wèn)進(jìn)程,所以之前運(yùn)行①的時(shí)候要求關(guān)閉正常的mysql服務(wù),但是很多時(shí)候,陰差陽(yáng)錯(cuò)的情況下,可能會(huì)運(yùn)行多個(gè)mysql訪問(wèn)進(jìn)程,這時(shí)需要查詢mysql關(guān)鍵字的進(jìn)程列表,然后kill掉,再次進(jìn)行操作。

???? 言歸正傳,用這種方式登錄mysql后,可以直接訪問(wèn)用戶表。一般來(lái)說(shuō),mysql 的用戶表,處于mysql數(shù)據(jù)庫(kù)下(對(duì)初學(xué)者來(lái)說(shuō),這句話就是說(shuō)你需要輸入 use mysql;)。

???? 這時(shí),輸入下述語(yǔ)句進(jìn)行修改;

? ? ③ UPDATE user SET Password=PASSWORD('密碼')where USER='root';

??? 注意,要在語(yǔ)句中的‘密碼’這里輸入你的密碼,而不是直接修改password項(xiàng),這一點(diǎn)非常重要。

④UPDATE user SET Password=‘密碼’where USER='root';和③的區(qū)別在于,④會(huì)直接修改用戶表中的password項(xiàng),而③則是將你輸入的密碼用哈希算法加密為哈希值再輸入密碼。mysql用戶密碼是加密的,這一點(diǎn)非常重要,如果你直接修改了password項(xiàng),是無(wú)法正常登陸的 。

???? 修改完以后,不要忘記用下述命令使設(shè)置生效。

? ? ⑤FLUSH PRIVILEGES;

?? 然后退出,重新啟動(dòng)mysql 的服務(wù),就可以正常登陸了。

2.空用戶訪問(wèn)覆蓋

?????? 一種比較少見(jiàn)的情況,是空用戶的訪問(wèn)覆蓋現(xiàn)象。以本文報(bào)錯(cuò)條目為例,這種情況,就是在用戶表中,存在host值為‘localhost’但是用戶名密碼為空的賬戶(即匿名賬戶),一般情況下這種情況不會(huì)影響登錄。但有時(shí)候,用戶的登錄的匹配信息會(huì)被匹配到空用戶上,導(dǎo)致密碼匹配失敗,報(bào)出1045(28000)錯(cuò)誤。這種情況比較少見(jiàn),我也不是很明白復(fù)現(xiàn)的原理,就不多做贅述。

???? 解決方法也很簡(jiǎn)單,如第1中情況一樣,登錄用戶表,然后刪除空用戶記錄即可。

??? ⑥D(zhuǎn)ELETE from usr where HOST='localhost' and USER='';

然后還是別忘記使設(shè)置生效以及重啟數(shù)據(jù)庫(kù)服務(wù)。

3.用戶權(quán)限不足

?????? 還有一種比較常見(jiàn)的情況,是用戶權(quán)限不足。一般來(lái)說(shuō),發(fā)生在非管理員賬戶,而且很可能發(fā)生在賬戶易手之后,也就是說(shuō),人為的情況比較多。

????? 這種情況就是用戶的訪問(wèn)權(quán)限被限制了。mysql用戶權(quán)限是由很多項(xiàng)目的。

???? 很多項(xiàng)目出現(xiàn)限制都會(huì)阻止權(quán)限訪問(wèn),下面介紹最常見(jiàn)的兩種修改方法。

? ? 設(shè)置指定用戶名訪問(wèn)權(quán)限為全訪問(wèn)。(賬戶訪問(wèn)權(quán)限不足)

? ? grant all privileges on *.* to '用戶名'@'%' IDENTIFIED BY '密碼';

? ? 設(shè)置指定可訪問(wèn)主機(jī)權(quán)限。(賬戶訪問(wèn)地址不適用)

? ? grant all privileges on *.* to 'liuhui'@'10.2.1.11';

?? 其中‘%’是可訪問(wèn)所有數(shù)據(jù)庫(kù),‘localhost’是允許本地訪問(wèn),‘ip地址’是指允許在該ip地址用該賬戶遠(yuǎn)程訪問(wèn)本數(shù)據(jù)庫(kù)。

??? 很多創(chuàng)建遠(yuǎn)程訪問(wèn)用戶出錯(cuò)的案例里,都是給予用戶訪問(wèn)權(quán)限不足或者沒(méi)有給用戶開(kāi)放訪問(wèn)地址造成的拒絕訪問(wèn)。

???? 需要注意的是,在不啟動(dòng)訪問(wèn)控制器訪問(wèn)數(shù)據(jù)庫(kù)的情況下,是無(wú)法查看用戶詳細(xì)權(quán)限的。所以對(duì)于權(quán)限的操作,最好還是在管理員賬戶下進(jìn)行操作。

???? 一點(diǎn)心得,與諸君共勉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容