當你連接一個MySQL服務器時你通常應該使用一個口令口令不以明文在連接上傳輸所有其它信息作為能被任何人讀懂的文本被傳輸如果你擔心這個你可使用壓縮協議(MySQL和以上版本)使事情變得更難甚至為了使一切更安全你應該安裝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用戶編輯mysqlserver啟動腳本mysqld通常這用su命令完成
如果你把一個Unix root用戶口令放在mysqlserver腳本中確保這個腳本只能對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應該使主機名更安全在任何情況下你應該非常小心地使用包含通配符的主機名
From:http://tw.wingwit.com/Article/program/MySQL/201311/29429.html