在本節中,我們將討論MySQL標準安全性程序,因為它們適用於執行NDB叢集。
一般而言,任何安全執行MySQL的標準程序也適用於將MySQL伺服器作為NDB叢集的一部分執行。首先,您應該始終以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叢集與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叢集公用程式(例如ndb_show_tables、ndb_desc和ndb_select_all)也可以在沒有驗證的情況下工作,並且可以顯示表格名稱、綱要和資料。依預設,這些程式安裝在Unix樣式系統上,權限為wxr-xr-x
(755),這表示任何可以存取mysql/bin
目錄的使用者都可以執行它們。
如需這些公用程式的詳細資訊,請參閱第 25.5 節,〈NDB叢集程式〉。