MySQL的 - 访问被拒绝的用户

问题描述:

所以,我创建了一个新的用户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

错误消息已经给你提示。使用此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

您必须使用'servname_shb'@'localhost'作为用户名。您的要求变为:

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

注:'servname_shb'@'localhost'只允许从本地主机连接。您可以使用'servname_shb'@'%'来允许来自任何地方的连接。