我正在使用 ubuntu 12.04 并尝试确保安全。我对 Linux 还很陌生,所以我不太清楚如何解释这一点。
我使用登录到我的根帐户mysql -u root -p
,然后查看我输入的所有用户, SELECT User FROM mysql.user;
结果显示以下内容
+------------------+
| User |
+------------------+
| root |
| root |
| |
| root |
| |
| Testing |
| debian-sys-maint |
| phpmyadmin |
| root |
+------------------+
我登录 phpmyadmin 查看每个根帐户的用途,发现它们都有不同的主机。Localhost、127.0.0.1、::1 和另一个 IP 地址。有必要保留所有这些吗?我目前通过 SSH 进入我的服务器(使用密钥对),然后通过终端或直接从我的 URL 通过 PHPMyadmin 访问 MySQL,所以我很确定我只是通过 localhost 根帐户访问它,而不是其他任何帐户。
如果我更改了 root 密码,所有其他 MySQL root 帐户是否也会更改(来自不同主机)?在这种情况下,你们会怎么做才能使其更安全?
这是我打算做的,但也许还有更好的方法。我打算将 MySQL 根用户的密码更改为较长且随机的密码(并写下来),然后创建另一个密码较短的帐户用于日常管理。
为了记录在案,我已经限制了 PHPMyAdmin 的 IP 访问并创建了一个别名,我只是想尽一切努力阻止某些混蛋试图掌握它。
答案1
尽管它们都名为“root”,但 MySQL 将每个用户条目视为一个唯一帐户。帐户基于“用户”@“主机”组合。它们中的每一个能有一个单独的密码,尽管这很容易成为帐户管理的噩梦。
您可以通过多种方式更改帐户的密码,并且根据您的操作方式,您可能需要对每个帐户重复此操作以保持它们同步。
第一种方法(可能是大多数人都熟悉的)是使用SET PASSWORD
shell> mysql -u root -p
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'::1' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'host_name' = PASSWORD('newpwd');
如果你想一次性更新所有内容,你可以使用UPDATE
shell> mysql -u root -p
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd')
-> WHERE User = 'root';
mysql> FLUSH PRIVILEGES;
第三种方法是使用该mysqladmin
工具
shell> mysqladmin -u root password "newpwd"
shell> mysqladmin -u root -h host_name password "newpwd"
如果使用此方法,需要注意:
mysqladmin
设置帐户密码的方法不适root
用于'root'@'127.0.0.1'
或'root'@'::1'
帐户。请使用SET PASSWORD
前面显示的方法。
更多信息MySQL 站点
我同意您使用单独帐户来处理日常任务的想法,您只需要找到适合您需要的正确权限组合,而不要太过分。
我还会定期查看您的服务器日志(或使用工具)来监控数据库登录,例如 root 用户的登录。
您可以做很多事情来确保您的安装的安全,但这很容易超出此范围。
答案2
Ubuntu 12.04 中全新安装的 MySQL 显示了这一点。
mysql>从 mysql.user 中选择用户、主机; +------------------+-----------------------+ | 用户 | 主机 | +------------------+-----------------------+ | 根 | 127.0.0.1 | | 根 | ::1 | | | 本地主机| | debian-sys-maint | 本地主机 | | 根 | 本地主机 | | | 我的服务器 | | 根目录 | 我的服务器 | +------------------+-----------------------+
127.0.0.1, ::1, localhost, myserver(server hostname)
是默认设置的。这些条目实际上与::1
的 IPV6 等效localhost
,因此一般来说是安全的。
因此,基本上,这些条目表示您允许这些主机以 身份连接到 MySQL root
。 在您的例子中,您还允许another IP address
以 root 身份连接到您的 MySQL。 如果没有脚本或应用程序从该 IP 地址连接到 MySQL,您可能需要删除该条目。
您仍然有一个根帐户,因此更改密码将反映到所有连接,无论主机如何。
您还可以运行这个非常有用的命令来保护您的 MySQL 服务器。
sudo mysql_secure_installation