2015-09-08 21 views
1

我發現一個奇怪的MySQL的行爲,我努力解釋MySQL使用空用戶名在連接錯誤消息

[[email protected] ~]$ mysql -u root12 subdb 
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'subdb' 

它使用空字符串「」作爲錯誤信息的用戶名,即使我明確提供root12。如果我提供正確的用戶名連接沒有問題,所以我懷疑這只是mysql報告錯誤的方式。

這是一個錯誤還是無證的功能?

[[email protected] ~]$ mysql --version 
mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1 

編輯

人們似乎被這個問題的措辭混淆。我使用root12作爲用戶名,而不是密碼。我也說mysql沒有密碼root12。此外,root12用戶甚至不存在。所以這是一個明顯的身份驗證失敗。我的問題是,爲什麼說的instad

ERROR 1044 (42000): Access denied for user 'root12'@'localhost' to database 'subdb' 

它說

ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'subdb' 

編輯

運行CentOS6.5,MySQL的73年1月5日在這裏。 TESTUSER用戶不存在原來

[[email protected] ~]$ mysql -u testuser subdb 
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'subdb' 

[[email protected] ~]$ mysql -u root 

... 

mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'testpassword'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> exit 
Bye 
[[email protected] ~]$ mysql -u testuser subdb 
ERROR 1045 (28000): Access denied for user 'testuser'@'localhost' (using password: NO) 

這是從這個輸出是,MySQL(好像只有這個版本)明確的用戶名是否存在泄漏信息。如果它不存在,則錯誤消息將用戶名重置爲空字符串。如果是這樣,MySQL總是用戶名完好

+0

@Drew這些步驟來REPRO的錯誤消息。我導致認證錯誤,因爲我需要mysql給我的錯誤信息。 –

回答

0

嘗試按照如下─

mysql -u root12 -p 

它會問你密碼,你需要提供root12密碼。

但如果root12是根用戶的密碼,然後使用以下命令 -

mysql -u root -proot12 
+0

感謝您的回答。我不想爲root12用戶使用密碼,我想了解爲什麼錯誤消息不使用給定的用戶名,而是使用空字符串。 –

+0

@Drew這是正確的 - 用戶沒有密碼。 root12用戶不存在用戶,所以錯誤消息是絕對預期的。我的問題是爲什麼而不是說拒絕用戶'root12'@'localhost'訪問被拒絕訪問拒絕用戶'''localhost'(注意空的用戶名)? –

+0

@VladimirHraban:這裏的錯誤信息是「拒絕訪問用戶'@'localhost'」意味着mysql將用戶顯示爲''而不是root12這意味着mysql在這裏沒有得到任何有效的用戶... –