淺談MySQL數據庫的Web安全問題

數據安全是如今互聯網安全很是重要一個環節。並且一旦數據出現問題是不可逆的,甚至是災難性的。mysql

有一些防禦措施應該在前面幾個博文說過了,就再也不贅述。好比經過防火牆控制,經過系統的用戶控制,經過Web應用的控制等。算法

想說的是,任何一個節點都不是單獨存在的。sql

場景數據庫

一、確保應用自己安全。緩存

二、控制系統用戶對數據庫的訪問權限。安全

三、控制數據庫用戶對數據庫的訪問權限。服務器

四、確保數據庫敏感數據的安全。網絡

五、確保數據庫整個數據的完整性。數據結構

六、規範平常運維操做運維

七、合理的劃分業務。

解決方案

應用安全

刪除默認的數據庫和用戶

mysql初始化後會自動生成空用戶和test庫,這會對數據庫構成威脅,咱們所有刪除。

 
  1. mysql> drop database test; 
  2. mysql> use mysql; 
  3. mysql> delete from db; 
  4. mysql> delete from user where not(host=」localhost」 and user=」root」); 
  5. mysql> flush privileges; 

禁止數據庫從本地直接加載內容

在某些狀況下,LOCAL INFILE命令可被用於訪問操做系統上的其它文件(如/etc/passwd),應使用下現的命令:

 
  1. mysql> LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE table1 
  2. # 更簡單的方法是: 
  3. mysql> SELECT load_file("/etc/passwd") 

爲禁用LOCAL INFILE命令,應當在MySQL配置文件的[mysqld]部分增長下面的參數:

 
  1. set-variable=local-infile=0 

控制用戶的權限

這裏用戶,指的是數據庫裏的用戶。

控制訪問的ip。

只容許信任的ip訪問,其餘的ip都應該拒絕。

好比:只容許辦公網絡,還有業務服務器對應的網絡能夠訪問。

區分角色

區分角色,給不一樣的權限。角色的劃分須要根據具體的使用場景。

下面簡單舉例:

一、角色:view。權限:只容許查詢數據,不容許作任何修改。場景:業務正確性驗證時

二、角色:update。權限:容許修改數據,可是不容許修改數據結構。場景:程序運行

三、角色:operate。權限:容許修改表結構,容許新增和修改表,不容許刪除表,不容許刪庫。場景:產品要發佈的時候纔可使用,經過升級sql方式執行。

四、.....

加密敏感信息

要使用md5,sha等算法加密。這樣即便數據丟失,也能減小損失。好比:登陸密碼,支付密碼等。

保證數據的完整性

一、解決單點故障。主從,主主。

二、須要備份與還原。

規範平常操做

一、若是沒有特殊需求,應該使用最小的用戶。好比只使用查看的用戶。

二、有須要修改數據或者結構的操做,能夠考慮兩人一塊兒。或者能夠考慮作成功能,減小人爲直接操做數據庫。

三、在測試環境上測試OK,才往正式環境執行。

業務的劃分

少用數據庫

能夠經過緩存,靜態化。儘量少的使用數據庫。能不使用數據庫是最安全。

分庫分表

敏感的數據和經常使用的數據,最好從表的設計上隔離。好比:用戶的詳情信息和支付信息最好分開。

優化sql

這個也很是重要,每每就是由於不重要sql的優化,因此數據庫對應的服務器資源吃滿不提供服務。

驗證方法

經過不一樣的帳號操做,判斷有沒有對應的權限。

相關文章
相關標籤/搜索