我创建了一个数据库和一个用户,并允许通过以下方式访问:
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)
如果“%”是通配符,那么它不会也启用 localhost 吗?但是,如果我没有指定我想使用密码,那么我可以很好地连接到数据库,这没有任何意义,因为我在创建用户时指定了密码。
尝试连接
mysql -u someuser -p -h 127.0.0.1
。如果您可以在没有密码的情况下进行连接,则说明您已将凭据保存在 .my.cnf 中,或者您创建了一个无需密码即可访问的帐户。
来自 mysql 文档的这条评论也可能是相关的。
http://dev.mysql.com/doc/refman/5.1/en/access-denied.html
我很确定您需要以下内容:
使用授权选项将 somedb.* 上的所有权限授予 'someuser'@'%';
您的 GRANT 语句缺少主机名声明。
如果您无法使用 someuser@'%' 连接到 mysql,其中 '%' 是主机名的通配符,请确保您的用户表中没有 ''@localhost 条目。使用以下 SQL 语句进行确认:
如果 ''@localhost 存在,则通过发出以下 SQL 语句将其删除:
然后最后
现在 someuser@'%' 将连接到数据库。
我的理解是 MySQL 将 localhost 分别对待 %. 即 localhost 不包含在通配符中。
flush privileges;
创建用户后你运行了吗?如果您不这样做,则在重新启动服务器之前不会更改用户/权限。然后,检查您没有 '%'@'localhost' 条目。