mysql 安全策略
MySQL被運用於越來越多的業務中,在關鍵業務中對資料安全性的要求也更高,如何保證MySQL的資料安全。 資料安全如果只靠MySQL應用層面顯然是不夠的,是需要在多個層面來保護的,包括網路、系統、邏輯應用層、資料庫層等。 下面是我們可借鑑的一些安全策略。 1、網路、系統層面 在這個層面可以做很多的事情,我們可以把這些安全要求作為新系統安裝時的標準要求,放到自動化裝機方案中。 把執行MySQL的伺服器放在內網中,不要啟用公網; 迫不得已啟用公網的話,修改sshd埠到10000以上; 設定防火牆策略,只允許信任的伺服器連線sshd和MySQL埠; 修改idrac/imm密碼,設定GRUB密碼; 設定密碼安全策略,比如要求 PASS_MIN_LEN 不低於8位,其實最好是直接用一個複雜密碼做MD5之後再作為正式密碼,32位長度的安全程度夠高吧; 將操作日誌記入syslog並且傳送到遠端log server上,堅決不能只儲存在本地; 除了必須的賬號,其他的都設為無登入許可權; 儘量把執行MySQL的伺服器獨立出來,不要和web server、app server放一起。必須放一起的話,也要設定好許可權分離,不允許web server、app server程序的屬主有直接訪問MySQL datadir的許可權; 禁用web server層的autoindex配置; 可能的話,採用https代替http; 關鍵應用保持更新,避免老版本的漏洞風險; 設定nginx、php等應用服務的安全策略,禁用危險函式等; 可以考慮購買運營商提供的一些安全防護、掃描器等產品; 堅決杜絕二逼行為,把關鍵配置檔案上傳到公共網路上(如把公司專案程式碼放在github上作為個人專案,內含內網賬號密碼資訊)。 2、邏輯應用層 在這個層面,等多的是依賴運營及開發人員的安全意識,很多本可以避免的低階安全漏洞完全可以在這個層面處理掉,比如下面提到的XSS、CSRF、SQL注入等漏洞。 儘量不要在公網上使用開源的cms、blog、論壇等系統,除非做過程式碼安全審計,或者事先做好安全策略。這類系統一般都是黑客重點研究物件,很容易被搞; 在web server層,可以用一些安全模組,比如nginx的WAF模組; 在app server層,可以做好程式碼安全審計、安全掃描,防止XSS攻擊、CSRF攻擊、SQL注入、檔案上傳攻擊、繞過cookie檢測等安全漏洞; 應用程式中涉及賬號密碼的地方例如JDBC連線串配置,儘量把明文密碼採用加密方式儲存,再利用內部私有的解密工具進行反解密後再使用。或者可以讓應用程式先用中間賬號連線proxy層,再由proxy連線MySQL,避免應用層直連MySQL; 應用層啟用關鍵日誌記錄,例如交易日誌,方便後續對賬什麼的。 3、MySQL資料庫層 前面幾層如果都做的不夠安全的話,在這層也幾乎是岌岌可危了。但我們依然可以做些事情的。 啟用 safe-update 選項,避免沒有 WHERE 條件的全表資料被修改; 將 binlog 的儲存週期加長,便於後續的審計、審查; 應用賬號只賦予SELECT、UPDATE、INSERT許可權,取消DELETE許可權。把需要DELETE許可權的邏輯改成用UPDATE實現,避免被物理刪除; 需要真正刪除時,交由DBA先備份後再物理刪除; 可以採用Percona的SQL審計外掛,據說還有macfee的外掛; 還可以採用觸發器來做一些輔助功能,比如防止黑客惡意篡改資料。 4、後記 資料安全可以做的事情很多,本文也只是羅列了一些比較簡單可快速實施的方案。每個企業應有自己的安全策略規範,每一位參與者都應該心懷敬畏,努力遵守這些必要的規範,不使資訊保安成為空談。 真正的資料安全,是靠所有人的意識安全作為支撐的,沒有這個意識靠機制、制度、工具都是不靠譜。