【问题标题】:Are Users 'User'@'%' and 'User'@'localhost' not the same?用户 'User'@'%' 和 'User'@'localhost' 不一样吗?
【发布时间】:2012-07-22 23:03:56
【问题描述】:

我根据第一个命令创建了一个用户,但无法通过 localhost (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)

【问题讨论】:

    标签: mysql


    【解决方案1】:

    我遇到了与描述相同的情况 - 为 user@% 添加条目不起作用。

    然而为相同的user@localhost 添加一个条目再次开始工作。 考虑到我们对% 模式的理解,这看起来确实不直观!

    上面 Kent 发现的一个问题是: 我们在用户表中有 host:localhost 的条目行user 是空白的。这显然解决了 %@localhost 的规则,该规则在我的 user@% 规则之前用作匹配项。

    简答 - 检查 user 表中的空白或通配符用户名。

    ...我不知道那个空白是如何到达那里的,或者是否是故意的。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 当我创建用户User@% 时,我似乎仍然无法从本地主机登录。相反,我似乎必须创建一个User@localhost 用户。这似乎违背了“User@% 将允许从所有位置访问”的说法,不是吗?
      • 我认为这可能是与主机文件有关的特定于 Windows 的问题:请参阅此答案以获得可能的解决方案:stackoverflow.com/a/2283806/155268
      • 很可能,%@localhost 已被拒绝访问,并且在没有特定的 User@localhost 授权的情况下,尽管有 User@% 通配符,用户仍将被拒绝从 localhost 访问(稍后处理,由于有一个不太具体的主机名;根据 Bjoern 在单独答案中链接的 MySQL 手册)。
      • 您声明 User@% 将允许从所有位置进行访问,但它似乎允许从除本地主机之外的所有位置进行访问。但是,您的答案可能适用于 2012 年的 mysql 版本...
      • @9ilsdx9rvj0lo 我不认为是这种情况,因为我在 MySQL 中找不到在最新版本中这种基本行为发生变化的地方。我的猜测是权限没有被刷新,或者可能有一个附加到 localhost 的授权规则优先,因为它比通配符更具体。
      【解决方案3】:

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

      • myuser@% : 用户 myuser,从任何主机连接。
      • myuser@localhost :用户 myuser,仅从 localhost 连接。

      MySQL manual about connection access 值得一读,它演示了它的工作原理。

      【讨论】:

        【解决方案4】:

        即使他们的意思相同,或者如果一个包含另一个,他们确实是独立的用户!

        13.7.1.3. GRANT Syntax

        GRANT 的 MySQL 和标准 SQL 版本

        MySQL 和标准 SQL 版本的最大区别 授予是:

        • MySQL 将权限与主机名和 用户名,而不是只有一个用户名。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-07-11
          • 1970-01-01
          • 2013-04-04
          • 2022-01-20
          • 2012-08-02
          • 2014-01-09
          • 2020-07-10
          • 2013-08-07
          相关资源
          最近更新 更多