Login 为什么我需要为phpmyadmin中的每个用户同时添加localhost和%

Login 为什么我需要为phpmyadmin中的每个用户同时添加localhost和%,login,phpmyadmin,privileges,Login,Phpmyadmin,Privileges,我在下面的问题中遇到了与OP相同的问题,itsols的回答为我解决了这个问题。现在我想知道为什么,但我不允许把我的后续问题作为对他的回答的评论 我特别想知道的是,为什么有必要为来自“任意主机”和本地主机的用户提供两个单独的条目。“任何主机”不应该包括本地主机吗 (请参阅)在阅读了on-connection-access之后,我的猜测可能是因为mysql在用户之前匹配了主机,%是最不相关的 因此,在查找用户时,mysql首先查找主机,只有在没有找到与该主机匹配的用户时,才会查找user@% 有关段

我在下面的问题中遇到了与OP相同的问题,itsols的回答为我解决了这个问题。现在我想知道为什么,但我不允许把我的后续问题作为对他的回答的评论

我特别想知道的是,为什么有必要为来自“任意主机”和本地主机的用户提供两个单独的条目。“任何主机”不应该包括本地主机吗

(请参阅)

在阅读了on-connection-access之后,我的猜测可能是因为mysql在用户之前匹配了主机,%是最不相关的

因此,在查找用户时,mysql首先查找主机,只有在没有找到与该主机匹配的用户时,才会查找user@%

有关段落如下:

+----------------+----------+-
| Host           | User     | ...
+----------------+----------+-
| thomas.loc.gov |          | ...
| %              | jeffrey  | ...
+----------------+----------+-
来自thomas.loc.gov的jeffrey连接由第一行匹配,而来自任何主机的jeffrey连接由第二行匹配

注:

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

因此,user@localhost(即匿名)将优先于user@%

如果未指定匿名用户@localhost,则用户@%还应包括user@localhost但明确规定user@localhost除了用户之外,@%似乎是更可靠的选择