MySQL安全策略

MySQL安全策略

導讀

除了MySQL自身的賬號密碼安全管理,系統層面、應用層面的安全策略你注意到了嗎?

數據是企業核心資產,數據對企業而言是最重要的工作之一。稍有不慎,極有可能發生數據無意泄露,甚至被惡意竊取的風險。每年業界都會傳出幾起大事件,某知名或不知名的公司被(的諧音,意思是整個數據庫被盜取)之類的。

從數據安全上也可以分爲外網安全及內部操作安全,下面分別討論一下。

一、內部操作安全策略

1. 是否回收DBA全部權限

試想,如果DBA沒權限了,日常DB運維的活,以及緊急故障處理,該怎麼實施呢?因此,建議在沒有成熟的自動化運維平臺前,不應該粗暴的回收DBA的太多權限,否則可能會導致工作效率降低的,甚至DBA有一種不被信任的負面情緒。

2. MySQL層安全策略

1)業務帳號最多只可以通過內網遠程登錄,而不能通過公網遠程連接。
2)增加運維平臺賬號,該賬號允許從專用的管理平臺服務器遠程連接。當然了,要對管理平臺部署所在服務器做好安全措施以及必要的安全審計策略。
3)建議啓用數據庫審計功能。這需要使用MySQL企業版,或者Percona/MariaDB分支版本,MySQL社區版本不支持該功能。
4)啓用 safe-update 選項,避免沒有 WHERE 條件的全表數據被修改;
5)在應用中儘量不直接DELETE刪除數據,而是設置一個標誌位就好了。需要真正刪除時,交由DBA先備份後再物理刪除,避免誤操作刪除全部數據。
6)還可以採用觸發器來做一些輔助功能,比如防止***惡意篡改數據。

3. MySQL賬號權限規則

1)業務帳號,權限最小化,堅決不允許DROP、TRUNCATE權限。
2)業務賬號默認只授予普通的DML所需權限,也就是select、update、insert、delete、execute等幾個權限,其餘不給。
3)MySQL初始化後,先行刪除無用賬號,刪除匿名test數據庫
mysql> delete from mysql.user where user!='root' or host!='localhost'; flush privileges;
mysql> drop database test;
4)創建備份專用賬號,只有SELECT權限,且只允許本機可登入。
5)設置MySQL賬號的密碼安全策略,包括長度、複雜性。

4. 關於數據備份

記住,做好數據全量備份是系統崩潰無法修復時的最後一概救命稻草。
備份數據還可以用來做數據審計或是用於數據倉庫的數據源拉取之用。
一般來說,備份策略是這樣的:每天一次全備,並且定期對binlog做增備,或者直接利用binlog server機制將binlog傳輸到其他遠程主機上。有了全備+binlog,就可以按需恢復到任何時間點。
特別提醒:當採用xtrabackup的流式備份時,考慮採用加密傳輸,避免備份數據被惡意截取。

二、外網安全策略

事實上,操作系統安及應用安全要比數據庫自身的安全策略更重要。同理,應用程序及其所在的服務器端的系統安全也很重要,很多數據安全事件,都是通過代碼漏洞到應用服務器,再去探測數據庫,最後成功

1. 操作系統安全建議

1)運行MySQL的Linux必須只運行在內部網絡,不允許直接對公網暴露,實在有需要從公網連接的話,再通過跳板機做端口轉發,並且如上面所述,要嚴格限制數據庫賬號權限級別。
2)系統賬號都改成基於ssh key認證,不允許遠程密碼登入,且ssh key的算法、長度有要求以確保相對安全。這樣就沒有密碼丟失的風險,除非個人的私鑰被盜。
進一步的話,甚至可以對全部服務器啓用PAM認證,做到賬號的統一管理,也更方便、安全。
3)關閉不必要的系統服務,只開必須的進程,例如 mysqld、sshd、networking、crond、syslogd 等服務,其它的都關閉。
4)禁止root賬號遠程登錄。
5)禁止用root賬號啓動mysqld等普通業務服務進程。
6)sshd服務的端口號建議修改成10000以上。
7)在不影響性能的前提下,儘可能啓用對MySQL服務端口的防火牆策略(高併發時,採用iptables可能影響性能,建議改用ip route策略)。
8)GRUB必須設置密碼,物理服務器的Idrac/imm/ilo等賬號默認密碼也要修改。
9)每個需要登入系統的員工,都使用每個人私有帳號,而不是使用公共賬號。
10)應該啓用系統層的操作審計,記錄所有ssh日誌,或利bash記錄相應的操作命令併發送到遠程服務器,然後進行相應的安全審計,及時發現不安全操作。
11)正確設置MySQL及其他數據庫服務相關目錄權限,不要全是755,一般750就夠了。
12)可以考慮部署堡壘機,所有連接遠程服務器都需要先通過堡壘機,堡壘機上就可以實現所有操作記錄以及審計功能了。
13)腳本加密對安全性提升其實沒太大幫助。對有經驗的***來說,只要有系統登入權限,就可以通過提權等方式輕鬆獲得root。

2. 應用安全建議

1)禁用web server的autoindex配置。
2)從制度層面,杜絕員工將代碼上傳到外部github上,因爲很可能存在內部IP、賬號密碼泄露的風險,真的要上傳必須先經過安全審覈。
3)儘量不要在公網上使用開源的cms、blog、論壇等系統,除非做過代碼安全審計,或者事先做好安全策略。這類系統一般都是重點研究對象,很容易被搞;
4)在web server層,可以用一些安全模塊,比如nginx的WAF模塊;
5)在app server層,可以做好代碼安全審計、安全掃描,防止XSS
、CSRF、SQL注入、文件上傳、繞過cookie檢測等安全漏洞;
6)應用程序中涉及賬號密碼的地方例如JDBC連接串配置,儘量把明文密碼採用加密方式存儲,再利用內部私有的解密工具進行反解密後再使用。或者可以讓應用程序先用中間賬號連接proxy層,再由proxy連接MySQL,避免應用層直連MySQL;

最後我們想說,任何高明的安全策略,都不如內部員工的安全意識來的重要。以前發生過一起案例,公司內有位員工的PC不慎中毒,結果導致內網數據被盜。
安全無小事,每個人都應銘記於心。在數據安全面前,可以適當犧牲一些便利性,當然也不能太過,否則可能得不償失。

轉自:
http://wubx.net/mysql-security-101/

完畢!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章