有其它信息以文本傳送,可以被可以看到連接的任何人讀取。如果你擔心這個,你可以使用壓縮協議來使通信更難以解密。要想使連接更加安全,你應使用SSH來獲得加密的MySQL服務器和MySQL客戶端之間的TCP/IP連接。(注釋:你還可以使用MySQL內部OpenSSL支持。)
為了使MySQL系統安全,強烈要求你考慮下列建議:
◆對所有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語句也可以支持資源控制選項來限制服務器對一個賬戶允許的使用范圍。