資料安全是現在網際互聯網安全非常重要一個環節。而且一旦資料出現問題是不可逆的,甚至是災難性的。
有一些防護措施應該在前面幾個博文説過了,就不再贅述。比如通過防火牆控制,通過系統的使用者控制,通過 Web 應用的控制等。
想説的是,任何一個節點都不是單獨存在的。
場景
1 、確保應用本身安全。
2 、控制系統使用者對資料庫的訪問許可權。
3 、控制資料庫使用者對資料庫的訪問許可權。
4 、確保資料庫敏感資料的安全。
5 、確保資料庫整個資料的完整性。
6 、規範日常運維操作
7 、合理的劃分業務。
站羣解決方案
應用安全
刪除預設的資料庫和使用者
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 都應該拒絕。
比如:只允許辦公互聯網,還有業務站羣服務器對應的互聯網可以訪問。
區分角色
區分角色,給不同的許可權。角色的劃分需要根據具體的使用場景。
下面簡單舉例:
1 、角色:view 。許可權:只允許查詢資料,不允許做任何修改。場景:業務正確性驗證時
2 、角色:update 。許可權:允許修改資料,但是不允許修改資料結構。場景:程式執行
3 、角色:operate 。許可權:允許修改表結構,允許新增和修改表,不允許刪除表,不允許刪庫。場景:產品要釋出的時候才可以使用,通過升級 sql 方式執行。
4 、…..
加密敏感資訊
要使用 md5,sha 等演算法加密。這樣即使資料丟失,也能減少損失。比如:登入密碼,支付密碼等。
保證資料的完整性
1 、解決單點故障。主從,主主。
2 、需要備份與還原。
規範日常操作
1 、如果沒有特殊需求,應該使用最小的使用者。比如只使用檢視的使用者。
2 、有需要修改資料或者結構的操作,可以考慮兩人一起。或者可以考慮做成功能,減少人為直接運算元據庫。
3 、在測試環境上測試 OK,才往正式環境執行。
業務的劃分
少用資料庫
可以通過 WordPress 加速緩存,靜態化。儘可能少的使用資料庫。能不使用資料庫是最安全。
分庫分表
敏感的資料和常用的資料,最好從表的設計上隔離。比如:使用者的詳情資訊和支付資訊最好分開。
優化 sql
這個也非常重要,往往就是因為不重要 sql 的優化,所以資料庫對應的站羣服務器資源吃滿不提供服務。
驗證方法
通過不同的賬號操作,判斷有沒有對應的許可權。