为什么我需要在phpmyadmin中为每个用户添加localhost和%

时间:2014-08-11 09:17:01

标签: login phpmyadmin privileges

我在下面的问题中遇到了与OP相同的问题,并且其中包含了'那里的答案为我解决了。现在我想了解原因,但我不允许发表我的后续问题作为对他答案的评论。

我特别想知道的是,为什么有必要为来自"任何主机"的用户提供两个单独的条目。和localhost。应该"任何主持人"不包括localhost?

(见New users can't login on PHPmyadmin

1 个答案:

答案 0 :(得分:0)

在读取mysql manual section连接访问后,我的猜测是因为mysql在用户之前与主机匹配,而%是最不相关的。

因此,当查找用户时,mysql首先查找主机,并且只有在找不到该主机的匹配用户时才查找用户@%。

相关段落是:

+----------------+----------+-
| Host           | User     | ...
+----------------+----------+-
| thomas.loc.gov |          | ...
| %              | jeffrey  | ...
+----------------+----------+-
  

来自thomas.loc.gov的jeffrey连接与第一行匹配,而来自任何主机的jeffrey连接与第二行匹配。

     

注意:

     

一种常见的误解是,对于给定的用户名,当服务器尝试查找连接匹配时,首先使用显式命名该用户的所有行。这不是真的。前面的例子说明了这一点,其中来自jeffrey的thomas.loc.gov的连接首先不是由包含'jeffrey'作为User列值的行匹配,而是由没有用户名的行匹配。因此,jeffrey被认证为匿名用户,即使他在连接时指定了用户名。

因此,用户@localhost(即匿名)将优先于用户@%。

如果没有指定匿名用户@localhost,则用户@%也应该包含user @ localhost,但除了user @%之外,显式指定user @ localhost似乎是更可靠的选项。