淺談MySQL數(shù)據(jù)庫的Web安全問題
數(shù)據(jù)安全是現(xiàn)在互聯(lián)網(wǎng)安全非常重要一個(gè)環(huán)節(jié)。而且一旦數(shù)據(jù)出現(xiàn)問題是不可逆的,甚至是災(zāi)難性的。
有一些防護(hù)措施應(yīng)該在前面幾個(gè)博文說過了,就不再贅述。比如通過防火墻控制,通過系統(tǒng)的用戶控制,通過Web應(yīng)用的控制等。
想說的是,任何一個(gè)節(jié)點(diǎn)都不是單獨(dú)存在的。
場(chǎng)景
1、確保應(yīng)用本身安全。
2、控制系統(tǒng)用戶對(duì)數(shù)據(jù)庫的訪問權(quán)限。
3、控制數(shù)據(jù)庫用戶對(duì)數(shù)據(jù)庫的訪問權(quán)限。
4、確保數(shù)據(jù)庫敏感數(shù)據(jù)的安全。
5、確保數(shù)據(jù)庫整個(gè)數(shù)據(jù)的完整性。
6、規(guī)范日常運(yùn)維操作
7、合理的劃分業(yè)務(wù)。
解決方案
應(yīng)用安全
刪除默認(rèn)的數(shù)據(jù)庫和用戶
mysql初始化后會(huì)自動(dòng)生成空用戶和test庫,這會(huì)對(duì)數(shù)據(jù)庫構(gòu)成威脅,我們?nèi)縿h除。
- 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;
禁止數(shù)據(jù)庫從本地直接加載內(nèi)容
在某些情況下,LOCAL INFILE命令可被用于訪問操作系統(tǒng)上的其它文件(如/etc/passwd),應(yīng)使用下現(xiàn)的命令:
- mysql> LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE table1
- # 更簡單的方法是:
- mysql> SELECT load_file("/etc/passwd")
為禁用LOCAL INFILE命令,應(yīng)當(dāng)在MySQL配置文件的[mysqld]部分增加下面的參數(shù):
- set-variable=local-infile=0
控制用戶的權(quán)限
這里用戶,指的是數(shù)據(jù)庫里的用戶。
控制訪問的ip。
只允許信任的ip訪問,其他的ip都應(yīng)該拒絕。
比如:只允許辦公網(wǎng)絡(luò),還有業(yè)務(wù)服務(wù)器對(duì)應(yīng)的網(wǎng)絡(luò)可以訪問。
區(qū)分角色
區(qū)分角色,給不同的權(quán)限。角色的劃分需要根據(jù)具體的使用場(chǎng)景。
下面簡單舉例:
1、角色:view。權(quán)限:只允許查詢數(shù)據(jù),不允許做任何修改。場(chǎng)景:業(yè)務(wù)正確性驗(yàn)證時(shí)
2、角色:update。權(quán)限:允許修改數(shù)據(jù),但是不允許修改數(shù)據(jù)結(jié)構(gòu)。場(chǎng)景:程序運(yùn)行
3、角色:operate。權(quán)限:允許修改表結(jié)構(gòu),允許新增和修改表,不允許刪除表,不允許刪庫。場(chǎng)景:產(chǎn)品要發(fā)布的時(shí)候才可以使用,通過升級(jí)sql方式執(zhí)行。
4、.....
加密敏感信息
要使用md5,sha等算法加密。這樣即使數(shù)據(jù)丟失,也能減少損失。比如:登錄密碼,支付密碼等。
保證數(shù)據(jù)的完整性
1、解決單點(diǎn)故障。主從,主主。
2、需要備份與還原。
規(guī)范日常操作
1、如果沒有特殊需求,應(yīng)該使用最小的用戶。比如只使用查看的用戶。
2、有需要修改數(shù)據(jù)或者結(jié)構(gòu)的操作,可以考慮兩人一起。或者可以考慮做成功能,減少人為直接操作數(shù)據(jù)庫。
3、在測(cè)試環(huán)境上測(cè)試OK,才往正式環(huán)境執(zhí)行。
業(yè)務(wù)的劃分
少用數(shù)據(jù)庫
可以通過緩存,靜態(tài)化。盡可能少的使用數(shù)據(jù)庫。能不使用數(shù)據(jù)庫是最安全。
分庫分表
敏感的數(shù)據(jù)和常用的數(shù)據(jù),***從表的設(shè)計(jì)上隔離。比如:用戶的詳情信息和支付信息***分開。
優(yōu)化sql
這個(gè)也非常重要,往往就是因?yàn)椴恢匾猻ql的優(yōu)化,所以數(shù)據(jù)庫對(duì)應(yīng)的服務(wù)器資源吃滿不提供服務(wù)。
驗(yàn)證方法
通過不同的賬號(hào)操作,判斷有沒有對(duì)應(yīng)的權(quán)限。
參考資料
- 保障MySQL安全的十四個(gè)***方法
- Mysql安全配置
- 《高性能MySql》