當你串連一個MySQL伺服器時,你通常應該使用一個口令。口令不以明文在串連上傳輸。所有其它資訊作為能被任何人讀懂的文本被傳輸。如果你擔心這個,你可使用壓縮協議(MySQL3.22和以上版本)使事情變得更難。甚至為了使一切更安全,你應該安裝ssh。用它,你能在一個MySQL伺服器與一個MySQL客戶之間得到一個加密的tcp/ip串連。
為了使一個MySQL系統安全,強烈要求你考慮下列建議:
對所有MySQL使用者使用口令。記住,如果other_user沒有口令,任何人能簡單地用MySQL -u other_user db_name作為任何其它的人登入。對客戶機/伺服器應用程式,客戶可以指定任何使用者名稱是常見的做法。在你運行它以前,你可以通過編輯MySQL_install_db指令碼改變所有使用者的口令,或僅僅MySQL root的口令像這樣:
shell> mysql -u root mysql mysql> update user
set password=password("new_password")
where user="root"; mysql> flush privileges;
不要作為Unix的root使用者運行MySQL守護進程。mysqld能以任何使用者運行,你也可以創造一個新的Unix使用者MySQL使一切更安全。如果你作為其它Unix使用者運行mysqld,你不需要改變在user表中的root使用者名稱,因為Mysql使用者名稱與unix 使用者名稱沒關係。你可以作為其它unix使用者編輯mysql.server啟動指令碼mysqld。通常這用su命令完成。
如果你把一個Unix root使用者口令放在mysql.server指令碼中,確保這個指令碼只能對root是可讀的。
檢查那個運行Mysqld的Unix使用者是唯一的在資料庫目錄下有讀/寫入權限的使用者。
不要把process許可權給所有使用者。mysqladmin processlist的輸出顯示出當前執行的查詢本文,如果另外的使用者發出一個update user set password=password("not_secure")查詢,被允許執行那個命令的任何使用者可能看得到。mysqld為有process許可權的使用者保留一個額外的串連, 以便一個mysql root使用者能登入並檢查,即使所有的正常串連在使用。不要把file許可權給所有的使用者。
有這許可權的任何使用者能在擁有mysqld守護進程許可權的檔案系統那裡寫一個檔案!為了使這更安全一些,用select ... into outfile產生的所有檔案對每個人是可讀的,並且你不能覆蓋已經存在的檔案。
file許可權也可以被用來讀取任何作為運行伺服器的unix使用者可存取的檔案。這可能被濫用,例如,通過使用load data裝載“/etc/passwd”進一個資料庫表,然後它能用select被讀入。
如果你不信任你的dns,你應該在授權表中使用IP數字而不是主機名稱。原則上講,--secure選項對mysqld應該使主機名稱更安全。在任何情況下,你應該非常小心地使用包含萬用字元的主機名稱。