允许在MySQL数据库上使用通配符(%),获取错误“拒绝访问”<user>'@'localhost'“

我创build了一个数据库和一个用户,并允许通过以下访问:

create user 'someuser'@'%' identified by 'password'; grant all privileges on somedb.* to 'someuser' with grant option; 

但是,当我尝试连接到MySQL我得到以下错误:

 $ mysql -u someuser -p > Enter Password: > ERROR 1045 (28000): Access denied for user 'someuser'@'localhost' (using password: YES) 

如果“%”是通配符,那么是否也启用本地主机? 但是,如果我不指定要使用密码,那么我可以很好地连接到数据库,这是没有道理的,因为我在创build用户时指定了一个密码。

尝试连接mysql -u someuser -p -h 127.0.0.1

如果您可以在不使用密码的情况下进行连接,则可以在.my.cnf中保存凭据,也可以创build一个允许无密码访问的帐户。


这个来自mysql文档的评论也可能是相关的。

http://dev.mysql.com/doc/refman/5.1/en/access-denied.html

如果您无法弄清楚Access Access被拒绝的原因,请从用户表中删除包含通配符的主机值的所有条目(包含'%'或'_'字符的条目)。 一个非常常见的错误是插入一个Host ='%'和User ='some_user'的新条目,认为这允许你指定本地主机从同一台机器连接。 这不起作用的原因是默认权限包括Host ='localhost'和User =''的条目。 由于该条目具有比“%”更具体的主机值“本地主机”,所以在从本地主机连接时优先使用新条目! 正确的过程是插入Host ='localhost'和User ='some_user'的第二个条目,或删除Host ='localhost'和User =''的条目。

我很确定你需要以下内容:

授予somedb。*所有特权给'someuser'@'%'授权选项;

您的GRANT语句缺less主机名声明。

如果您无法使用someuser @'%'连接到mysql,其中'%'是主机名的通配符,请确保您的用户表中没有“@localhost”条目。 使用以下SQL语句进行确认:

  mysql> SELECT * FROM user WHERE user='' AND host='localhost'; 

如果@localhost存在,则通过发出以下SQL语句将其删除:

  mysql> DELETE FROM user WHERE user='' AND host='localhost'; 

最后

  FLUSH PRIVILEGES; 

现在someuser @'%'将连接到数据库。

我的理解,我准备纠正这一点,是MySQL将本地主机分别处理%。 即localhost不包含在通配符中。

你有没有运行flush privileges; 创build用户后? 如果您不这样做,那么只有在服务器重新启动之后才能更改用户/权限。

然后,检查你没有'%'@'localhost'条目。