我应该在 MySQL 中为 'root'@'localhost' 设置密码吗?

信息安全 密码 mysql
2021-08-25 10:52:50

'root'@'localhost'MySQL 帐户只能由当前在托管 MySQL 服务器的服务器上的人访问

假设只有负责 MySQL 服务器的人有密码ssh,并且服务器托管在内部网络上,因此您无法ssh从外部进入,是否有任何理由放一个MySQL服务器上'root'@'localhost'的密码?

没有密码的原因:

  • 在易失性系统中管理密码非常麻烦,每个额外的密码都会增加系统中的熵。

  • 如果密码丢失,可能会引起很多麻烦。

  • 如果有人已经ssh进入了一台机器,并且机器的 root 密码与他们登录的用户相同,那么他们无论如何都可以在没有密码的情况下启动 MySQL。

  • 如果服务器在本地网络上,而您唯一关心的是某人会对您的 MySQL 服务器造成多大的损害,那么在ssh'ed 进入服务器时以 root 身份登录的人是您最不关心的。他们可以只是物理地占用硬盘驱动器,或者以多种方式破坏机器。

因此,尽管有这些原因表明在这种情况下拥有密码只会让事情变得更难而没有任何真正的好处,是否有令人信服的理由给予密码'root'@'localhost'

4个回答

Scott Culp 撰写的10 条不可变的安全管理法的第一条规则是关于您的情况的好法:

法则1:没有人相信任何不好的事情都会发生在他们身上,除非它确实发生了。

即使您的服务器只能从您的本地网络中访问,请尝试考虑有多少计算机或服务器连接到该内部网络。从一台计算机转移到另一台计算机是黑客工作的一部分,一旦其中一名员工成为鱼叉式网络钓鱼攻击的受害者,并单击该电子邮件中的链接,拥有仅限外围的安全性将使您一无所有。

另一种可能性是,当有人可以利用您网站中的漏洞获取 shell 时会发生什么?然后该人可以尝试从 shell 访问和运行 MySQL 命令,在最坏的情况下删除/转储您的整个数据库?

是的,在多用户环境中管理密码很困难,这就是为什么KeePassLastPass等软件提供多用户数据库,这样多个用户可以访问相同的钥匙串和相同的密码。

我的建议是,使用强密码保护它,因为它可能不会像您想象的那么麻烦,并且它可能会阻止您的数据库被泄露或丢弃。您为潜在黑客制造的摩擦越多越好!

主动!

考虑一下 -

有人通过易受攻击的 web 应用程序在您的盒子上弹出一个外壳,他们想要转储所有数据库,但他们不能,因为它们仅限于您的配置文件(或相关内容)中列出的 db 用户。他们认为在尝试以 root 身份登录 MySQL 之前,他们会感到困惑,但他们很快发现没有密码。这让攻击者中了大奖,因为你没有给 MySQL root 用户密码这样愚蠢的事情。

无论您认为不可能发生的事情,最好为适用的所有内容设置密码。还有更多的场景没有root密码是不好的,但你明白了。

永远提前计划。管理密码似乎很痛苦,就像你提到的那样,它们将来可能会通过 SSH 连接到机器。

如果有人可以提供准确的统计数据,那就太好了——但大多数安全威胁来自组织内部,而不是外部。在您的 MySQL 服务器上不留下密码就像在休息室留下打印副本一样。如果你没问题,那么你真的不需要密码。如果数据库中有任何您可能不希望在该咖啡桌书中出现的信息,请采取额外的几个步骤并保护您的数据。几年后,甚至几个月后,你可以给我买杯咖啡来感谢我这样做!

我建议您定义两个用户: 1. root@localhost 具有完整的管理员权限和复杂的长密码 2. work@localhost 只允许访问他应该具有适应正常操作的权限(授予)的表(授予)(创建,更改行)。这个用户应该被周围的所有脚本使用。

管理员太强大了,无法不受保护。