當您連線至 MySQL 伺服器時,應使用密碼。密碼不會以明文透過連線傳輸。
所有其他資訊會以文字形式傳輸,任何能夠監看連線的人都能讀取。如果用戶端和伺服器之間的連線經過不受信任的網路,且您對此感到擔心,則可使用壓縮協定,使流量更難以解讀。您也可以使用 MySQL 的內部 SSL 支援,使連線更安全。請參閱第 8.3 節「使用加密連線」。或者,使用 SSH 在 MySQL 伺服器和 MySQL 用戶端之間取得加密的 TCP/IP 連線。您可以在 http://www.openssh.org/ 找到開放原始碼 SSH 用戶端,並在 http://en.wikipedia.org/wiki/Comparison_of_SSH_clients 找到開放原始碼和商業 SSH 用戶端的比較。
為了確保 MySQL 系統安全,您應強烈考慮下列建議
要求所有 MySQL 帳戶都必須有密碼。用戶端程式不一定知道執行它的人的身份。在用戶端/伺服器應用程式中,使用者可為用戶端程式指定任何使用者名稱是很常見的。例如,任何人都可以使用 mysql 程式以任何其他人的身分連線,方法是將其叫用為
mysql -u
,如果other_user
db_name
other_user
沒有密碼。如果所有帳戶都有密碼,則使用其他使用者的帳戶連線會變得更加困難。如需設定密碼的方法討論,請參閱第 8.2.14 節「指派帳戶密碼」。
確保在資料庫目錄中具有讀取或寫入權限的唯一 Unix 使用者帳戶是執行 mysqld 所使用的帳戶。
絕對不要以 Unix
root
使用者身分執行 MySQL 伺服器。這非常危險,因為任何具有FILE
權限的使用者,都能夠導致伺服器以root
身分建立檔案 (例如,~root/.bashrc
)。為了防止這種情況,mysqld 拒絕以root
身分執行,除非明確使用--user=root
選項指定。mysqld 可以 (而且應該) 以一般、非特權使用者身分執行。您可以建立一個名為
mysql
的獨立 Unix 帳戶,以使一切更加安全。此帳戶僅用於管理 MySQL。若要以不同的 Unix 使用者身分啟動 mysqld,請在my.cnf
選項檔案的[mysqld]
群組中,加入一個指定使用者名稱的user
選項,您可以在其中指定伺服器選項。例如:[mysqld] user=mysql
這會導致伺服器以指定的使用者身分啟動,無論您是手動啟動,還是使用 mysqld_safe 或 mysql.server 啟動。如需更多詳細資訊,請參閱第 8.1.5 節「如何以一般使用者身分執行 MySQL」。
以非
root
的 Unix 使用者身分執行 mysqld,並不表示您需要在user
表格中變更root
使用者名稱。MySQL 帳戶的使用者名稱與 Unix 帳戶的使用者名稱無關。請勿將
FILE
權限授予非管理使用者。任何具有此權限的使用者,都可以使用 mysqld 精靈的權限,在檔案系統的任何位置寫入檔案。這包括伺服器的資料目錄,其中包含實作權限表格的檔案。為了使FILE
權限操作更安全,使用SELECT ... INTO OUTFILE
產生的檔案不會覆寫現有檔案,且所有人都可以寫入。FILE
權限也可用於讀取任何可公開讀取或伺服器執行所在 Unix 使用者可存取的檔案。有了此權限,您可以將任何檔案讀入資料庫表格。這可能會被濫用,例如,使用LOAD DATA
將/etc/passwd
載入表格,然後可以使用SELECT
顯示。若要限制可以讀取和寫入檔案的位置,請將
secure_file_priv
系統變數設定為特定目錄。請參閱第 7.1.8 節「伺服器系統變數」。加密二進位日誌檔案和中繼日誌檔案。加密有助於保護這些檔案以及其中包含的潛在敏感資料,防止外部攻擊者濫用,並防止作業系統的使用者未經授權查看。您可以在 MySQL 伺服器上設定
binlog_encryption
系統變數為ON
,以啟用加密。如需更多資訊,請參閱第 19.3.2 節「加密二進位日誌檔案和中繼日誌檔案」。請勿將
PROCESS
或SUPER
權限授予非管理使用者。mysqladmin processlist 和SHOW PROCESSLIST
的輸出會顯示目前正在執行的任何陳述式文字,因此任何被允許查看伺服器程序清單的使用者,都可能會看到其他使用者發出的陳述式。mysqld 為具有
CONNECTION_ADMIN
或SUPER
權限的使用者保留一個額外的連線,如此即使所有一般連線都在使用中,MySQLroot
使用者仍可以登入並檢查伺服器活動。SUPER
權限可用於終止用戶端連線、透過變更系統變數的值來變更伺服器操作,以及控制複寫伺服器。請勿允許使用符號連結到表格。(此功能可以使用
--skip-symbolic-links
選項停用。) 如果您以root
身分執行 mysqld,這一點尤其重要,因為任何具有伺服器資料目錄寫入權限的人,都可以刪除系統中的任何檔案!請參閱第 10.12.2.2 節「在 Unix 上對 MyISAM 表格使用符號連結」。應該使用第 27.6 節「儲存物件存取控制」中討論的安全指南撰寫儲存程式和檢視表。
如果您不信任 DNS,則應該在授權表格中使用 IP 位址,而不是主機名稱。無論如何,您應該非常小心使用包含萬用字元的主機名稱值建立授權表格項目。
如果您想限制允許單一帳戶的連線數,可以透過在 mysqld 中設定
max_user_connections
變數來做到這一點。CREATE USER
和ALTER USER
陳述式也支援資源控制選項,以限制允許帳戶使用的伺服器範圍。請參閱第 15.7.1.3 節「CREATE USER 陳述式」和第 15.7.1.1 節「ALTER USER 陳述式」。如果外掛程式目錄可由伺服器寫入,則使用者可能會使用
SELECT ... INTO DUMPFILE
將可執行程式碼寫入目錄中的檔案。可以透過使plugin_dir
對伺服器唯讀,或將secure_file_priv
設定為可以安全進行SELECT
寫入的目錄來防止這種情況。