簡介 數據安全是現在互聯網安全非常重要一個環節。而且一旦數據出現問題是不可逆的,甚至是災難性的。 有一些防護措施應該在前面幾個博文說過了,就不再贅述。比如通過防火牆控制,通過系統的用戶控制,通過web應用的控制等。 想說的是,任何一個節點都不是單獨存在的。 場景 1. 確保應用本身安全。 2. 控制 ...
簡介
數據安全是現在互聯網安全非常重要一個環節。而且一旦數據出現問題是不可逆的,甚至是災難性的。
有一些防護措施應該在前面幾個博文說過了,就不再贅述。比如通過防火牆控制,通過系統的用戶控制,通過web應用的控制等。
想說的是,任何一個節點都不是單獨存在的。
場景
- 確保應用本身安全。
- 控制系統用戶對資料庫的訪問許可權。
- 控制資料庫用戶對資料庫的訪問許可權。
- 確保資料庫敏感數據的安全。
- 確保資料庫整個數據的完整性。
- 規範日常運維操作
- 合理的劃分業務。
解決方案
應用安全
刪除預設的資料庫和用戶
mysql初始化後會自動生成空用戶和test庫,這會對資料庫構成威脅,我們全部刪除。
mysql> drop database test;
mysql> use mysql;
mysql> delete from db;
mysql> delete from user where not(host=”localhost” and user=”root”);
mysql> flush privileges;
禁止資料庫從本地直接載入內容
在某些情況下,LOCAL INFILE命令可被用於訪問操作系統上的其它文件(如/etc/passwd),應使用下現的命令:
mysql> LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE table1
# 更簡單的方法是:
mysql> SELECT load_file("/etc/passwd")
為禁用LOCAL INFILE命令,應當在MySQL配置文件的[mysqld]部分增加下麵的參數:
set-variable=local-infile=0
控制用戶的許可權
這裡用戶,指的是資料庫里的用戶。
控制訪問的ip。
只允許信任的ip訪問,其他的ip都應該拒絕。
比如:只允許辦公網路,還有業務伺服器對應的網路可以訪問。
區分角色
區分角色,給不同的許可權。角色的劃分需要根據具體的使用場景。
下麵簡單舉例:
- 角色:view。許可權:只允許查詢數據,不允許做任何修改。場景:業務正確性驗證時
- 角色:update。許可權:允許修改數據,但是不允許修改數據結構。場景:程式運行
- 角色:operate。許可權:允許修改表結構,允許新增和修改表,不允許刪除表,不允許刪庫。場景:產品要發佈的時候才可以使用,通過升級sql方式執行。
- .....
加密敏感信息
要使用md5,sha等演算法加密。這樣即使數據丟失,也能減少損失。比如:登錄密碼,支付密碼等。
保證數據的完整性
- 解決單點故障。主從,主主。
- 需要備份與還原。
規範日常操作
- 如果沒有特殊需求,應該使用最小的用戶。比如只使用查看的用戶。
- 有需要修改數據或者結構的操作,可以考慮兩人一起。或者可以考慮做成功能,減少
人為直接操作資料庫
。 - 在測試環境上測試OK,才往正式環境執行。
業務的劃分
少用資料庫
可以通過緩存,靜態化。儘可能少的使用資料庫。能不使用資料庫是最安全。
分庫分表
敏感的數據和常用的數據,最好從表的設計上隔離。比如:用戶的詳情信息和支付信息最好分開。
優化sql
這個也非常重要,往往就是因為不重要sql的優化,所以資料庫對應的伺服器資源吃滿不提供服務。
驗證方法
通過不同的賬號操作,判斷有沒有對應的許可權。
參考資料
- 保障MySQL安全的十四個最佳方法
- Mysql安全配置
- 《高性能MySql》