【问题标题】:What's the difference between 127.0.0.1, localhost, [hostname] in mysql.user tablemysql.user 表中的 127.0.0.1, localhost, [hostname] 有什么区别
【发布时间】:2011-10-04 07:47:46
【问题描述】:

以下是来自全新安装的 MySQL 5 的查询 select host, user from mysql.user 的结果。

+-----------+------------------+
| host      | user             |
+-----------+------------------+
| 127.0.0.1 | root             |
| localhost | debian-sys-maint |
| localhost | root             |
| ubuntu    | root             |
+-----------+------------------+

127.0.0.1、localhost 和 ubuntu 都指向同一台机器,即本地主机。从表中删除看似重复的主机/用户对的行后,我找不到任何区别。

这些有什么区别?我可以安全地移除另外两个吗?

【问题讨论】:

  • 我也一直在想这个。似乎为多个“root”条目做出了特别的努力,所以一定是有原因的。

标签: mysql host


【解决方案1】:

来自the manual:

当您安装 MySQL 时,授权表会填充一个初始值 一组帐户。这些帐户的名称和访问权限 在第 2.10.3 节“保护初始 MySQL 帐户”,其中还讨论了如何为其分配密码。

And:

有些帐户的用户名是 root。这些是超级用户帐户 拥有所有特权并且可以做任何事情。初始根帐户 密码为空,因此任何人都可以以 root 身份连接到 MySQL 服务器 无需密码并被授予所有权限。

在 Unix 上,每个 root 帐户都允许来自本地的连接 主持人。 可以通过指定主机名 localhost 进行连接 或实际的主机名或 IP 地址。

但是,我找不到任何理由。手册中没有其他内容表明出于任何特定原因需要,但大概是为了涵盖request verification 的所有基础。在某些情况下,一个始发本地连接使用一个帐户,而另一些则需要使用替代方案;我想这是决定确保本地 root 访问将始终工作,无论边缘情况如何,都是一件好事。

【讨论】:

  • 删除其他行似乎是安全的...谢谢!
【解决方案2】:

在 mysql 中,user1@host1 是与 user1@host2 不同的用户,它们之间没有任何关系。幸运的是,这三个 root 用户应该恰好拥有相同的密码和权限。

小心删除这些 root 帐户。手册警告您的一个示例是使用bind-address

..如果您将服务器绑定到 ::1,它只接受该地址上的连接。在这种情况下,首先确保 'root'@'::1' 帐户存在于 mysql.user 表中,以便您仍然可以连接到服务器以将其关闭。

混淆可能是mysql可以将IP地址主机解析为某个主机作为主机名并使用相应的权限(或者如果没有这些权限,它可以匹配通配符主机%,如果存在)。如果您特别关心 dns 性能或安全性并使用skip_name_resolve,您可能会遇到问题。 IE。阅读http://dev.mysql.com/doc/refman/5.5/en/host-cache.html

例如,我发现连接到 localhost 的 jdbc 将使用 127.0.0.1,因此我必须相应地定义我的用户,而不是 user@localhost。

【讨论】:

    猜你喜欢
    • 2011-11-15
    • 1970-01-01
    • 2014-01-13
    • 2020-12-18
    • 2011-09-28
    • 1970-01-01
    • 2013-12-18
    • 2016-09-30
    相关资源
    最近更新 更多