在本節中,我們將討論適用於執行 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
使用者身分執行。
切勿以系統根使用者身分執行 mysqld。這樣做表示 MySQL 潛在地可以讀取系統上的任何檔案,因此,如果 MySQL 遭到入侵,攻擊者也可以讀取這些檔案。
如上一節所述 (請參閱 第 25.6.21.2 節「NDB Cluster 和 MySQL 權限」),您應在 MySQL 伺服器執行後立即設定其根密碼。您也應刪除預設安裝的匿名使用者帳戶。您可以使用下列陳述式來完成這些工作
$> 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) 也可在未經身分驗證的情況下運作,並可顯示表格名稱、綱要和資料。依預設,這些公用程式會安裝在具有 wxr-xr-x
(755) 權限的 Unix 樣式系統上,這表示任何可以存取 mysql/bin
目錄的使用者都可以執行這些公用程式。
如需這些公用程式的詳細資訊,請參閱 第 25.5 節「NDB Cluster 程式」。