用户 'User'@'%' 和 'User'@'localhost' 不是同一个用户吗?

53

我按照第一个命令创建了一个用户,但无法通过本地主机(Linux)登录。这个链接mysqldoc表明我需要使用第二个命令块中的语法,创建一个同名的第二个用户。

mysql> CREATE USER 'myuser'@'%' IDENTIFIED BY '4myuser';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL ON my_upload.* TO 'myuser'@'%' IDENTIFIED BY '4myuser';
Query OK, 0 rows affected (0.00 sec)

我尝试了以下方法,确实起作用了。但这两个账户是分开的吗?如果我更改其中一个账户的密码,另一个账户会同步吗,还是它们真的是不同的用户?

mysql> CREATE USER 'myuser'@'localhost' IDENTIFIED BY '4myuser';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON my_upload.* TO  'myuser'@'localhost';
Query OK, 0 rows affected (0.00 sec)
5个回答

54

User@%允许从所有位置访问。User@localhost仅允许来自本地主机的访问。这是两个不同的用户,有两个不同的密码(虽然您可以将它们设置为相同的密码,但如果您更新其中一个密码,则另一个密码不会自动更新)。


20
当我创建一个名为 User@% 的用户时,我仍然不能从本地主机登录。相反,似乎我必须创建一个 User@localhost 的用户。这似乎与“User@% 将允许从任何位置访问”这一说法相矛盾,不是吗? - User
1
我认为这可能是一个与Windows特定的主机文件有关的问题:请参考此答案以获取可能的解决方案:https://dev59.com/6XE95IYBdhLWcg3whODK#2283806 - User
3
很有可能,%@localhost已被拒绝访问,在没有特定User@localhost授权的情况下,即使有User@%通配符(该通配符稍后处理,因为其主机名不够具体;参见Bjoern在单独答案中提供的MySQL手册链接),用户也将被拒绝从本地主机访问。 - Kent
1
你说User@%将允许所有位置的访问,但它似乎只允许除本地主机外的所有位置的访问。然而,你的答案可能适用于2012年以后的mysql版本... - 9ilsdx 9rvj 0lo
@9ilsdx9rvj0lo 我认为情况并非如此,因为我在MySQL中找不到任何最新版本中这种基本行为发生了变化的地方。我的猜测是要么权限没有刷新,要么可能附加到“localhost”的授权规则优先于通配符,因为它更具体。 - Mike Brant
使用 'user'@'%' 授权,您将能够使用 mysql -u user -h 127.0.0.1 登录,但不能使用 -h localhost。 - zach

18

基本上是的,这两个用户可能具有不同的权限和密码。

  • myuser@%:用户 myuser,从任何主机连接。
  • myuser@localhost:用户 myuser,只能从本地主机连接。

了解更多信息可以阅读MySQL关于连接访问的手册,它展示了它的工作原理。


4
我遇到了与描述相同的情况 - 添加 user@% 的条目无法工作。
然而,为相同的 user@localhost 添加一个条目会重新开始工作。鉴于我们对 % 模式的理解,这似乎是不合理的!
肯特上面指出的一个问题是: 我们在用户表中有一个 host:localhost 的条目行,但 user 是空的。这显然解决了 user@% 规则之前使用的匹配规则 %@localhost
简短的答案是 - 检查您的 user 表中是否有空白或通配符用户名。
... 我不知道那个空白是怎么来的,或者它是否是有意的。

1

即使它们意思相同,或者一个包含另一个,它们确实是不同的用户!

13.7.1.3. GRANT Syntax

GRANT 的 MySQL 和标准 SQL 版本

MySQL 和标准 SQL 版本的 GRANT 之间最大的区别是:

  • MySQL 将权限与主机名和用户名的组合相关联,而不仅仅是用户名。

-1
MySQL和SQL的主要区别在于MySQL是一种特定类型的SQL数据库管理系统,而SQL是用于管理数据库的标准语言。MySQL是一个关系型数据库管理系统(RDBMS)。

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接