Documentation Home

21.6.18.3 NDB Cluster 和 MySQL 安全程序

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

通常,任何安全运行 MySQL 的标准过程也适用于将 MySQL 服务器作为 NDB Cluster 的一部分运行。首先,您应该始终以mysql操作系统用户身份运行 MySQL 服务器;这与在标准(非集群)环境中运行 MySQL 没有什么不同。系统mysql账户应该唯一且明确定义。幸运的是,这是新 MySQL 安装的默认行为。您可以使用如下所示的系统命令来验证mysqld进程是否以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 数据目录(使用 mysqld--datadir的选项 设置)归 用户所有,并且 SQL 节点的 文件包含 在该 部分中。或者,您可以启动 MySQL 服务器进程mysqlmy.cnfuser=mysql[mysqld]--user=mysql在命令行上,但最好使用该 my.cnf选项,因为您可能会忘记使用命令行选项,因此 无意中让mysqld以另一个用户身份运行。mysqld_safe启动脚本强制 MySQL 以用户身份运行mysql

重要的

切勿以系统根用户身份运行mysqld 。这样做意味着系统上的任何文件都可能被 MySQL 读取,因此——如果 MySQL 受到威胁——攻击者。

如上一节所述(请参阅 第 21.6.18.2 节,“NDB Cluster 和 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 用户。请务必在 FLUSH PRIVILEGES修改表后立即运行该语句mysql.user ,以便更改立即生效。如果没有 FLUSH PRIVILEGES,更改将在下次重新启动服务器时才会生效。

笔记

许多 NDB Cluster 实用程序,如 ndb_show_tablesndb_descndb_select_all也可以在没有身份验证的情况下工作,并且可以显示表名、模式和数据。默认情况下,它们安装在具有权限wxr-xr-x(755) 的 Unix 样式系统上,这意味着它们可以由任何可以访问该 mysql/bin目录的用户执行。

有关这些实用程序的更多信息, 请参阅第 21.5 节,“NDB Cluster Programs” 。