2016-06-06 85 views
-2
SQLSTATE[28000] [1045] Access denied for user 'XXXXX'@'localhost' (using password: YES) 

我使用phpMyAdmin中的相應權限創建了此用戶。SQLSTATE [28000] [1045]

我讀過MySQL ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)和有疑問:

1)將錯誤信息是相同的,如果我有一個用戶名,但密碼是不同還是會再給我一個不同的錯誤(記錯誤差同樣不管)但需要確定。

2)這個問題可以用硬盤空間太少來做任何事嗎?

3)GRANT ALL PRIVILEGES ON XXXXXXX_%.* TO 'XXXXXXX'@'localhost'WITH GRANT OPTION; 我跑這個查詢,此用戶可以完全privleges:

REVOKE ALL PRIVILEGES ON `XXXXXXX_%` . * FROM 'XXXXXXX'@'localhost'; 

REVOKE GRANT OPTION ON `XXXXXXX_%` . * FROM 'XXXXXXX'@'localhost'; 

GRANT ALL PRIVILEGES ON `XXXXXXX_%` . * TO 'XXXXXXX'@'localhost'; 

這是應該做的正確的事情?

4)我可以訪問應用程序/ etc/local.xml文件,如果有任何東西我應該在那裏查看,看看我是否在正確的軌道上?我看到在那裏正確列出的用戶名,但... 我似乎無法找到任何在phpMyAdmin任何地方的dbdb的livedb的引用,我可以在哪裏看?

<connection> 
       <host><![CDATA[localhost]]></host> 
       <username><![CDATA[XXXXXXX]]></username> 
       <password><![CDATA[XXXXXXXXXX]]></password> 
       <dbname><![CDATA[XXXXX_livedb]]></dbname> 
       <initStatements><![CDATA[SET NAMES utf8]]></initStatements> 
       <model><![CDATA[mysql4]]></model> 
       <type><![CDATA[pdo_mysql]]></type> 
       <pdoType><![CDATA[]]></pdoType> 

回答

0

我會從比較用戶的密碼開始。

SELECT * FROM mysql.user WHERE User = 'XXXXX' AND Host = 'localhost' ; 

確保該行存在,並且plugin欄顯示mysql_native_passwordpassword_expired顯示N

如果所有這一切都可以,那麼比較密碼值。爲了得到一個散列值進行比較,就可以運行這個命令:

SELECT PASSWORD('mysecret') 

然後返回值與存儲在該行的Password列在mysql.user表中的值。如果散列值相同,那麼'mysecret'是該用戶的有效密碼。


如果特定行不會在mysql.user表中,注意,在本地主機(''@localhost)匿名用戶將優先於[email protected]'%'帳戶。 (這對於初學者來說有點令人困惑。)

在MySQL中,用戶由兩件事物標識:UserHost。當你登錄到MySQL時,MySQL服務器有一個特定的順序,它在mysql.user表中尋找匹配的行。首先,它尋找一個確切匹配用戶和主機...

User='XXXXX' Host='localhost'

如果找到了,那就是用戶...它會檢查密碼(或其他身份驗證機制,看是否連接被允許。)如果沒有找到匹配,則匿名用戶的MySQL服務器檢查

User='' Host='localhost'

,如果沒有找到匹配存在,那麼它會檢查:

User='XXXXX' Host='%'

+0

謝謝你對這個沃金 – walterwhite

+0

@walterwhite:我毫不猶豫地問這個問題,但基於你的處理...這不是一個邪惡的有利可圖的化學項目ala突破壞...是嗎? (我想不是,如果是這樣,你的手柄就是海森堡,不是。) – spencer7593

相關問題