21.5.17.3 NDB 群集和 MySQL 安全过程

在本节中,我们将讨论适用于运行 NDB 群集的 MySQL 标准安全性过程。

通常,任何安全运行 MySQL 的标准过程也适用于作为 NDB 群集的一部分运行 MySQL Server。首先,您应该始终以mysqlos 用户身份运行 MySQL 服务器;这与在标准(非集群)环境中运行 MySQL 没什么不同。 mysql系统帐户应唯一且明确定义。幸运的是,这是新安装的 MySQL 的默认行为。您可以使用系统命令(例如此处显示的命令)来验证mysqld进程是否以mysqlos 用户身份运行:

shell> 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 数据目录(使用mysqld--datadir选项设置)由mysql用户拥有,并且 SQL 节点的my.cnf文件在[mysqld]部分中包含user=mysql。另外,您可以在命令行上使用--user=mysql启动 MySQL 服务器进程,但最好使用my.cnf选项,因为您可能会忘记使用命令行选项,因此mysqld会无意地作为另一个用户运行。 mysqld_safe启动脚本强制 MySQL 以mysql用户身份运行。

Important

切勿以系统 root 用户身份运行mysqld。这样做意味着 MySQL 可以潜在地读取系统上的任何文件,因此-攻击者应将 MySQL 破坏(应将 MySQL 破坏)。

如上一节所述(请参见第 21.5.17.2 节“ NDB 群集和 MySQL 特权”),运行 MySQL 服务器后,应始终为其设置 root 密码。您还应该删除默认情况下安装的匿名用户帐户。您可以使用以下语句完成这些任务:

shell> 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子句,否则您可能会删除* all * MySQL 用户。修改mysql.usertable 后,请确保立即运行FLUSH PRIVILEGES语句,以使更改立即生效。如果没有FLUSH PRIVILEGES,则更改将在下次重新启动服务器之前生效。

Note

许多 NDB 群集 Util(例如ndb_show_tablesndb_descndb_select_all)也无需身份验证即可工作,并且可以显示 table 名称,架构和数据。默认情况下,它们以wxr-xr-x(755)权限安装在 Unix 风格的系统上,这意味着它们可以由可以访问mysql/bin目录的任何用户执行。

有关这些 Util 的更多信息,请参见第 21.4 节“ NDB 群集程序”