文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  使 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.7 節「儲存物件存取控制」中討論的安全指南來編寫儲存的程式和檢視。

  • 如果您不信任您的 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 寫入的目錄來防止這種情況。