文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  使 MySQL 免受攻擊者侵害

8.1.3 使 MySQL 免受攻擊者侵害

當您連線至 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_safemysql.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 節「加密二進位日誌檔案和中繼日誌檔案」

  • 請勿將 PROCESSSUPER 權限授予非管理使用者。mysqladmin processlistSHOW PROCESSLIST 的輸出會顯示目前正在執行的任何陳述式文字,因此任何被允許查看伺服器程序清單的使用者,都可能會看到其他使用者發出的陳述式。

    mysqld 為具有 CONNECTION_ADMINSUPER 權限的使用者保留一個額外的連線,如此即使所有一般連線都在使用中,MySQL root 使用者仍可以登入並檢查伺服器活動。

    SUPER 權限可用於終止用戶端連線、透過變更系統變數的值來變更伺服器操作,以及控制複寫伺服器。

  • 請勿允許使用符號連結到表格。(此功能可以使用 --skip-symbolic-links 選項停用。) 如果您以 root 身分執行 mysqld,這一點尤其重要,因為任何具有伺服器資料目錄寫入權限的人,都可以刪除系統中的任何檔案!請參閱第 10.12.2.2 節「在 Unix 上對 MyISAM 表格使用符號連結」

  • 應該使用第 27.6 節「儲存物件存取控制」中討論的安全指南撰寫儲存程式和檢視表。

  • 如果您不信任 DNS,則應該在授權表格中使用 IP 位址,而不是主機名稱。無論如何,您應該非常小心使用包含萬用字元的主機名稱值建立授權表格項目。

  • 如果您想限制允許單一帳戶的連線數,可以透過在 mysqld 中設定 max_user_connections 變數來做到這一點。 CREATE USERALTER USER 陳述式也支援資源控制選項,以限制允許帳戶使用的伺服器範圍。請參閱第 15.7.1.3 節「CREATE USER 陳述式」第 15.7.1.1 節「ALTER USER 陳述式」

  • 如果外掛程式目錄可由伺服器寫入,則使用者可能會使用 SELECT ... INTO DUMPFILE 將可執行程式碼寫入目錄中的檔案。可以透過使 plugin_dir 對伺服器唯讀,或將 secure_file_priv 設定為可以安全進行 SELECT 寫入的目錄來防止這種情況。