2011-05-03 149 views
0

所以,我創建了一個新的用戶MySQL的 - 訪問被拒絕的用戶

CREATE USER servname_shb IDENTIFIED BY 'password'; 

授予他的所有特權:

GRANT ALL ON *.* TO servname_shb; 

沒有錯誤爲止。然後,我嘗試連接到數據庫:

$dbhost = "localhost"; 
$dbname = "servname_shbusers"; 
$dbuser = "servname_shb"; 
$dbpass = "password"; 

$c = mysql_connect($dbhost,$dbuser,$dbpass) or die("Error:".mysql_error()); 
mysql_select_db($dbname) or die ("Error connecting to databse:".mysql_error()); 

,並得到一個錯誤:

Access denied for user 'servname_shb'@'localhost' (using password: YES) in <path> 

我試過FLUSH特權,刪除並重新創建用戶 - 沒有影響。我究竟做錯了什麼?

+0

只是想知道,如果「%」代表任何服務器,爲什麼地獄它不覆蓋本地主機? – Arnthor 2011-05-03 23:01:01

回答

6

錯誤消息已經給你提示。使用此GRANT語句:

GRANT ALL ON *.* TO 'servname_shb'@'localhost'; 

或者更好,因爲@grantk在評論中指出,完善的訪問範圍僅實際需要的。

+4

不要將所有內容都授予服務器中的每個數據庫。只需爲該用戶授予他們需要訪問的數據庫/表的權限即可。 – grantk 2011-05-03 21:23:03

+0

工作得很好=)忘記以同樣的方式創建用戶(@'localhost') – Arnthor 2011-05-03 21:43:59

+0

這可以通過使用INSERT INTO子句插入特定數據庫來完成嗎?我的意思是如果用戶不是使用'CREATE USER'命令創建的。 – Tan 2017-01-24 17:07:35

3

您必須使用'servname_shb'@'localhost'作爲用戶名。您的要求變爲:

CREATE USER 'servname_shb'@'localhost' IDENTIFIED BY 'password'; 
GRANT ALL ON *.* TO 'servname_shb'@'localhost'; 

注:'servname_shb'@'localhost'只允許從本地主機連接。您可以使用'servname_shb'@'%'來允許來自任何地方的連接。