在本节中,我们将讨论适用于运行 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 数据目录(使用 --datadir
选项为 mysqld 设置)归 mysql
用户所有,并且 SQL 节点的 my.cnf
文件在 [mysqld]
部分中包含 user=mysql
。或者,您可以在命令行上使用 --user=mysql
启动 MySQL 服务器进程,但最好使用 my.cnf
选项,因为您可能会忘记使用命令行选项,从而无意中导致 mysqld 以其他用户身份运行。mysqld_safe 启动脚本强制 MySQL 以 mysql
用户身份运行。
切勿以系统 root 用户身份运行 mysqld。这样做意味着系统上的任何文件都可能被 MySQL 读取,因此——如果 MySQL 被入侵——攻击者也可以读取这些文件。
如上一节所述(见 第 25.6.21.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 用户。确保在修改 mysql.user
表后立即运行 FLUSH PRIVILEGES
语句,以便更改立即生效。如果没有 FLUSH PRIVILEGES
,更改将在下次服务器重启时才生效。
许多 NDB Cluster 实用程序,如 ndb_show_tables、ndb_desc 和 ndb_select_all 也可以在没有身份验证的情况下工作,并且可以显示表名、模式和数据。默认情况下,这些实用程序在类 Unix 系统上以 wxr-xr-x
(755) 权限安装,这意味着任何可以访问 mysql/bin
目录的用户都可以执行它们。
有关这些实用程序的更多信息,请参阅 第 25.5 节,“NDB Cluster 程序”。