允许通配符 (%) 访问 MySQL db,出现错误“拒绝访问’'@'localhost'"

允许通配符 (%) 访问 MySQL db,出现错误“拒绝访问’'@'localhost'"

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

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?但是,如果我不指定要使用密码,那么我可以正常连接到数据库,这毫无意义,因为我在创建用户时指定了密码。

答案1

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

如果您无需密码即可连接,则说明您已在 .my.cnf 中保存了凭据,或者您已创建允许无需密码访问的帐户。


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

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

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

答案2

我非常确定您需要以下内容:

授予“somedb.*”上的所有权限给“someuser”@“%”,并使用授权选项;

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

答案3

如果您无法使用 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@'%' 将连接到数据库。

答案4

创建用户后您运行过吗flush privileges;?如果没有,则用户/权限的更改要等到服务器重启后才会生效。

然后,检查您是否有“%”@“localhost”条目。

相关内容