◆對所有MySQL使用者使用密碼。用戶端程式不需要知道運行它的人員的身份。對於用戶端/伺服器應用程式,使用者可以指定用戶端程式的使用者名稱。例如,如果other_user沒有密碼,任何人可以簡單地用mysql -u other_user db_name冒充他人調用mysql程式進行串連,進行MySQL攻擊。如果所有使用者有密碼,使用其它使用者的賬戶進行串連要困難得多。
要想更改使用者的密碼,應使用SET PASSWORD語句。還可以直接更新mysql資料庫中的user表。例如,要更改所有root使用者的MySQL賬戶的密碼。
以下為引用的內容:
shell> mysql -u root
mysql> UPDATE mysql.user SET Password=PASSWORD('newpwd')
-> WHERE User='root';
mysql> FLUSH PRIVILEGES;
絕對不要作為Unix的root使用者運行MySQL伺服器。這樣做非常危險,因為任何具有FILE許可權的使用者能夠用root建立檔案(例如,~root/.bashrc)。為了防止,mysqld拒絕用root運行,除非使用--user=root選項明顯指定。
應可以(並且應該)用普通非特權使用者運行mysqld。你可以建立獨立的Unix中的mysql賬戶來以便使所有內容更加安全。該賬戶只用於管理MySQL。要想用其它Unix使用者啟動mysqld,增加user選項指定/etc/my.cnf選項檔案或伺服器資料目錄的my.cnf選項檔案中的[mysqld]組的使用者名稱。例如:
以下為引用的內容:
[mysqld]
user=mysql
該命令使伺服器用指定的使用者來啟動,無論你手動啟動或通過mysqld_safe或mysql.server啟動。
作為其它Unix使用者而不用root運行mysqld,你不需要更改user表中的root使用者名稱,因為MySQL賬戶的使用者名稱與Unix賬戶的使用者名稱無關。
◆不要允許使用表的符號連結。(可以用--skip-symbolic-links選項禁用)。如果你用root運行mysqld則特別重要,因為任何對伺服器的資料目錄有寫存取權限的人則能夠刪除系統中的任何檔案!
◆確保mysqld運行時,只使用對資料庫目錄具有讀或寫入權限的Unix使用者來運行。
◆不要將PROCESS或SUPER許可權授給非系統管理使用者。mysqladmin processlist的輸出顯示出當前執行的查詢本文,如果另外的使用者發出一個UPDATE user SET password=PASSWORD('not_secure')查詢,被允許執行那個命令的任何使用者可能看得到。
mysqld為有SUPER許可權的使用者專門保留一個額外的串連,因此即使所有普通串連被佔用,MySQL root使用者仍可以登入並檢查伺服器的活動。
可以使用SUPER許可權來終止用戶端串連,通過更改系統變數的值更改服務的器操作,並控制複製伺服器,防止MySQL攻擊的發生。
◆不要向非系統管理使用者授予FILE許可權。有這許可權的任何使用者能在擁有mysqld守護進程許可權的檔案系統那裡寫一個檔案!為了更加安全,由SELECT ... INTO OUTFILE產生的所有檔案對每個人是可寫的,並且你不能覆蓋已經存在的檔案。
file許可權也可以被用來讀取任何作為運行伺服器的Unix使用者可讀取或訪問的檔案。使用該許可權,你可以將任何檔案讀入資料庫表。這可能被濫用,例如,通過使用LOAD DATA裝載“/etc/passwd”進一個資料庫表,然後能用SELECT顯示它。
◆如果你不信任你的DNS,你應該在授權表中使用IP數字而不是主機名稱。在任何情況下,你應該非常小心地使用包含萬用字元的主機名稱來建立授權表條目,以防MySQL攻擊!
◆如果你想要限制單個賬戶允許的串連數量,你可以設定mysqld中的max_user_connections變數來完成。GRANT語句也可以支援資源控制選項來限制伺服器對一個賬戶允許的使用範圍。
安全永遠是做不完了,駭客也是提高安全的一個重要因素,我們只要保護好自己的mysql伺服器安全就好了。