使用MySQL安全問題不能不注意以下是MySQL提示的個注意事項
如果客戶端和服務器端的連接需要跨越並通過不可信任的網絡那麼就需要使用SSH隧道來加密該連接的通信
用set password語句來修改用戶的密碼三個步驟先mysql u root登陸數據庫系統然後mysql> update mysqluser set password=password(newpwd)最後執行flush privileges就可以了
需要提防的攻擊有防偷聽篡改回放拒絕服務等不涉及可用性和容錯方面對所有的連接查詢其他操作使用基於ACL即訪問控制列表的安全措施來完成也有一些對SSL連接的支持
除了root用戶外的其他任何用戶不允許訪問mysql主數據庫中的user表
加密後存放在user表中的加密後的用戶密碼一旦洩露其他人可以隨意用該用戶名/密碼相應的數據庫
用grant和revoke語句來進行用戶訪問控制的工作
不使用明文密碼而是使用md()和sha()等單向的哈系函數來設置密碼
不選用字典中的字來做密碼
采用防火牆來去掉%的外部危險讓數據庫系統躲在防火牆後面工作或放置在DMZ區域中
從因特網上用nmap來掃描端口也可用telnet server_host 的方法測試不能允許從非信任網絡中訪問數據庫服務器的號TCP端口因此需要在防火牆或路由器上做設定
為了防止被惡意傳入非法參數例如where ID=別人卻輸入where ID= OR =導致全部顯示所以在web的表單中使用或來用字符串在動態URL中加入%代表雙引號%代表井號%代表單引號傳遞未檢查過的值給mysql數據庫是非常危險的
在傳遞數據給mysql時檢查一下大小
應用程序需要連接到數據庫應該使用一般的用戶帳號只開放少數必要的權限給該用戶
在各編程接口(C C++ PHP Perl Java JDBC等)中使用特定逃脫字符函數
在因特網上使用mysql數據庫時一定少用傳輸明文的數據而用SSL和SSH的加密方式數據來傳輸
學會使用tcpdump和strings工具來查看傳輸數據的安全性例如tcpdump l i eth w src or dst port | strings以普通用戶來啟動mysql數據庫服務
不使用到表的聯結符號選用的參數 skipsymboliclinks
確信在mysql目錄中只有啟動數據庫服務的用戶才可以對文件有讀和寫的權限
不許將process或super權限付給非管理用戶該mysqladmin processlist可以列舉出當前執行的查詢文本super權限可用於切斷客戶端連接改變服務器運行參數狀態控制拷貝復制數據庫的服務器
file權限不付給管理員以外的用戶防止出現load data /etc/passwd到表中再用select 顯示出來的問題
如果不相信DNS服務公司的服務可以在主機名稱允許表中只設置IP數字地址
使用max_user_connections變量來使mysqld服務進程對一個指定帳戶限定連接數
grant語句也支持資源控制選項
啟動mysqld服務進程的安全選項開關localinfile=或 若是則客戶端程序就無法使用local load data了賦權的一個例子grant insert(user) on mysqluser to user_name@host_name;若使用skipgranttables系統將對任何用戶的訪問不做任何訪問控制但可以用mysqladmin flushprivileges或mysqladmin reload來開啟訪問控制默認情況是show databases語句對所有用戶開放可以用skipshowdatabases來關閉掉
碰到Error () Access Denied for user root@localhost (Using password:NO)錯誤時你需要重新設置密碼具體方法是先用skipgranttables參數啟動mysqld然後執行mysql u root mysqlmysql>update user set password=password(newpassword) where user=root;mysql>Flush privileges;最後重新啟動mysql就可以了
From:http://tw.wingwit.com/Article/program/MySQL/201311/29383.html