我创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'条目。