數據是企業核心資產,數據對企業而言是最重要的工做之一。稍有不慎,極有可能發生數據無心泄露,甚至被黑客惡意竊取的風險。每一年業界都會傳出幾起大事件,某知名或不知名的公司被脫褲(拖庫的諧音,意思是整個數據庫被黑客盜取)之類的。html
從數據安全上也能夠分爲外網安全及內部操做安全,下面分別討論一下。mysql
內部操做安全策略linux
1. 是否回收DBA所有權限nginx
試想,若是DBA沒權限了,平常DB運維的活,以及緊急故障處理,該怎麼實施呢?所以,建議在沒有成熟的自動化運維平臺前,不該該粗暴的回收DBA的太多權限,不然可能會致使工做效率下降的,甚至DBA有一種不被信任的負面情緒。git
2. MySQL層安全策略github
- 業務賬號最多隻能夠經過內網遠程登陸,而不能經過公網遠程鏈接。
- 增長運維平臺帳號,該帳號容許從專用的管理平臺服務器遠程鏈接。固然了,要對管理平臺部署所在服務器作好安全措施以及必要的安全審計策略。
- 建議啓用數據庫審計功能。這須要使用MySQL企業版,或者Percona/MariaDB分支版本,MySQL社區版本不支持該功能。
- 啓用 safe-update 選項,避免沒有 WHERE 條件的全表數據被修改;
- 在應用中儘可能不直接DELETE刪除數據,而是設置一個標誌位就行了。須要真正刪除時,交由DBA先備份後再物理刪除,避免誤操做刪除所有數據。
- 還能夠採用觸發器來作一些輔助功能,好比防止黑客惡意篡改數據。
3. MySQL帳號權限規則web
- 業務賬號,權限最小化,堅定不容許DROP、TRUNCATE權限。
- 業務帳號默認只授予普通的DML所需權限,也就是select、update、insert、delete、execute等幾個權限,其他不給。
- MySQL初始化後,先行刪除無用帳號,刪除匿名test數據庫
mysql> delete from mysql.user where user!='root' or host!='localhost'; flush privileges;
mysql> drop database test;
- 建立備份專用帳號,只有SELECT權限,且只容許本機可登入。
- 設置MySQL帳號的密碼安全策略,包括長度、複雜性。
4. 關於數據備份算法
記住,作好數據全量備份是系統崩潰沒法修復時的最後一律救命稻草。
備份數據還能夠用來作數據審計或是用於數據倉庫的數據源拉取之用。
通常來講,備份策略是這樣的:天天一次全備,而且按期對binlog作增備,或者直接利用binlog server機制將binlog傳輸到其餘遠程主機上。有了全備+binlog,就能夠按需恢復到任什麼時候間點。
特別提醒:當採用xtrabackup的流式備份時,考慮採用加密傳輸,避免備份數據被惡意截取。sql
外網安全策略數據庫
事實上,操做系統安及應用安全要比數據庫自身的安全策略更重要。同理,應用程序及其所在的服務器端的系統安全也很重要,不少數據安全事件,都是經過代碼漏洞入侵到應用服務器,再去探測數據庫,最後成功拖庫。
1. 操做系統安全建議
- 運行MySQL的Linux必須只運行在內部網絡,不容許直接對公網暴露,實在有須要從公網鏈接的話,再經過跳板機作端口轉發,而且如上面所述,要嚴格限制數據庫帳號權限級別。
- 系統帳號都改爲基於ssh key認證,不容許遠程密碼登入,且ssh key的算法、長度有要求以確保相對安全。這樣就沒有密碼丟失的風險,除非我的的私鑰被盜。
- 進一步的話,甚至能夠對所有服務器啓用PAM認證,作到帳號的統一管理,也更方便、安全。
- 關閉沒必要要的系統服務,只開必須的進程,例如 mysqld、sshd、networking、crond、syslogd 等服務,其它的都關閉。
- 禁止root帳號遠程登陸。
- 禁止用root帳號啓動mysqld等普通業務服務進程。
- sshd服務的端口號建議修改爲10000以上。
- 在不影響性能的前提下,儘量啓用對MySQL服務端口的防火牆策略(高併發時,採用iptables可能影響性能,建議改用ip route策略)。
- GRUB必須設置密碼,物理服務器的Idrac/imm/ilo等帳號默認密碼也要修改。
- 每一個須要登入系統的員工,都使用每一個人私有賬號,而不是使用公共帳號。
- 應該啓用系統層的操做審計,記錄全部ssh日誌,或利bash記錄相應的操做命令併發送到遠程服務器,而後進行相應的安全審計,及時發現不安全操做。
- 正確設置MySQL及其餘數據庫服務相關目錄權限,不要全是755,通常750就夠了。
- 能夠考慮部署堡壘機,全部鏈接遠程服務器都須要先經過堡壘機,堡壘機上就能夠實現全部操做記錄以及審計功能了。
- 腳本加密對安全性提高其實沒太大幫助。對有經驗的黑客來講,只要有系統登入權限,就能夠經過提權等方式輕鬆得到root。
2. 應用安全建議
- 禁用web server的autoindex配置。
- 從制度層面,杜絕員工將代碼上傳到外部github上,由於極可能存在內部IP、帳號密碼泄露的風險,真的要上傳必須先通過安全審覈。
- 儘可能不要在公網上使用開源的cms、blog、論壇等系統,除非作過代碼安全審計,或者事先作好安全策略。這類系統通常都是黑客重點研究對象,很容易被搞;
- 在web server層,能夠用一些安全模塊,好比nginx的WAF模塊;
- 在app server層,能夠作好代碼安全審計、安全掃描,防止XSS攻擊、CSRF攻擊、SQL注入、文件上傳攻擊、繞過cookie檢測等安全漏洞;
- 應用程序中涉及帳號密碼的地方例如JDBC鏈接串配置,儘可能把明文密碼採用加密方式存儲,再利用內部私有的解密工具進行反解密後再使用。或者可讓應用程序先用中間帳號鏈接proxy層,再由proxy鏈接MySQL,避免應用層直連MySQL;
最後咱們想說,任何高明的安全策略,都不如內部員工的安全意識來的重要。之前發生過一塊兒案例,公司內有位員工的PC不慎中毒,結果致使內網數據被盜。
安全無小事,每一個人都應銘記於心。在數據安全面前,能夠適當犧牲一些便利性,固然也不能太過,不然可能得不償失。
本文地址:http://www.linuxprobe.com/mysql-security-strategy.html