21.5.17.3 NDB 群集和 MySQL 安全过程
在本节中,我们将讨论适用于运行 NDB 群集的 MySQL 标准安全性过程。
通常,任何安全运行 MySQL 的标准过程也适用于作为 NDB 群集的一部分运行 MySQL Server。首先,您应该始终以mysql
os 用户身份运行 MySQL 服务器;这与在标准(非集群)环境中运行 MySQL 没什么不同。 mysql
系统帐户应唯一且明确定义。幸运的是,这是新安装的 MySQL 的默认行为。您可以使用系统命令(例如此处显示的命令)来验证mysqld进程是否以mysql
os 用户身份运行:
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.user
table 后,请确保立即运行FLUSH PRIVILEGES语句,以使更改立即生效。如果没有FLUSH PRIVILEGES,则更改将在下次重新启动服务器之前生效。
Note
许多 NDB 群集 Util(例如ndb_show_tables,ndb_desc和ndb_select_all)也无需身份验证即可工作,并且可以显示 table 名称,架构和数据。默认情况下,它们以wxr-xr-x
(755)权限安装在 Unix 风格的系统上,这意味着它们可以由可以访问mysql/bin
目录的任何用户执行。
有关这些 Util 的更多信息,请参见第 21.4 节“ NDB 群集程序”。