Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  NDB Cluster and MySQL Security Procedures

25.6.21.3 NDB 集群和 MySQL 安全性程序

在本节中,我们讨论了运行 NDB 集群时适用的 MySQL 标准安全程序。

一般来说,对于运行 MySQL 的任何标准安全程序,都同样适用于作为 NDB 集群的一部分运行的 MySQL 服务器。首先,最重要的是,你应该始终以 mysql 操作系统用户身份运行 MySQL 服务器;这与在非集群环境中运行 MySQL 没有不同。mysql 系统账户应独一无二且清晰定义。幸运的是,这是新 MySQL 安装的默认行为。你可以通过使用类似于以下命令来验证 mysqld 进程是否以 mysql 操作系统用户身份运行: ps -ef | grep mysql 或者在 Windows 系统上使用任务管理器或命令提示符来检查。确保 MySQL 服务器进程没有以 root 用户身份运行,因为这可能会导致安全问题。此外,确保 MySQL 数据目录和日志文件都有适当的访问控制,以防止未授权访问。最后,定期备份你的数据,并使用强密码策略来保护你的 MySQL 实例。

$> ps aux | grep mysql
root     10467  0.0  0.1   3616  1380 pts/3    S    11:53   0:00 \
  /bin/sh ./mysqld_safe --ndbcluster --ndb-connectstring=localhost:1186
mysql    10512  0.2  2.5  58528 26636 pts/3    Sl   11:53   0:00 \
  /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql \
  --datadir=/usr/local/mysql/var --user=mysql --ndbcluster \
  --ndb-connectstring=localhost:1186 --pid-file=/usr/local/mysql/var/mothra.pid \
  --log-error=/usr/local/mysql/var/mothra.err
jon      10579  0.0  0.0   2736   688 pts/0    S+   11:54   0:00 grep mysql

如果 mysqld 进程以任何用户身份运行,而不是 mysql,您应该立即停止它并重新启动它作为 mysql 用户。如果该用户在系统上不存在,应创建 mysql 用户帐户,并确保该用户属于 mysql 用户组;此时,您还应该检查该系统上的 MySQL 数据目录(使用 --datadir 选项启动 mysqld)是否由 mysql 用户所有,并确保 SQL 节点的 my.cnf 文件在 [mysqld] 部分包含 user=mysql。或者,您可以在命令行上使用 --user=mysql 启动 MySQL 服务器进程,但更推荐使用 my.cnf 选项,因为如果忘记在命令行上使用该选项,您可能会不小心让 mysqld 以其他用户身份运行。MySQL 启动脚本 mysqld_safe 强制 MySQL 以 mysql 用户身份运行。

Important

不要以系统root用户运行mysqld。这样做意味着潜在地任何系统文件都可以被MySQL读取,因此——如果MySQL被破坏了——攻击者也能访问这些文件。

如前一节所述(参见第25.6.21.2节,“NDB集群和MySQL权限”),您应该在MySQL服务器启动后立即设置root密码,并删除默认安装的匿名用户帐户。可以使用以下语句来完成这些任务:

$> mysql -u root

mysql> UPDATE mysql.user
    ->     SET Password=PASSWORD('secure_password')
    ->     WHERE User='root';

mysql> DELETE FROM mysql.user
    ->     WHERE User='';

mysql> FLUSH PRIVILEGES;

执行DELETE语句时,请非常小心,不要忘记添加WHERE子句,否则可能会删除所有MySQL用户。确保在修改mysql.user表后立即运行FLUSH PRIVILEGES语句,以便更改立即生效。没有FLUSH PRIVILEGES,更改直到服务器下次重启才会生效。

Note

NDB集群工具中有许多,如ndb_显示表ndb_descndb_select_all可以在没有身份验证的情况下工作,并且可以显示表名、模式和数据。默认情况下,这些工具在Unix风格的系统上安装,权限为wxr-xr-x(755),这意味着任何能够访问mysql/bin目录的用户都可以执行它们。

有关这些工具的更多信息,请参阅第25.5节,“NDB集群程序”