數據安全是如今互聯網安全很是重要一個環節。並且一旦數據出現問題是不可逆的,甚至是災難性的。mysql
有一些防禦措施應該在前面幾個博文說過了,就再也不贅述。好比經過防火牆控制,經過系統的用戶控制,經過Web應用的控制等。算法
想說的是,任何一個節點都不是單獨存在的。sql
場景數據庫
一、確保應用自己安全。緩存
二、控制系統用戶對數據庫的訪問權限。安全
三、控制數據庫用戶對數據庫的訪問權限。服務器
四、確保數據庫敏感數據的安全。網絡
五、確保數據庫整個數據的完整性。數據結構
六、規範平常運維操做運維
七、合理的劃分業務。
解決方案
應用安全
刪除默認的數據庫和用戶
mysql初始化後會自動生成空用戶和test庫,這會對數據庫構成威脅,咱們所有刪除。
禁止數據庫從本地直接加載內容
在某些狀況下,LOCAL INFILE命令可被用於訪問操做系統上的其它文件(如/etc/passwd),應使用下現的命令:
爲禁用LOCAL INFILE命令,應當在MySQL配置文件的[mysqld]部分增長下面的參數:
控制用戶的權限
這裏用戶,指的是數據庫裏的用戶。
控制訪問的ip。
只容許信任的ip訪問,其餘的ip都應該拒絕。
好比:只容許辦公網絡,還有業務服務器對應的網絡能夠訪問。
區分角色
區分角色,給不一樣的權限。角色的劃分須要根據具體的使用場景。
下面簡單舉例:
一、角色:view。權限:只容許查詢數據,不容許作任何修改。場景:業務正確性驗證時
二、角色:update。權限:容許修改數據,可是不容許修改數據結構。場景:程序運行
三、角色:operate。權限:容許修改表結構,容許新增和修改表,不容許刪除表,不容許刪庫。場景:產品要發佈的時候纔可使用,經過升級sql方式執行。
四、.....
加密敏感信息
要使用md5,sha等算法加密。這樣即便數據丟失,也能減小損失。好比:登陸密碼,支付密碼等。
保證數據的完整性
一、解決單點故障。主從,主主。
二、須要備份與還原。
規範平常操做
一、若是沒有特殊需求,應該使用最小的用戶。好比只使用查看的用戶。
二、有須要修改數據或者結構的操做,能夠考慮兩人一塊兒。或者能夠考慮作成功能,減小人爲直接操做數據庫。
三、在測試環境上測試OK,才往正式環境執行。
業務的劃分
少用數據庫
能夠經過緩存,靜態化。儘量少的使用數據庫。能不使用數據庫是最安全。
分庫分表
敏感的數據和經常使用的數據,最好從表的設計上隔離。好比:用戶的詳情信息和支付信息最好分開。
優化sql
這個也很是重要,每每就是由於不重要sql的優化,因此數據庫對應的服務器資源吃滿不提供服務。
驗證方法
經過不一樣的帳號操做,判斷有沒有對應的權限。